一、文件的特殊权限:suid sgid sticky
1、SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面。对目录设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限
2、SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会,继承上级目录的所属组
3、Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位
这3个特殊权限对应的数值为
SUID u+s或u=4
SGID g+s或g=2
Stickybit o+t或o=1
suid:
SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限,使用" ls -l "或“ ll ”命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的“ s ”就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件
[root@CHENDAJIE ~]# which "passwd"
/usr/bin/passwd
[root@CHENDAJIE ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
这就是普通用户不能读取shadow文件但是可以该密码的原因,当普通用户执行passwd命令时,会临时拥root的权限,所以可以修改成功。
SGID:
限定:既可以给二进制可执行程序设置,也可以给目录设置。
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。
[root@CHENDAJIE test]# mkdir a
[root@CHENDAJIE test]# ll -d a
drwx-w--w- 2 root root 6 10月 17 16:13 a
[root@CHENDAJIE test]# chmod g+s a
[root@CHENDAJIE test]# !ll
ll -d a
drwx-wS-w- 2 root root 6 10月 17 16:13 a
测试sgid效果
[root@CHENDAJIE test]# chown :bin a/
[root@CHENDAJIE test]# touch a/b.txt
[root@CHENDAJIE test]# ll !$
ll a/b.txt
-rw--w--w- 1 root bin 0 10月 17 16:15 a/b.txt
sgid是针对用户组权限位的
对于文件来说,sgid的功能如下:
sgid仅对二进制命令程序有效
二进制命令或程序需要有可行权限x
执行命令的任意用户可以获得该命令程序执行期间所属组的权限
sgid基于目录的功能如下:
linux里默认情况所有用户创建文件,默认用户和组都是自身。
sgid可以让用户再此目录下创建的文件和目录,具有和此目录相同的用户组设置。
setgid位主要用在目录中,当为某个目录设置了setgid位以后,在该目录中新创建的文件具有该目录的所属组权限,而不是创建该文件的用户的默认所有者。这样,使得在多个用户之间共享一个目录中的文件变得简单。提示:用八进制数2000表示setgid 权限位。
Stickybit
限定:只作用于目录
功能:目录下创建的文件只有root、文件创建者、目录所有者才能删除
例:系统中的tmp目录就是这样的
[root@CHENDAJIE ~]# ll -d /tmp/
drwxrwxrwt. 15 root root 4096 10月 17 16:22 /tmp/
用法:
chmod o+t /tmp/test
文件扩展权限ACL
扩展ACL:access conteol list
例:设置用户chendajie对文件a.txt拥有rwx权限,chendajie不属于啊。txt的所属主和组,chendajie是other。怎么做?
[root@CHENDAJIE home]# touch a.txt
[root@CHENDAJIE home]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::-w-
other::-w-
[root@CHENDAJIE home]# setfacl -m u:chendajie:rwx a.txt
[root@CHENDAJIE home]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:chendajie:rwx
group::-w-
mask::rwx
other::-w-
[root@CHENDAJIE home]# su chendajie
[chendajie@CHENDAJIE home]$ vim a.txt
[chendajie@CHENDAJIE home]$ cat a.txt
Hello,Linux
例2:给目录加扩展权限
[root@CHENDAJIE home]# mkdir b
[root@CHENDAJIE home]# ll -d b
drwxr-xr-x 2 root root 6 10月 17 16:30 b
[root@CHENDAJIE home]# setfacl -m d:u:chendajie:rwx b
[root@CHENDAJIE home]# getfacl b
# file: b
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:chendajie:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@CHENDAJIE home]# touch b/b.txt
[root@CHENDAJIE home]# mkdir b/data
[root@CHENDAJIE home]# getfacl b/b.txt
# file: b/b.txt
# owner: root
# group: root
user::rw-
user:chendajie:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
因为-d参数,所以test下所有创建的文件和目录都继承了默认的acl权限
例3:给目录下所有文件都加扩展权限
[root@CHENDAJIE home]# setfacl -R -m u:lee:rw- testdirectory/ #-R一定要在-m前面,表示目录下所有文件
[root@CHENDAJIE home]# setfacl -x u:mk /tmp/a.txt # 去掉单个权限
[root@CHENDAJIE home]# setfacl -b /tmp/a.txt # 去掉所有acl权限