为什么 Apache 需要在 suEXEC 下运行的虚拟主机具有 o+x 权限?

为什么 Apache 需要在 suEXEC 下运行的虚拟主机具有 o+x 权限?

在 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 用户仍需要能够访问该脚本,这意味着需要对指向该脚本的所有目录具有执行权限。

相关内容