一、文件权限中的特殊权限
其实在UNIX的实现中,文件权限用12个二进制位表示:
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。
给文件加SUID和SGID的命令如下:
chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID位的设置
chmod g+s filename 设置SGID位
chmod g-s filename 去掉SGID位的设置
chmod +s filename 设置SUID,SGID位
chmod -s filename 去掉SUID,SGID位的设置
二、SUID和SGID的详细解析
由于SUID和SGID位是在执行程序时起作用(程序的可执行位被设置),而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID和SGID没有意义。
如果普通文件myfile是属于foo用户的,是可执行的,现在没有设置SUID位,ls -al命令显示如下:-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfile。任何用户都可以执行这个程序myfile,UNIX内核是根据什么来确定一个进程对资源的访问权限的呢?是这个进程的运行用户的有效ID,即euid、egid。
对一个进程来说,有运行这个进程的user id和group id,用户可以用id命令来查看自己的或其他用户的user id和group id。除了user id和group id外,还有两个称之为effective id(有效id),上面四个id表示为:uid、gid、euid、egid。内核是根据euid和egid来确定进程对资源的访问权限。
一个程序如果没有SUID或SGID位,则其运行后的进程的euid=uid egid=gid,即分别是运行这个程序的用户的uid和gid。例如kevin用户(uid=204 gid=202),foo用户(uid=200 gid=201),kevin运行myfile程序形成的进程的euid=204,egid=202,内核根据这些值来判断进程对资源访问的限制,其实这里就等于kevin用户对资源的访问
的权限,和foo没有关系。
一个程序如果设置了SUID,则euid和egid变成运行的程序的所有者的uid和gid,例如kevin用户运行myfile,
euid=200,egid=201,uid=204,gid=202,这个进程具有它的所有者foo的对资源访问的权限。
SUID的作用就是这样,让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源,passwd就是一个鲜明的例子。
三、SUID和SGID的关于passwd的说明
/etc/passwd 文件中存放各个用户的账户相关信息,/usr/bin/passwd 是执行修改和查看此文件的程序。
[root@VM_65_244_centos ~]# ls -al /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2月 22 2012 /usr/bin/passwd
[root@VM_65_244_centos ~]# ls -al /etc/passwd
-rw-r--r-- 1 root root 1185 8月 28 17:40 /etc/passwd
如上,从权限上看,/etc/passwd文件仅有root用户才有写(w)权限,可是为什么每个用户都可以直接调用/usr/bin/passwd来写/etc/passwd从而修改自己的密码呢?
s使得其他用户执行/usr/bin/passwd时具有与其owner root相当的权限。
四、sticky bit 粘着位
普通文件的sticky位会被linux内核忽略,目录的sticky位表示这个目录里的文件只能被owner和root删除。
如果用户对目录有wx权限,则可以删除其中的文件和子目录,即时该用户不是这些文件的所有者,而且也没有读或写
许可。
粘着位出现在执行许可的位置上,用t表示,设置了该位后,其他用户就不可用删除不属于他的文件和目录。
但是该目录下的目录不继承该权限,要再设置才可使用。
五、删除文件所需要的权限
文件名保存在上级目录的block中,所以对文件进行删除,是看上级目录是否有相应的w权限。
对目录来说:
r:代表读取目录中的内容
w:删除、修改目录里面文件名的权限【必须配合x执行才可以】
x:代表能否进入到目录里面去
所以说,想删除一个目录里面的文件,需要获得目录的wx权限,没有r权限只是不能查看,进入目录删除还是可以的。
其实在UNIX的实现中,文件权限用12个二进制位表示:
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。
给文件加SUID和SGID的命令如下:
chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID位的设置
chmod g+s filename 设置SGID位
chmod g-s filename 去掉SGID位的设置
chmod +s filename 设置SUID,SGID位
chmod -s filename 去掉SUID,SGID位的设置
二、SUID和SGID的详细解析
由于SUID和SGID位是在执行程序时起作用(程序的可执行位被设置),而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID和SGID没有意义。
如果普通文件myfile是属于foo用户的,是可执行的,现在没有设置SUID位,ls -al命令显示如下:-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfile。任何用户都可以执行这个程序myfile,UNIX内核是根据什么来确定一个进程对资源的访问权限的呢?是这个进程的运行用户的有效ID,即euid、egid。
对一个进程来说,有运行这个进程的user id和group id,用户可以用id命令来查看自己的或其他用户的user id和group id。除了user id和group id外,还有两个称之为effective id(有效id),上面四个id表示为:uid、gid、euid、egid。内核是根据euid和egid来确定进程对资源的访问权限。
一个程序如果没有SUID或SGID位,则其运行后的进程的euid=uid egid=gid,即分别是运行这个程序的用户的uid和gid。例如kevin用户(uid=204 gid=202),foo用户(uid=200 gid=201),kevin运行myfile程序形成的进程的euid=204,egid=202,内核根据这些值来判断进程对资源访问的限制,其实这里就等于kevin用户对资源的访问
的权限,和foo没有关系。
一个程序如果设置了SUID,则euid和egid变成运行的程序的所有者的uid和gid,例如kevin用户运行myfile,
euid=200,egid=201,uid=204,gid=202,这个进程具有它的所有者foo的对资源访问的权限。
SUID的作用就是这样,让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源,passwd就是一个鲜明的例子。
三、SUID和SGID的关于passwd的说明
/etc/passwd 文件中存放各个用户的账户相关信息,/usr/bin/passwd 是执行修改和查看此文件的程序。
[root@VM_65_244_centos ~]# ls -al /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2月 22 2012 /usr/bin/passwd
[root@VM_65_244_centos ~]# ls -al /etc/passwd
-rw-r--r-- 1 root root 1185 8月 28 17:40 /etc/passwd
如上,从权限上看,/etc/passwd文件仅有root用户才有写(w)权限,可是为什么每个用户都可以直接调用/usr/bin/passwd来写/etc/passwd从而修改自己的密码呢?
s使得其他用户执行/usr/bin/passwd时具有与其owner root相当的权限。
四、sticky bit 粘着位
普通文件的sticky位会被linux内核忽略,目录的sticky位表示这个目录里的文件只能被owner和root删除。
如果用户对目录有wx权限,则可以删除其中的文件和子目录,即时该用户不是这些文件的所有者,而且也没有读或写
许可。
粘着位出现在执行许可的位置上,用t表示,设置了该位后,其他用户就不可用删除不属于他的文件和目录。
但是该目录下的目录不继承该权限,要再设置才可使用。
五、删除文件所需要的权限
文件名保存在上级目录的block中,所以对文件进行删除,是看上级目录是否有相应的w权限。
对目录来说:
r:代表读取目录中的内容
w:删除、修改目录里面文件名的权限【必须配合x执行才可以】
x:代表能否进入到目录里面去
所以说,想删除一个目录里面的文件,需要获得目录的wx权限,没有r权限只是不能查看,进入目录删除还是可以的。