Linux 的 ACL

今天在配置 squid 的basic auth的时候遇到了一个问题
我把htpasswd生成的密码文件放在了/root/config目录下,然后在认证的时候老是遇到http 407 deny

查看/var/log/squid/cache.log 的时候发现不能够 stat 那个密码文件。

之后把那个密码文件 chmod 成777,发现还是不行
最后把那个密码文件放在了 /etc/squid 目录下,终于可以了

搜索了一下,发现linux除了一般的文件权限控制还有acl
查看了一下fstab文件,确实已经开启了

1
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1

我去查看了一下那个密码文件的acl,发现是rwx,好像正常的

1
2
3
4
5
6
7
debian:~/config# getfacl pass2
# file: pass2
# owner: root
# group: root
user::rwx
group::rwx
other::rwx

后来才发现,原来是 /root 目录对于非root用户设置成了不可读不可写

1
2
3
4
5
6
7
8
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 体验