Linux系统上的特殊权限
特殊权限:SUID, SGID, STICKY
▇SUID:
默认情况下:用户发起的进程,进程的属主是其发起者;因此,其以发起者的身份在运行;
例如:以hadoop的身份登陆linux操作系统。运行ls命令。那么ls的进程的属主是hadoop。但是ls的程序文件的属主和属组依然是root。hadoop可以执行是因为程序文件 /bin/ls 的其他用户具有执行权限。hadoop应用的是other的权限。所以文件的属主属组和进程的属主不是一会事。一旦程序文件被某个用户执行后。运行为进程后,进程的属主是发起该进程的用户。但是SUID不同。
SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件自己的属主;
示例:
默认情况:
添加SUID后:
管理文件的SUID权限:
chmod u+|-s FILE...
典型的SUID 用处:passwd 为了能让root意外的用户可以修改密码,并把密码保到/etc/shadow当中。passwd这个程序是经过精心设计的,普通用户使用时不能添加参数,只有root用户才可以。
展示位置:属主的执行权限位
如果属主原本有执行权限,显示为小写s;
否则,显示为大写S;
注意:给文件赋予SUID权限是非常危险的操作,比如:如果给/bin/cat赋予SUID权限,那么普通用户发起cat命令时,cat进程的属主为root。那么你懂的。cat "危险代码" > "某关键文件" 。所以passwd后不能带参数。有很多黑客会利用passwd的SUID权限来搞破坏。
■SGID:
功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;
管理文件的SGID权限:
chmod g+|-s FILE...
示例:
添加两个用户
~]#useradd fedora
~]#useradd centos
添加组:
~]#groupadd mygrp
为这两个用户添加附加组mygrp
~]#usermod -a -G mygrp fedora
~]#usermod -a -G mygrp centos
如果/var/tmp/test 没有SGID的权限那么fedora在/var/tmp/test下创建的文件只能fedora自己可以修改,其他用户可读。
如果/var/tmp/test 有SGID的权限那么fedora在/var/tmp/test下创建的文件同属于mygrp组的cengtos也可以修改,其他用户可读。
SGID功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;
展示位置:属组的执行权限位
如果属组原本有执行权限,显示为小写s;
否则,显示为大写S;
■Sticky:
Sticky功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户在此目录中都能创建新文件或删除所有的已有文件; 如果为此类目录设置Sticky权限,则每个用户能创建新文件,且只能删除自己的文件;
管理文件的Sticky权限:
chmod o+|-t FILE...
展示位置:其它用户的执行权限位
如果其它用户原本有执行权限,显示为小写t;
否则,显示为大写T;
系统上的/tmp和/var/tmp目录默认均有sticky权限;
小话题:
管理特殊权限的另一方式:
suid sgid sticy 八进制权限
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
基于八进制方式赋权时,可于默认的三位八进制数字左侧再加一位八进制数字;
例如:chmod 1777
■facl:file access control lists 文件访问控制列表。
facl是文件的额外赋权机制:在原来的u,g,o之外,另一层让普通用户能控制赋权给另外(不是other用户)的用户或组的赋权机制;
getfacl命令:
getfacl FILE...
user:USERNAME:MODE
group:GROUPNAME:MODE
setfacl命令:
赋权给用户:
setfacl -m u:USERNAME:MODE FILE...
赋权级组:
setfacl -m g:GROUPNAME:MODE FILE...
撤销赋权:
setfacl -x u:USERNAME FILE...
setfacl -x g:GROUPNAME FILE...
示例:
默认情况:
附加权限后:
原文地址:http://11305824.blog.51cto.com/11295824/1826334