cd后closuresumask设置

我有些奇怪的事要报告。 在我新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)会更麻烦,所以我不提及它。


chmodumask的解释

可能的设置: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转换为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