我有些奇怪的事要报告。 在我新configuration的RHEL5服务器上,我的shell被设置为/ bin / bash我把umask设置为002在.bashrc中。
当我第一次login时,umask似乎正常工作:
$ touch a $ ls -la -rw-rw-r-- etc.....
如果我创build另一个文件它的作品:
$ touch b $ ls -lb -rw-rw-r-- etc.....
但是…如果我改变目录(到任何目录),然后umask得到回022:
$ cd /var/www/whatever $ touch c $ ls -lc -rw-r--r-- etc.....
完全离奇。
有人看到这样的事情吗? 他们能想到要检查的东西吗?
为什么cd'ing后umask设置会改变?
谢谢,
-Charlie
感谢Barry Brown对上面的评论 – 我正在把这个问题(在OSX上,而不是在Linux上)扯出来,这确实是rvm在我的情况中的罪魁祸首。 检查你的.profile,.bash_profile等这样的一行:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
评论一下,重新启动你的shell,这应该可以解决问题。 我不知道rvm是如此的粗鲁和侵入性。 最好只在需要的时候加载,而不是每个shell。
简短的回答是:umask有4位数字,并且不会任意改变,但是默认情况下,/ etc / profile和fiends会将其设置为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:执行
域的setuid用户组世界 数字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,所有需要做的就是从“最大掩码”减去不需要的权限,对于文件夹是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