有需要让系统的mask值统一设置成0002.
自己之前对umask的了解:
1. 设置用户的mask值
2. 在设置用户的mask值后, 用户的新进程都使用这个mask
jessinio@niolaptop ~ $ which umask
which: no umask in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.3.2:/usr/games/bin:/usr/sbin:/sbin:/usr/local/sbin:/opt)
umask并不是一个独立的一个bin文件, 它是shell中内建的命令
下面两句让我认知都自己的理解是错误的:
1. umask() sets the calling process's file mode creation mask (umask) to mask & 0777 (i.e., only the file permission bits of mask are used), and returns the previous value of the mask.
A child process created via fork(2) inherits its parent's umask. The umask is left unchanged by execve(2)
* 来自man 2 umask
总感觉umask的值就像一个环境变量:
jessinio@niolaptop ~ $ umask
0002
jessinio@niolaptop ~ $ bash -c "umask 0022"
jessinio@niolaptop ~ $ umask
0002
子进程是不会影响到父进程的mask值.
这样子, 自己刚开始的需求:
* 统一影响到所有的程序的Mask值
被分解为三部分:
1. no-interactive的程序, 这里针对/etc/init.d下的daemon
2. interactive的程序
3. 程序自身设置Mask的值
对于第一种, 应该从父进程入手, 系统的所有程序的父进程为init, 查看init的man手册, 没有相关选项.
/sbin/init是由/boot/initrd.img 内的linux脚本启动. 要修改应该从这个入手
对于第二种, 应该从login shell入手. 如:
* /etc/profile
* ~/.profile
* ~/.bash_profile
* ~/.bash_login
* 对于非login shell还有一个文件: ~/.bashrc
对于第三种, 这除了修改代码还有其它办法?
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.