Nginx 需要对我的应用程序的目录“资产”的整个路径具有相同的权限,以便能够读取和提供资产

Nginx 需要对我的应用程序的目录“资产”的整个路径具有相同的权限,以便能够读取和提供资产

我的文件夹中有一个网络应用程序:

  /home/main_user/dir1/dir2/my_web_app/

在那里我有一个可执行文件和文件夹资产。

Nginx 是这样设置的 - 仅提供资产:

  location ~ ^/assets/(images|css|js| [.........])/(.*) {
    alias /home/main_user/dir1/dir2/my_web_app/assets/$1/$2;
    autoindex off;
  }

Nginx 在用户“http”下运行

事实证明,nginx 对“assets”文件夹出现权限被拒绝错误。即使我将目录“assets”的所有者更改为“http”并给它 755

要修复该错误,我必须授予权限“o+x”一路走来从根目录到“assets”文件夹。不仅仅是“资产”文件夹

也就是说,我必须调用“o+x”来执行以下操作:

   /home
   /home/main_user/
   /home/main_user/dir1/

ETC.....

这对我来说似乎是错误的,至少因为每个人都被允许执行 /home/main_user 中的任何文件。但仅对目录“assets”这样做是行不通的。

有没有更好的、更值得推荐的方法?

答案1

对于目录的权限,执行位实际上意味着“允许访问该目录中包含的文件和目录”(而读取位允许列出目录的内容)。所以你是正确的,http 用户至少需要x整个目录链的权限。

也就是说,您不必向所有用户授予此访问权限。使用 ACL,您可以仅允许 http 用户访问。请参阅setfacl(1)获取完整详细信息,但是setfacl -m u:http:x /home(以及其他中间目录)应该可以帮助您入门。

向单个用户授予访问权限的另一种方法是将文件的所属组设置为包含所有且仅应能够访问它们的用户的组,并相应地设置组权限。这种方法的一个问题是,一般来说,它可能会导致创建大量组。另一个原因是,这种方法与文件不兼容,例如,文件可由两个人写入、可由某些组读取、而其他组则无法访问。这就是我们使用 ACL 的原因。

相关内容