linux's docs

5.1.1: 特殊权限-sbit实践研究

环境准备

# 测试用户准备(sbit组,两用户sbit01/sbit02)
groupadd sbit
useradd sbit01 -G sbit
useradd sbit02 -G sbit

# 测试目录准备(增加sbit,增加sbit组写权限)
mkdir /data/sbit_test
chown :sbit /data/sbit_test
chmod g+w,o+t /data/sbit_test

ll -d /data/sbit_test
drwxrwxr-t. 2 root sbit 4096 Aug  3 22:23 /data/sbit_test

测试sbit权限隔离

# sbit可控制sbit01创建的文档只有root和sbit01删除和更名
# 分别用两个用户创建自己的文件
su - sbit01 -c "touch /data/sbit_test/sbit01.txt"
su - sbit02 -c "touch /data/sbit_test/sbit02.txt"

# sbit02无法删除sbit01的文件,但是可以删除自己的
su - sbit02 -c "rm -f /data/sbit_test/sbit01.txt"
rm: cannot remove '/data/sbit_test/sbit01.txt': Operation not permitted

su - sbit02 -c "rm -f /data/sbit_test/sbit02.txt"

# root可以删除sbit01的文件
rm -f /data/sbit_test/sbit01.txt

# 重新创建两个文件,尝试mv操作,和rm是一样的逻辑

测试sbit无法隔离的权限

# 在用户文件other拥有w权限时,sbit不可阻止用户互相修改对方文件的内容和touch文件时间
# 创建两个空文件
su - sbit01 -c "touch /data/sbit_test/sbit01.txt"
su - sbit02 -c "touch /data/sbit_test/sbit02.txt"

# 给sbit01.txt的other加上w权限,sbit02可以修改sbit01.txt内容和touch其文件时间
chmod o+w /data/sbit_test/sbit01.txt

ll /data/sbit_test/sbit01.txt
-rw-r--rw-. 1 sbit01 sbit01 7 Aug  3 22:51 /data/sbit_test/sbit01.txt

su - sbit02 -c "echo sbit02 > /data/sbit_test/sbit01.txt"
su - sbit02 -c "touch /data/sbit_test/sbit01.txt"

# sbit02.txt的other没有写权限,sbit01不可修改sbit02.txt内容及touch其文件时间
ll /data/sbit_test/sbit02.txt
-rw-rw-r--. 1 sbit02 sbit02 0 Aug  3 22:44 /data/sbit_test/sbit02.txt

su - sbit01 -c "echo sbit01 > /data/sbit_test/sbit02.txt"
-bash: /data/sbit_test/sbit02.txt: Permission denied

su - sbit01 -c "touch /data/sbit_test/sbit02.txt"
touch: cannot touch '/data/sbit_test/sbit02.txt': Permission denied

总结

sbit是对目录做的限制

该目录中的文件只有文件名称和inode号是保存在目录的datablock中,
所以sbit只能控制用户之间互相不能修改名称和删除该文件的inode;

而文件的内容和时间信息是保存在文件自身的inodeblock和datablock中的, 所以是否可修改是由其本身的权限来控制的。

Contents