权限挂在进程上,不挂在文件上
一句话总结
Linux的访问控制不是判断“谁可以读取这个文件”,而是**“这个进程当前持有的证书与这个inode的权限位如何匹配”**。掌握这一观点后,setgid目录和ACL掩码也自然而然地理解了。
##为什么需要这个
不断有用户咨询说添加到组后没有获得权限。原因大多是一样的。**辅助组在登录时被复制为进程的证书。**已经存在的shell保留了以前的组列表,文件访问判断也基于该列表。如果更改组,必须重新登录或打开新会话。/etc/passwd包含名称、UID、GID、主机、壳,密码相关信息全部/etc/shadow被分离了。分离的理由很简单——/etc/passwd应该让所有人都能读懂ls -l虽然可以把这个UID换成名字来展示,但因为哈希不能那样做。/etc/shadow的字段用分号分隔。
| 编号 | 内容 |
| --- | --- |
| 2 | 密码哈希。最前面的感叹号表示锁定,星号表示无法密码登录 |
| 3 | 最后一次密码变更日(从1970-01-01开始的天数) |
| 4 | 最低使用天数 |
| 5 | 最大使用天数 |
| 6 | 到期前警告天数 |
| 8 | 账户到期日(果然是天数) |
不是日期,而是天数这一点在考试中经常出现。把它改成人们能读到的形式是chage -l是。
怎么操作
setgid目录是协作目录的正确答案的原因。新创建的文件的组通常成为创建者的基本组。如果三个团队成员的基本组不同,文件就会分别堆积在共享目录中。在目录中设置setgid,其中创建的文件会继承目录的组。新的子目录会继承setgid位,整个树结构得以维持。
sticky bit会恢复删除权限。删除文件所需的不是文件本身,而是对该目录的写权限。如果将共享目录打开为所有人可写,就可以删除他人的文件。设置sticky后,只有所有者和目录所有者、root才能删除。/tmp是确切的这个构成。
**需要ACL的瞬间是“只有一个人例外”的时候。**在所有者、团体、其他三个栏位中,无法表达“这个团体可以阅读,但负责审核的人只能写”。与其重新创建团体,不如在命名的项目上附上ACL。
在这里出现面具。面具是所有项目(命名用户、命名组、组所有者)的权限上限,除了所有者和其他项目外。getfacl这个#effective:贴上去展示的就是口罩上刻着的内容。而且有一个陷阱——在文件中chmod一听到,那个群体的节奏就被解读为面具,刚才给的ACL安静地被削弱了。
目录可以挂上default ACL。这不会用于该目录本身的访问判断,而是作为将来在其中创建的项目的初始ACL继承。
在现场相遇的样子
作者的文件描述符·inode文章中用一句話總結了這個問題。對檔案的寫入權限和刪除權限是分開的,分享目錄中別人檔案被刪除的事故就是由此而來。文章提出的標準解法是chmod 1777— 即sticky bit。相反,如果没有setgid运营共享目录的话,每个文件的组都会不同,以后一起chgrp -R定期出现旋转整理的作业。
在账户方面最常见的错误是添加辅助组时忽略了额外的选项。usermod -G只要使用,现有辅助组就会被替换为全部指定的列表。如果在sudo组中删除自己,并且处于没有root shell的状态,从那时起就会变成连接控制台的问题。
在考试场上经常遇到的权限问题
LFCS是实践,不是问“可以解释”,而是问“手记得”。权力
在领域中反复出现的形态有几种。
特殊比特组附在数字的前两位。
| 位 | 数字 | 从文件中 | 从目录中 |
| --- | --- | --- | --- |
| setuid | 4000 | 以所有者权限运行 | (无意义) |
| setgid | 2000 | 以组权限执行 | 新文件继承该目录的组 |
| sticky | 1000 | (无意义) | 只有所有者才能删除自己的文件(/tmp) |
协作目录问题几乎总是setgid。“让所有团队成员都能阅读和书写”
这样的要求是chgrp team dir; chmod 2775 dir打开。如果没有setgid,新文件
有了创建者的基本群组,其他团队成员无法阅读。
**ACL必须一起挂上基本(default)ACL。**只挂在现在的文件上的话
不适用于以后生成的文件。```bash setfacl -m u:alice:rwx /srv/data # 지금 있는 것 setfacl -d -m u:alice:rwx /srv/data # 앞으로 만들어질 것 getfacl /srv/data
`ls -l`在权限结束时`+`如果看到,就意味着有ACL。如果错过了这个的话
反复思考“权限正确,为什么不行”。
**umask只适用于以后要创建的东西。**已经存在的文件是`chmod`要改回去
做。相反,对于“今后制作的文件也要那样”的要求`chmod`回答的话
不对。
**删除用户时会询问如何处理主页和邮件队列。**`userdel -r`恩之家
甚至删除目录。如果不删除的话,当那个UID被重新使用时,**新用户会把旧文件
成为拥有者。**所以如果不想删除的话,先转移所有权。
**更换后一定要确认。**`id 사용자`,`groups 사용자`,`sudo -l -U 사용자`三行的话大部分设置问题都会暴露出来。
##下次实习要做的事情
首先实际创建用户和组。指定UID、基本组、主页、壳来创建账户,添加辅助组,`chage`以为密码政策,`/etc/passwd`·`/etc/group`·`/etc/shadow`直接读取并确认该值。最后只删除账户,留下主页,看到产生孤立UID的样子。在接下来的实践中,依次处理8进制数和符号模式、umask、特殊位、ACL和掩码。