5

我有一些奇怪的事情要报告。在我新配置的 RHEL5 服务器上,我的 shell 设置为 /bin/bash 我在 .bashrc 中将 umask 设置为 002。

当我第一次登录时,umask 似乎工作正常:

$ touch a
$ ls -l a
-rw-rw-r-- etc.....

如果我创建另一个文件它可以工作:

$ touch b
$ ls -l b
-rw-rw-r-- etc.....

但是...如果我更改目录(到任何目录),那么 umask 会被设置回 022:

$ cd /var/www/whatever
$ touch c
$ ls -l c
-rw-r--r-- etc.....

完全奇怪。

有人见过这样的吗?他们能想到要检查的东西吗?

为什么 cd'ing 后 umask 设置会改变?

谢谢,

-查理

4

2 回答 2

5

感谢 Barry Brown 的上述评论 - 我为这个问题(在 OSX 上,而不是 Linux 上)而烦恼,而 rvm 确实是我的罪魁祸首。检查您的 .profile、.bash_profile 等是否有这样的行:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

将其注释掉,重新启动您的外壳,这应该可以解决问题。我不知道 rvm 如此粗鲁和侵入性。最好只在需要时才加载它,而不是为每个 shell 加载。

于 2012-10-17T10:22:08.507 回答
1

简短的回答是:umask 有四位数字,不会随意更改,但 /etc/profile 和 fiends 会默认设置为 022;

更新
我有点忘乎所以,忘了正确回答你的问题:

检查安装在您更改到的文件夹上的分区(如果有)没有设置 umask。(只需输入mount

长答案是:

man chmod §6:数字模式是从一​​到四个八进制数字 (0-7),通过将具有值 4、2 和 1 的位相加得出。省略的数字假定为前导零。第一个数字选择设置用户 ID (4) 和设置组 ID (2) 以及限制删除或粘性 (1) 属性。第二个数字选择拥有文件的用户的权限:读(4)、写(2)和执行(1);第三个选择文件组中其他用户的权限,具有相同的值;第四个用于不在文件组中的其他用户,具有相同的值。

GNU coreutils 8.14 2011 年 10 月


我记得几年前多次阅读这个手册页,在我设置表格之前从未完全理解所有这些意味着什么。由于我丢失了我的参考表,我将在这里重新创建它。由于我不喜欢符号表示法,因为它输入起来更麻烦(例如 chmod u+x),我将省略它的任何提及。


chmodumask的解读

可能的设置: 4:读取 2:写入 1:执行

每个数字的可能值以及示例

域 setuid 用户组 world
数字 1 2 3 4
值 0-7 0-7 0-7 0-7

花括号 {} 中的“可能设置”值可以加在一起以产生有效的权限位(数字)。

常见示例

0755:用户可以进入一个文件夹并在该文件夹中写入(删除)文件如果这个掩码设置在一个文件上,用户可以执行该文件(即./filenme.bin)。最后两位数字表示文件所属的组和世界(系统上的任何其他人)也可以执行文件。应用于目录意味着组和世界可以进入该目录。

0644 : 用户可以读写文件,但不能执行。组和世界只能读取文件。应用于文件夹,此掩码将阻止任何人进入该目录。

0600 : 只有所有者可以使用此掩码读写文件

0700 : 只有文件夹的所有者可以使用此掩码进入、读取和写入文件夹的内容。

0000:用于“隐藏”文件或(向您自己)发出不应使用文件或文件夹的信号。

无意义的面具

0200 : 如果用户可以写入文件,那么他们也可以更改文件的 umask。

危险的面具

0666 : 每个人都可以使用此掩码读取、写入和删除文件

0777:文件夹也一样。如果二进制文件设置为777,那么任何人都可以将任何他们想要的内容放入该文件并运行它,即使它位于系统范围的二进制目录中,例如 /usr/bin。

4755:超级用户(root)拥有的二进制文件将以超级用户权限运行。这其中的含义应该很清楚。也许,用 4755 直观地设置解释脚本将不起作用,因为脚本(例如 bash 脚本)仍然由 /bin/bash 运行。存储脚本的文本文件并不是真正的可执行文件。

在所有上述示例中,为方便起见,可以省略前导零。

将 umask 转换为 chmod

要设置正确的 umask,只需从“最大掩码”中减去不需要的权限,文件夹为 0777,文件为 666。

要强制 shell 创建具有默认权限 644 的文件,请将 umask 设置为 0022。对于文件夹,典型的(所需)umask 可能是 755,可以通过将 umask 设置为 0022 来实现。

0666 0777
-0022 -0022
 ____ ____
 0644 0755

相关链接: https ://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts

于 2012-10-10T02:12:41.533 回答