转自:http://waringid.blog.51cto.com
不管是Linux新手还是高手,在使用它的时候不可避免都会遇到Linux权限问题。而这些问题也是初学者问得最多的问题,很多的脚本不能执行的原因就是因为没有设定正确的权限所致。这里我们来看看Linux下的根限到底是怎么一回事。
当你新建一个文件时,它的最初的权限取决于你的umask值(将在后面说明)。权限可以使用chmod命令或是chmod()系统调用来修改一个文件的权限模式。只有在文件所有者才能修改文件的权限模式。唯一例外的就是超级用户:超级用户可以修改任何文件的权限。下面是chmod命令的格式:
chmod [-Rfh] [agou] [+-=] [rwxXstugol] filelist
要修改哪些用户的特权:
字符 含义
a 修改所有用户的特权
g 修改组用户的特权
o 修改其它用户的特权
u 修改所有者的权限
执行什么操作:
字符
含义
-
删除当前的权限
=
替换当前的权限
+
增加当前的权限
字符 含义
- 删除当前的权限
= 替换当前的权限
+ 增加当前的权限
要修改哪一项权限:
字符 含义
r 读访问
w 写访问
x 执行访问
s SUID或是SGID
t 粘附位
字符
含义
a
修改所有用户的特权
g
修改组用户的特权
o
修改其它用户的特权
u
修改所有者的权限
字符
含义
a
修改所有用户的特权
g
修改组用户的特权
o
修改其它用户的特权
u
修改所有者的权限
其中X是表示由BSD衍生出来的UNIX系统特有的选项,它的意思是:如果文件是一个目录,或有一些其它执行位已设置,那么就将文件设置为只可执行。而l则是由System V衍生出来的UNX系统特有的选项,它的意思是:允许对文件进行强制加锁。
-R选项表示chmod命令会递归执行。如果指定了一个目录filelist,那么目录的权限改变了,目录下所有文件的权限也都改变了。如果该目录包含子目录,那么这一地程会一直向下重复。
-f选项表示强制执行,chmod命令不会报告错误。通常在shell中比较有用。
在某些系统中使用-h选项来改变chmod对符号链接的工作方式。如果指定了-h选项,而其中一个参数据为符号链接的话,那么chmod不会改变符号链接所指向的那个文件或目录的权限。
下图说明了命令的使用方法:
计算机八进制的文件权限:
chmod允许用户使用一个四位八进制数字来指定文件权限模式。用户可以通过将权限相加的方式来计算这一数值。下表说明了每个文件权限对应的八进制数。
八进制数 权限
4000 SUID
2000 SGID
1000 粘附位
0400 所有者可读
0200 所有者可写
0100 所有者可执行
0040 组成员可读
0020 组成员可写
0010 组成员可执行
0004 其它用户可读
0002 其它用户可写
001 其它用户可执行
因此,一个文件权限如果为“-rwxr-x---”,那么其文件模式为0750,计算过程为:0400+0200+0100+0040+0010=0750。例如常见的/tmp目录的权限就为1777,表示任何用户都可以在该目录下创建文件,但是用户不能删除其它用户的文件。
umask
umask是“用户文件创建模式掩码”的缩写,是一个四位的八进制数值。用来确定一个新创建文件的权限。每个进程都从父进程那里继承了自己的umask。一般该命令会在.bashrc,.profile,.cshrc或是/etc/profile及/etc/bashrc中。
最常见的umask值是022,027以及077。022让文件所有者拥有对新建文件的读写权限,但是其它人对此只读。例如:0666(默认的文件建立模式)+0022(umask)=0644。计算umask值最简单的方法是记住:umask值中的2屏蔽了写权限,而7屏蔽了读,写及执行权限。
常用的umask设置:
umask 用户访问 组访问 其它
0000 所有 所有 所有
0002 所有 所有 读,执行
0007 所有 所有 无
0022 所有 读,执行 读,执行
0027 所有 读,执行 无
0077 所有 无 无
下面的图片是显示新建文件后的权限,大家可以想想看它对应的mask应是多少。
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史
Copyright © 2010-2015 Linux安全网 LinuxSo.Com, All Rights Reserved. 豫ICP备12027123号-1