Linux 的 ACL
今天在配置 squid 的basic auth的时候遇到了一个问题
我把htpasswd生成的密码文件放在了/root/config目录下,然后在认证的时候老是遇到http 407 deny
查看/var/log/squid/cache.log 的时候发现不能够 stat 那个密码文件。
之后把那个密码文件 chmod 成777,发现还是不行
最后把那个密码文件放在了 /etc/squid 目录下,终于可以了
搜索了一下,发现linux除了一般的文件权限控制还有acl
查看了一下fstab文件,确实已经开启了
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1
我去查看了一下那个密码文件的acl,发现是rwx,好像正常的
debian:~/config# getfacl pass2
# file: pass2
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
后来才发现,原来是 /root 目录对于非root用户设置成了不可读不可写
debian:~# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::rwx
group::---
other::---
运行 squid的用户是 proxy,由于设置了 acl,proxy用户访问不了/root内的文件(就算/root/config文件夹和 /root/config/pass 权限设置成777也没用!),所以就导致了squid没有权限去认证了。
ACL使得Linux可以进行更加复杂的权限控制,详细可以参见Linux ACL 体验