Linux

為什麼 Apache 在 suEXEC 下執行的虛擬主機需要 o+x 權限?

  • April 24, 2015

在 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 admin@example.com
 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 使用者仍然需要能夠訪問腳本,這意味著對通向它的所有目錄的執行權限。

引用自:https://serverfault.com/questions/685193