Linux 精细化文件权限
在开发服务器上,每次都有一个奇怪的问题困扰者我——为什么每次使用 docker 都需要 sudo,明明已经设置了用户组
去扒了下 /etc/group
文件后才发现,由于服务器存在权限控制,会自动重写 /etc/passwd
和 /etc/group
某种意义上,这样确实安全了,但是引入了新的问题——某些时候确实需要特定的权限。比如使用 VSCode 的 Remote Container,就要求必须在连接到服务器后,能够直接执行 docker 命令(这里是没法设置 sudo + 密码的)。
既然不能把用户加入到用户组内,可以考虑让文件允许用户组执行。如果给 /var/run/docker.sock/
777 权限,显然也不太好。在这种权限要求严格的场景下,777 等于是挖坑给自己。
实际上我们需要的是允许特定的用户、特定的权限组访问该文件。
在传统的 Linux 权限的基础上,实际上还有更详细的权限管理配置 ACL(Access Control List)。用户不仅能设置一个文件的所有者、所有组以及权限,还可以细化到其他用户是否可以拥有特殊权限、其他组是否可以拥有特殊权限。
getfacl
可以查看文件的详细权限设置
getfacl /var/run/docker.sock # file: var/run/docker.sock # owner: root # group: docker user::rw- group::rw- mask::rw- other::---
如果我们希望把用户 user1
赋予额外的读写权限,可以使用 sudo setfacl -m u:user1:6 docker.sock
对应用户组 group1
则是 sudo setfacl -m g:group1:6 docker.sock
这样,即使用户文件和用户组文件无法修改,仍然可以确保特定的用户具有特定文件的权限