1:setUID, 用户执行有s权限的文件时,会以属主身份去执行。eg: 普通用户执行passwd修改密码时,会通过passwd的属主,也就是root去执行。
设置SetUID
chmod 4xxx < file-name >
chmod u+s < file-name >
取消SetUID
chmod xxx < file-name >
chmod u-s < file-name >
s:setGID, 对于文件,执行该文件时,以组权限执行。对于目录,新文件会以该目录的默认属组作为默认属组。
设置SetGID
chmod 2xxx
chmod g+s
取消SetGID
chmod xxx
chmod g-s
t:StickBit, 粘滞位,t权限的目录有wx权限,进程结束后文件依然驻留在内存中,无法被其他用户删除。
设置SBIT
chmod 1xxx < dir-name >
chmod o+t < dir-name >
取消SBIT
chmod xxx < dir-name >
chmod o-t < dir-name >
共享目录
根据setGID的特性,可以实现大范围地创建并共享文档。
先做准备工作
创建一个分享组
sudo groupadd shared
添加当前用户到分享组
sudo usermod -G shared zxl
sudo usermod -G shared lcl
检查结果
id zxl
id lcl
共享目录
创建共享目录
mkdir shared_dir
ls -lF
修改目录组,设置SGID
sudo chgrp shared shared_dir/
sudo chmod g+s shared_dir
ls -lF
注意到组权限x变为了s,设置SGID成功
目录下新建一个文件,该文件所属组为目录组,文件执行权限为组权限。可能需要设置umask
umask 002
cd shared_dir/
touch testfile
ls -lF
切换用户进行尝试
su lcl
ls -lF