文件特殊权限的常用场景

实验环境:Ubuntu18.04远程服务器 + WSL 2本机

测评说明

[版本一]

  • 图片

[版本二]

  • 图片
  • ⭐考察对文件权限【尤其是文件特殊权限】的理解

  • 理解了以上,实现上述功能就游刃有余了

最终效果

  • 其他用户无法进入Project目录

  • 图片
  • TestUser1创建了文件u1.txt

  • 图片
  • TestUser2仍可以编辑u1.txt,但无法删除它

  • 图片
    • 反之同理

实现过程

准备工作

  • 新建一个用户组TestGroup,使用groupadd命令,有一些选项可查看man手册
groupadd TestGroup
  • 新建两个属于TestGroup组的用户TestUser1、TestUser2
useradd -G TestGroup TestUser1
useradd -G TestGroup TestUser2
    • 需要先有组
  • 设置密码,用来登录用户,否则登不了
passwd TestUser1
--->输入密码:xxx
passwd TestUser2
--->输入密码:yyy
  • 在/opt目录下新建Project目录,作为项目目录
cd /opt
mkdir Project

实现功能1 进入权限

【只能TestUser1、TestUser2、 root三个用户进入该目录】

  • 把Project目录的所属组修改为TestGroup,所属用户不动
sudo chown :TestGroup Project
  • 将其他用户的执行权限去除,其他用户将不能进入目录
sudo chmod o-x Project
  • 效果如下:

  • 图片

实现功能2 编辑权限

【TestUser1创建的文件,TestUser2可以编辑】

  • 首先,给所属组TestGroup添加写权限,这样用户才能在该目录下创建文件
sudo chmod g+w Project
  • 设置set_gid,这样用户进入目录后的操作会以目录所属组的身份进行
sudo chmod g+s Project

[PS] 否则,用户创建的文件的所属组属于与自己同名的组,而不是TestGroup [从而无法将两个用户建立联系]

  • 权限如下:

  • 图片

实现功能3 删除权限

【TestUser1和TestUser2只能删除自己创建的文件】

  • 设置sticky bit,这样在该目录下,用户只能删除自己创建的内容
sudo chmod +t Project
  • 权限如下:

  • 图片

[PS] 文件夹颜色都变了,zsh干的漂亮


思考点

  • 某场景:进入某目录的用户对某文件没有写权限,却可以删除文件,为什么?
    • 图片
    • 删除文件的权限:优先取决于用户对进入的目录的权限

附加

  • 目录的可执行权限代表进入权限

参考资料