我在 Debian 上运行带有 nginx 和 php-fpm 的共享托管服务器。
一切运行正常,php-fpm 为每个以独立用户身份运行的用户提供了单独的池,并且每个用户都有自己的袜子。
但是,Nginx 作为 www-data 运行,因为我不想为每个用户设置单独的 nginx 进程。
这意味着,为了让 nginx 能够访问用户数据,/home 的权限必须是 drwxr-x--x。问题是,所有用户都可以访问其他用户的文件。
让 nginx 访问用户文件而不让其他用户访问的最佳方法是什么。以 root 身份运行 nginx 不是一种选择。但 AppArmor 会有所帮助吗?
答案1
我更喜欢使用 ACL 来实现这一点。例如:
setfacl -R -m user:www-data:rx,d:user:www-data:rx /home
授予www-data
用户读取文件和遍历目录的权限/home
,并将相同的 ACL 应用于以后创建的任何新文件或目录。
一旦应用,用户主目录不再必须是全球可执行的,(例如chmod o= /home/$USER
)因此用户不再能读取彼此的文件,但 nginx 可以。
请注意,如果某些目录需要由 Web 服务器写入,您可以根据具体情况设置这些目录,方法是将权限的两个实例都更改为rx
。rwx
例如:
setfacl -R -m user:www-data:rwx,d:user:www-data:rwx /home/user/public_html/wp-content/{cache,uploads}