请耐心等待,我对 Linux 还不熟悉。我有一个 Web 服务器,正在尝试访问用户帐户下的公共文件夹。
问题
我正在运行一个 nginx 服务器,该服务器正在尝试访问应用程序共享公共文件夹内的维护页面并收到权限被拒绝错误。
基本
- 应用程序用户:
quotr
和主要组:app
- Web 服务器用户:
ubuntu
和主要组:www-data
- 应用程序主页:
/home/quotr/app
- 应用程序共享公共文件夹:
/home/quotr/app/shared
- 维护文件的绝对路径:
/home/quotr/app/shared/public/system/maintenance.html
群组:
我最初只是将www-data
群组添加到群组中app
,希望能够解决这个问题。当这不起作用时,我也以另一种方式添加了群组。
www-data:x:33:apache,quotr
ubuntu:x:1000:
app:x:1001:quotr,ubuntu,www-data
所有权
整个应用程序树的所有权属于。当我开始收到权限问题时,我将维护页面 ( )路径部分的quotr:app
所有权更改为。public/system/maintenance.html
/home/quotr/app/shared/public/system/maintenance.html
quotr:www-data
权限
从以下开始/var/www/quotr-public
并逐步向下:
# ls -la
drwxr-xr-x 4 quotr www-data 4096 Mar 3 21:49 .
drwxr-xr-x 5 quotr www-data 4096 Mar 3 21:49 ..
drwxr-xr-x 5 quotr www-data 4096 Mar 4 16:00 assets
drwxr-xr-x 3 quotr www-data 4096 Mar 4 19:03 system
# cd to system ls -la
drwxr-xr-x 3 quotr www-data 4096 Mar 4 19:03 .
drwxr-xr-x 4 quotr www-data 4096 Mar 3 21:49 ..
-rwxr-x--- 1 quotr www-data 3004 Mar 4 19:03 maintenance.html
drwxr-xr-x 3 quotr www-data 4096 Mar 3 21:51 pictures
测试
我正在使用以下命令测试权限:
sudo -u www-data stat /home/quotr/app/shared/public/
这导致权限被拒绝。
最后一搏
作为最后的尝试,我创建了以下符号链接:
quotr-public -> /home/quotr/app/shared/public/
我可以成功运行以下命令但无法更深入地运行:
sudo -u www-data stat /var/www/quotr-public
我现在完全不知道问题出在哪里。任何指导都将不胜感激。
编辑1
我继续对权限进行修改,因此这些可能会有一点不同,但请在下面找到请求的输出。'namei -lx /home/quotr/app/shared/public/system/maintenance.html' 的输出
Drwxr-xr-x root root /
drwxr-xr-x root root home
drwx------ quotr app quotr
drwxr-xr-x quotr app app
drwxr-xr-x quotr www-data shared
drwxr-xr-x quotr www-data public
drwxr-xr-x quotr www-data system
-rw-r--r-- quotr app maintenance.html
‘namei -lx /var/www/quotr-public/system/maintenance.html’ 的输出
Drwxr-xr-x root root /
drwxr-xr-x root root var
drwxrwsr-x root www-data www
lrwxrwxrwx ubuntu www-data quotr-public -> /home/quotr/app/shared/public/
Drwxr-xr-x root root /
drwxr-xr-x root root home
drwx------ quotr app quotr
drwxr-xr-x quotr app app
drwxr-xr-x quotr www-data shared
drwxr-xr-x quotr www-data public
drwxr-xr-x quotr www-data system
-rw-r--r-- quotr app maintenance.html
谢谢。
答案1
我认为在 muru 的帮助下您几乎已经做到了这一点。树中的所有文件夹都需要可由 www-data 执行。由于 quotr 文件夹归 app 组所有,而 www-data 位于 app 组中,因此最好将 exec 授予该组而不是其他组:
chmod g+x quotr
顺便提一句...我已经用 nginx 作为 www-data 构建了几个网站。对我来说,效果很好的方法是让 www-data 作为用户和组拥有所有内容。然后我将我的用户和其他需要访问 www-data 组的人添加进去。