首先所有权限对于三类用户分别设定: User(所有者) / Group(组群) / Others(其他)。
权限也是有三种:Read / Write / eXecute,这三种权限对于文档和目录有不同的意义。
1. 对于文档:
Read:可以查看文档的内容
Write:可以修改文档的内容,添加、删除、修改内容等
eXecute:文档可执行
需要注意:对于文档,权限指的是对于文档内容的权限而不是对于文档本身的权限。举个例子就是说即使有对文档的read,write,execute全部的权限,也不能决定是否删除移动文档本身,这些权限是由目录权限规定的。
2. 对于文件夹:
Read: 可以查看文件夹下文件/目录列表
Write:可以在目录下添加、删除文件/目录,当然还有修改文件名/目录名
eXecute: 是否可以作为工作目录,即是否可以cd进来
注意:对于文件夹,没有execute权限的话,Read write功能都不能被正常使用
修改权限的命令:chown,chgrp,chmod,
chown:
$sudo chown 账号名 文件名/目录名 #只改拥有者
$sudo chown 账号名:组群 文件名/目录名 #改拥有者和组群
$sudo chown 账号名.组群 文件名/目录名 #同上
$sudo chown .组群 文件名/目录名 #只改组群
chgrp:
$sudo chgrp 组名 文件名/目录名
chmod:修改权限的时候并不是每次都要写9个权限的,太长了
每个权限有对应的整数值,read(4),write(2),execute(1), 用他们的和就可代表一类权限。
$sudo chmod 744 文件名/目录名
虽然这样已经将参数从9减至3了,但依然不够简便。可以利用+/-/=来增加/删除/设定权限。其中用u/g/o/a分别表示拥有者/群组/其他用户/全部。
$sudo chmod u+x,go-w 文件名/目录名 #给拥有者增加execute权限,其他用户撤销write权限。
p.s. 上述的命令用语文件夹时可以加上选项 -R 表示对文件夹的所有目录递归使用。
2010.12.7日补充:
除了普通的r,w,x等权限,文档/目录还有默认权限,隐藏权限和特殊权限,下面分别介绍。
默认权限:
umask:新建档案或目录的默认属性,新建档案没有execute权限,新建目录有execute权限
$umask -S
u=rwx,g=rx,o=rx
$umask
0022
注意,以数字显示权限中,数字表示的是该默认值需要减掉到权限,如2,表示没有w=2权限
隐藏权限:lsattr,chattr,只有在ext2/ext3/ext4下面有效,其他文件系统下显示“lsattr: 对设备不适当的 ioctl 操作 While reading flags on ...”错,需要用到的请man
特殊权限:SUID, SGID, SBIT
我们已经知道了文档/目录有r,w,x三个权限,但是有时还会有s,t权限,比如passwd,/tmp,等的权限如下所示:
-rwsr-xr-x 1 root root 37140 2010-01-27 01:09 /usr/bin/passwd*
drwxrwxrwt 13 root root 4096 2010-12-07 09:58 ./
s对应于文档所有者的权限时对应SUID(Set User ID)权限。SUID权限只存在于二进制程序,是指一般用户执行此二进制程序时获得root权限(要求一般用户对文档有x权限噢)。注意对目录和非二进制程序到文档不存在这样到权限。
s对应与文档所属群组到权限时对应SGID(Set Group ID)权限。SGID权限对二进制程序文档和目录均有效:对于二进制程序文档,一般用户执行时获得文档所在群组到权限(要求一般用户对文档有x权限);对于目录,一般用户进入此目录时有目录所属群组的权限,当用户在此目录中新建文档/目录时,新建文档/目录到所属群为当前目录的所属群。
t对应于目录权限时对应SBIT(Sticky BIT),在该目录下新创建到的文档和目录只有所有者和root可以删除(可以创建是要求有w,x权限)。
如何设定特殊权限呢? 我们知道一般可以用744这个三个数字代表所有者,所在群组和其他用户的权限。在这三个数前面再加上一个数则代表特殊权限,其中SUID(4),SGID(2),SBIT(1).
liyx@liyx-ubuntu:~$ ll special
-rw-r--r-- 1 liyx liyx 0 2010-12-07 11:15 special
liyx@liyx-ubuntu:~$ chmod 4755 special
liyx@liyx-ubuntu:~$ ll special
-rwsr-xr-x 1 liyx liyx 0 2010-12-07 11:15 special*
当然也可以用$chmod o+s special 的方式修改特殊权限。
参考:《鸟哥的Linux私房菜基础篇》