了解Unix权限(带ACL)

我正在尝试在我的服务器上正确设置权限。 目前我有一些目录和文件chmod'd在0777 – 但我不舒服这样做。

所以在服务器故障专家的build议下,我让我的托pipe服务提供商在我的共享虚拟服务器上安装ACL。

当我FTP服​​务器作为我的FTP用户帐户“abc”时,我可以做我所需要做的一切(也是如此),因为我所有的目录和文件都属于“abc”,组是“abc”,第一个字节设置为7(rwx)。 我得到了很多。

但是,这里是我的灰暗的地方。 PHP设置为“nobody”用户。

  • 所以当有人浏览以.php结尾的网页或者有一些embedded的PHP时,我假设最后一个字节控制访问。 因为我所有的目录和文件都由“abc”所有,并被分配到“abc”组,所以如果最后一个字节是4(r–),那么服务器会让浏览器读取文件。 如果是6(rw-)那么服务器会让浏览器写入文件或目录,对吗?
  • 如果Web文档不以.php结尾,或者没有embedded任何PHP? 那么用户是什么?
  • 我如何使用ACL来将权限设置为6(rw-)甚至7(rwx)? [不知道执行什么或意味着什么]

只是寻找一些政策设置,以最好的locking我的目录和文件,同时允许我的PHP脚本上传和写入文件(所以我的用户不打电话告诉我“权限被拒绝”。

好的,多亏了那里的人愿意帮我一把。 非常感谢。

程序以特定用户身份运行。 PHP通常作为一个web服务器模块运行,并且与web服务器使用相同的用户运行,即你的情况下为“nobody”。

浏览器运行在远程系统上,因此无法写入您的服务器。 只有在您的服务器上运行的进程可能会写入。 当您通过浏览器访问您的服务器时,浏览器实际上会要求您的服务器上运行的Web服务器去获取一些文件。 所以文件的权利适用于相同的文件是PHP,HTML或其他。

执行位可能很重要。 它定义了一个文件是否可以作为一个新进程执行(是否是一个程序)。 运行CGI的PHP文件(或者其他types的程序)必须是可执行的才能运行。

执行位也是必须能够列出一个目录。 这有点奇怪,但这就是为什么目录是可执行的。

最后,让你的PHP写入磁盘呢? 那么,你必须写一些可写入“nobody”的目录。 您可以使用ACL来实现这一点,而不是使任何人不是目录的所有者。 简单地给任何人没有额外的权利写入您感兴趣的文件夹。

但要小心:可写入目录不在Web层次结构下是非常重要的。 这将是一个巨大的安全漏洞:攻击者可以在那里写可执行文件,然后让networking服务器执行它们,这将导致各种强大的攻击。 不要这样做。 所以,如果你的web根目录是/ var / www,把你的可写目录放在/ var / mywrite或者别的地方,但是不要在/ var / www下。