![为什么 Apache 需要在 suEXEC 下运行的虚拟主机具有 o+x 权限?](https://linux22.com/image/656805/%E4%B8%BA%E4%BB%80%E4%B9%88%20Apache%20%E9%9C%80%E8%A6%81%E5%9C%A8%20suEXEC%20%E4%B8%8B%E8%BF%90%E8%A1%8C%E7%9A%84%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E5%85%B7%E6%9C%89%20o%2Bx%20%E6%9D%83%E9%99%90%EF%BC%9F.png)
在 Arch Linux 上运行 Apache 2.4.10。
我正在尝试限制 SFTP 用户只能访问其主目录(public
虚拟主机目录下的文件夹),而不能访问该虚拟主机目录。现在,当我以用户身份登录时,我仍然可以遍历目录树,并浏览整个文件系统。以下是当前权限:
drwxr-xr-- 6 vhostname vhostname 4096 Apr 23 19:17 .
drwxrwxr-x 25 root root 4096 Apr 23 18:43 ..
-rw-r--r-- 1 vhostname vhostname 21 Apr 23 18:43 .bash_logout
-rw-r--r-- 1 vhostname vhostname 57 Apr 23 18:43 .bash_profile
-rw-r--r-- 1 vhostname vhostname 141 Apr 23 18:43 .bashrc
drwx--x--x 2 vhostname vhostname 4096 Apr 23 18:43 fcgi-bin
drwx--x--x 3 vhostname vhostname 4096 Apr 23 18:43 logs
drwx--x--x 2 vhostname vhostname 4096 Apr 23 18:43 private
drwx--x--x 7 user user 4096 Apr 23 19:25 public
如果我chmod o-x .
,则会出现 403。Apache 似乎需要执行权限才能为网站提供服务。然而 suEXEC 以 的身份运行网站vhostname:vhostname
,那么外部用户/组缺少权限又有什么关系呢?
Vhost 配置:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/srv/www/vhostname/public/"
ServerName vhostname.com
ServerAlias *.vhostname.com
SuexecUserGroup vhostname vhostname
ErrorLog "/srv/www/vhostname/logs/error.log"
LogLevel debug
CustomLog "/srv/www/vhostname/logs/access.log" combined
<Directory /srv/www/vhostname/public>
AllowOverride All
Options Indexes FollowSymLinks MultiViews
Require all granted
</Directory>
# http://www.linode.com/forums/viewtopic.php?t=2982
<IfModule !mod_php5.c>
<IfModule !mod_php5_filter.c>
<IfModule !mod_php5_hooks.c>
<IfModule mod_actions.c>
<IfModule mod_alias.c>
<IfModule mod_mime.c>
<IfModule mod_fcgid.c>
AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/php-fcgid-wrapper
Alias /fcgi-bin/ /srv/www/vhostname/fcgi-bin/
<Location /fcgi-bin/>
SetHandler fcgid-script
Options +ExecCGI
Require all granted
</Location>
ReWriteEngine On
ReWriteRule ^/fcgi-bin/[^/]*$ / [L,PT]
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</VirtualHost>
答案1
脚本以用户身份执行,但好像脚本已使用 suexec 用户设置了 setuid。apache 用户仍需要能够访问该脚本,这意味着需要对指向该脚本的所有目录具有执行权限。