我有些奇怪的报道。在我新配置的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设置会发生变化?
谢谢,
-Charlie
答案 0 :(得分:4)
感谢Barry Brown上面的评论 - 我正在解决这个问题(在OSX上,而不是Linux上),而且确实是rvm,这是我案件中的罪魁祸首。 检查你的.profile,.bash_profile等代码如下:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
注释掉,重新启动你的shell,这应该可以解决问题。 我不知道rvm是如此粗鲁和侵扰。最好只在需要时加载它而不是每个shell。
答案 1 :(得分:1)
简短的回答是:umask有四位数字并且不会随意更改,但/ etc / profile和恶魔默认会将其设置为022;
更新
我有点不知所措,忘了正确回答你的问题:
检查安装在您更改的文件夹上的分区(如果有),没有设置umask。 (只需输入 mount )
答案很长:
man chmod §6: 数字模式是从一到四个八进制数字(0-7),通过加总得出 值为4,2和1的位。假定省略的数字为前导 零。第一个数字选择设置的用户ID(4)并设置组ID(2)和 限制删除或粘性(1)属性。第二个数字选择 拥有该文件的用户的权限:read(4),write(2)和execute (1);第三个选择文件组中其他用户的权限 相同的价值观;和第四个不在文件组中的其他用户 相同的价值观。
GNU coreutils 8.14 2011年10月
我记得几年前曾多次读过这个手册页,而且从来没有 在设置表格之前,要完全理解所有这些意味着什么。自从我 丢失了我的参考表,我将在这里重新创建它。因为我不喜欢象征性的 因为打字比较麻烦(例如chmod u + x),我会遗漏 任何提及它。
可能的设定: 4:阅读 2:写 1:执行
domain setuid user group world digit 1 2 3 4 values 0-7 0-7 0-7 0-7
花括号{}中的“可能的设置”值可能是 总计得出一个有效的权限位(数字)。
常见示例
0755 :用户可以输入文件夹并在该文件夹中写入(删除)文件 如果在文件上设置了此掩码,则用户可以执行该文件(即 ./filenme.bin)。最后两位数表示该组所在的组 文件属于世界(系统中的任何其他人),可以执行 该文件也是如此。应用于指挥它意味着该组和 世界可能会进入该目录。
0644 :用户可以读写文件,但不能执行。集团与世界 可能只读取文件。应用到文件夹,这个面具将防止 任何人进入该目录。
0600 :只有所有者可以使用此掩码读取和写入文件
0700 :只有文件夹的所有者可以输入,读取和写入a的内容 带有这个面具的文件夹。
0000 :用于“隐藏”文件或用于向文件发送信号(对自己) 或者不应该使用文件夹。
毫无意义的面具
0200 :如果用户可以写一个文件,那么他们也可以改变文件的umask。
危险面具
0666 :每个人都可以使用此面具读取,写入和删除文件
0777 :文件夹也是如此。如果二进制文件设置为 777 ,则任何人都可以放置 他们想要进入该文件并运行它,即使它在系统中 - 宽二进制目录,例如/ usr / bin。
4755 :超级用户(root)拥有的二进制文件将与超级用户一起运行 权限。这应该是明确的含义。也许,反对者 - 直观地用4755设置解释脚本将无效 因为/ bin / bash仍然运行脚本(例如bash脚本)。该 存储脚本的文本文件实际上不是可执行文件。
在所有上述示例中,为方便起见,可省略前导零。
要设置正确的umask,需要做的就是减去不需要的umask 来自`maximum mask'的权限,对于文件夹是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