当前位置: 技术问答>linux和unix
怎么设置文件权限为rw-rw-r-x
来源: 互联网 发布时间:2016-09-13
本文导语: 希望一个用户创建的文件默认权限是rw-rw-r-x 请问umask 后面应该设置为多少? | rw-rw-r-x 八进制容易记: r 4 w 2 x 1 - - - o 4+2 - - - g 4+2 - - - o 1 懂了吧 ? | 使用umask,屏蔽字为1的...
希望一个用户创建的文件默认权限是rw-rw-r-x
请问umask 后面应该设置为多少?
请问umask 后面应该设置为多少?
|
rw-rw-r-x
八进制容易记:
r 4
w 2
x 1
- - - o 4+2
- - - g 4+2
- - - o 1
懂了吧 ?
|
使用umask,屏蔽字为1的位,在文件mode中的位就会被关闭。但是,要想确定创建文件的访问权限,仅使用umask并不能高枕无忧。它要结合程序中文件创建函数open或creat所使用的mode参数。
下面有一个例子,希望对LZ有所帮助。
下面有一个例子,希望对LZ有所帮助。
#include ...
#define MODE ( S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IXOTH )
int main( void )
{
umask( 0 );
if ( open( "filename", O_CREAT, MODE ) == -1 )
{
perror( "open" );
exit( EXIT_FAILURE );
}
close( 3 );
}
|
也别记2进制了直接记
read =4
write=2
execute=1
rw- rw- r-x
6 6 5
chmod 665 $filename
read =4
write=2
execute=1
rw- rw- r-x
6 6 5
chmod 665 $filename
|
你要的是rw-rw-r-x 也就是665.
那么应该设置umask 112
因为777-665=112 异或运算可以看成减法
那么应该设置umask 112
因为777-665=112 异或运算可以看成减法
|
新创建的文件默认是没用执行权限的
所以无论怎么改umask值,都不能到达那样的结果
所以无论怎么改umask值,都不能到达那样的结果
|
$ chmod 665 filename
|
最前面的三位是user的读、写、执行权限,中间三位是group的读、写、执行权限,最后三位是other的读、写、执行权限。每一组按8进制计算。
rw-rw-r-x,对应二进制位是110 110 101,换算成8进制后是665。
rw-rw-r-x,对应二进制位是110 110 101,换算成8进制后是665。
|
需要umask和create函数联合起来使用哈
|
umask 112
touch test
结果为:-rw-rw-r--
mkdir test
结果为:
drw-rw-r-x
不知道为什么umask设置为 112 其他用户权限中没有 x ,但是新建文件夹的话文件夹会带上。
|
使用umask设置屏蔽字,保证相应权限一定会被屏蔽,但并不是对应于其他的权限的位就一定会被设置。要做到这一点,需要创建文件的程序中明确地指明mode。
大致的原理是这样的,至于更深一层的东西,我现在还不太确定。
|
出于对系统的安全考虑,新建的文件是没有执行权限的
哪怕你uname 000
得到的文件也不会有x属性
哪怕你uname 000
得到的文件也不会有x属性
|
112
因为是与777相与。
因为是与777相与。
111 111 111
XOR
001 001 010
---------------
110 110 101
rw- rw- r-x
|
默认的文件产生是没有执行权限的
umask 002
我们项目组就用的这个