linux中,常常涉及到权限的问题。文件的权限有3组,owner,group,other,每一组都有rwx三种设置。r(4):可读;w(2):可写;x(1):可执行。
我们在执行shell命令ls -l时,就会显示出文件的所有信息,第一组就是文件属性中的高级属性,权限。这一组总共有10格,每一格是一个bit。
第一个是特殊位:
d表示目录;
l表示连接文件;
-表示文件;
b表示为装置(device)文件中可供存储的接口设备;
c表示为装置文件中的串行端口设备(如键盘,鼠标);
s表示该文件是存放socket信息的,一般是给 process 之前用来进行 network socket 存取沟通使用的档案;
p表示数据输送文件(FIFO,pipe),它的主要目的是为了解决多个程序同时存取一个文件时所造成的错误。
以后的9个格子按照之前所说的3个组依次分配,给每个组设置读,写,执行权限。
在这里要注意:如果你想开放一个目录,一定要确定X即可执行权限已经赋予了该用户或群,否则是不可以读写的,也就是说,你给的r,w是没意
义的。
文件权限的修改: chmod:改变档案的属性、SUID等特性
用法:
chmod [-R] 777 dir/filename (注:7=r+w+x;6=r+w;5=r+x;3=w+x)
chmod [-R] a+rwx dir/filename
chmod [-R] u-r dir/filename
chmod [-R] u=rwx,go=rx dir/filename (注:a:所有用户和组;u:所有者;g:组;o:其他。+:添加权限;-删除权限;=赋予权限)
chgrp:改变档案的所属群组
用法:chgrp [-R] group dir/filename
chown:改变档案所属人 用法:chown [-R] user dir/filename;
顺便还可以改变群组 chown [-R] user:group dir/filename
除了这些一般权限外,我们还可以设置高级权限,也可以说是特殊权限:
SUID/SGID/Sticky Bit (档案特殊权限):
SUID (Set UID): 会制作出 s 的权限,权限数字是 4 。这个权限只能作用于可执行文件,不可作用于目录,shell script也不行。使一般使用者在执行文件时,暂时具有该文件拥有者的权限。
SGID (Set GID): 制作出 s 权限,权限数字是 2 。这个权限可以作用于目录和文件。作用于目录时,在该目录下建立的所有文件和目录的group都会是该目录的group;作用于文件时,则不论使用者是谁,在执行该程序的时候, 他的有效群组 (effective group) 将会变成该程序的群组所有人 (group id)。
Sticky Bit: 制作出 t 权限,权限数字是 1 。在该权限作用的目录里,如果使用者具有w,x权限,那么他所创建的文件和目录,只有档案的拥有者和root才能删除。
注意:在字符表示权限时,s和t是出现在x的位置的,意思是在可执行的文件和目录时,它们才是有意义的。如果文件或目录本身u、g或o就没有可
执行权限,那么它所在的权限组出现的是S或者T,表示空的意思。
来源: <http://blog.chinaunix.net/uid-20864319-id-448817.html>