在 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
如果 I chmod o-x .
,那么我得到一个 403。似乎 Apache 需要执行权限才能为该站点提供服务。然而 suEXEC 将站点运行为vhostname:vhostname
,那么为什么缺少外部用户/组的权限很重要?
虚拟主机配置:
<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>
该脚本以用户身份执行,但好像该脚本是使用 suexec 用户设置的。apache 用户仍然需要能够访问脚本,这意味着对通向它的所有目录的执行权限。