Linux引入suid、sgid、sticky这三种特殊权限,能够更加方便、有效和安全地控制文件。
当在一个目录或文件上加入suid特殊权限时,如过原来目录或文件的属主具有x(执行)权限,就会用小写的s来替代x;如果原来文件或目录不具有x(执行)权限,就会用大写的S来代替x。
同样,sgid和suid相同,如过原来目录或文件的属组具有x(执行)权限,就会用小写的s来替代x;如果原来文件或目录不具有x(执行)权限,就会用大写的S来代替X。
同样,如果在一个文件或目录上加入sticky权限时,若原文件或目录的其他用户有x(可执行)权限时,就用小写t代替x;如果原文件或目录没有x权限时,就用大写T替代x权限。下例说明。
可以chmod的字符或数字的方式修改特殊权限,下例以数字方式实现。
# -rw-r--r-- 1 root root 0 Nov 6 07:40 test1 ugo都没执行权限
# chmod 7644 test1 原权限是644,都加上特殊权限
# -rwSr-Sr-T 1 root root 0 Nov 6 07:43 test1 属主、属组、其他用户执行权限变为S、S、T.
# -rwxr-xr-x 1 root root 0 Nov 6 07:43 test2 ugo都有执行权限
# chmod 7755 test2 原权限是655,都加上特殊权限
# -rwsr-sr-t 1 root root 0 Nov 6 07:49 test2 属主、属组、其他用户执行权限变为s、s、t.
实验:如果一个组为development,该组中有三个用户完成一个项目。该项目在路径/tmp/project/目录下进行相关的资源共享,要求 @三个用户user1、user2、user3都可以在该目录下创建文件@彼此之间可以互相查阅并修改对方文件@彼此不可删除除自己创建外的文件。
步骤:
# by daniao
# groupadd development
# mkdir /tmp/project
# chown -R :development /tmp/project/
# useradd user1 依次创建
# usermod -a -G development user1 依次将用户加入组
# 通过 ls -l 查看project 其他用户没有w权限,则chmod g+w /tmp/project/
# 此时都可以创建文件但彼此不可访问修改自己创建的文件 则用到了SGID权限。
chmod g+s /tmp/project/
此时用户可以查看并修改彼此文件也能删除,这里需要通过user1-3用户进入/tmp/project/中创建各 自文件就可以看出
# 通过Sticky权限 chmod g+t /tmp/project/ 不能删除他人文件
以上是个人对特殊权限的思路总结,没有配相关截图。