![在共享主机上使用 nginx + php-fpm 设置权限的最佳方法是什么?](https://linux22.com/image/607347/%E5%9C%A8%E5%85%B1%E4%BA%AB%E4%B8%BB%E6%9C%BA%E4%B8%8A%E4%BD%BF%E7%94%A8%20nginx%20%2B%20php-fpm%20%E8%AE%BE%E7%BD%AE%E6%9D%83%E9%99%90%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我在 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}