我的网站上有一些文件,我需要访问服务器上的文件,并且这些文件也需要能够由网络服务器编辑。现在,使用我当前的设置,我似乎无法做到这一点。
如果所有者/组是 imran:imran,那么我就可以完全访问该文件,但我的 Web 服务器似乎无法打开/编辑这些文件。现在我被告知需要将文件的所有者/组与 Web 服务器使用的所有者/组进行匹配,我查看了 Web 服务器创建的文件,发现它们是 nobody:nobody。因此,我将整个 public_html 所有者/组更改为 nobody:nobody,因为文件夹中有太多文件需要由 Web 服务器编辑,而逐个更改所有者会花费太长时间。更改所有者后,Web 服务器可以正常编辑它,但后来我意识到了一件事……现在我甚至无法查看 public_html 文件夹。
是否有人知道设置所有者的正确方法,以便我和网络服务器都可以访问?
(这是在 WHM/cPanel 支持的服务器上)
答案1
以下命令:
chown imran:nobody public_html
chmod 0775 public_html
chown imran:nobody -R public_html/*
find public_html/ -type f -exec chmod 0664 '{}' \;
find public_html/ -type d -exec chmod 2775 '{}' \;
# In your .bash_profile / .bashrc set:
umask 002
这应该可以解决您的问题。它授予组nobody
写入 public_html 目录和子文件夹的权限,但“世界”无权写入这些文件(例如 chmod 777)。作为所有者,您还拥有这些文件的完全权限。在目录上设置 setgid 位可确保权限保持这种状态,而 umask 修改意味着您将创建具有不同默认权限集的文件。
有时,nobody 用户不属于其自己的组,因此为了解决这个问题,请使用
gpasswd -a nobody nobody
确保在需要由 Web 服务器、CGI 脚本等执行的任何内容上添加 +x 位。