Apache 拥有权限时无法访问文件

Apache 拥有权限时无法访问文件

我不想允许其他人读取访问权限,因此我已将我的用户和用户添加apache到名为的组中,然后将该组设置为我想要访问的apachme所有文件和文件夹,包括网页的根目录。apache然后我向组和所有者授予所有权限。此后,如果不将读取权限设置为允许 all( rwxrwxr--(0774)),apache 仍然无法访问文件。

包含索引文件的文件夹,其所属apacheapachme和权限rwxrwxr-x(0775)

0770 文件权限

这样我得到了 500 错误,将其更改为0774将让它运行良好

测试

这些只是为了确认 apache 正在哪个用户下运行并且它已被添加到该组中。

答案1

从安全角度来看,使用同一 Apache 用户设置网页并不是一个好主意。 Apache 用户应该能够读取网页,但不能写入网页。

因此,在标准配置下,Web结构通常是所有人都可读,而当需要写入时,通常是Apache用户可写,这是一个安全噩梦。

避免这种情况的策略之一是安装/使用 mod_ruid2。https://github.com/mind04/mod-ruid2

对于Debian来说,这样做就足够了:

apt-get install libapache2-mod-ruid2

请注意 Apache 默认用户随发行版的不同而变化。在 Debian 中,它是 www-data,在 RH/CentOS 中,它是 apache,在 SuSE 中,它是 wwwrun。从现在起我将把它称为 Apache 默认用户。

如果您没有在虚拟主机中定义任何指令,它将以传统方式运行;否则行为将会改变。

它的想法是让一个进程在虚拟主机中运行,并且用户有权访问该虚拟主机,因此,这些文件将拥有该所有权,并且如您所愿,其他用户将无法读取它们。通常,您为每个虚拟主机定义一个用户。

在虚拟主机中的虚拟主机或目录指令中,您可以定义对该目录有效的用户和组。 user:usergroup 是 Apache 在访问虚拟主机/目录时将使用的有效权限,因此,属于该组的任何用户都将能够写入/查看目录。

    <Directory "/vhostdir/">
            RMode config
            RUidGid user usergroup

    ....

因此,在写入目录时,如果文件由一组用户管理,则现在可以将文件创建为 660,其所有权为 user:usergroup。同样,这些文件也可以由具有全局读取权限的其他用户创建;但是对于写入来说,它不会是 Apache 默认用户,而是另一个用户。

那么mod_ruid2的优点是:

  • 在虚拟主机环境中,用户无法读取其他用户的文件;
  • 在单个用户中,您仍然可以以其他用户的身份创建文件,并且 Apache 默认用户和 ruid2 用户都无法覆盖它们
  • 更重要的是,写入的文件现在将由 ruid2 用户完成,而不再由 Apache 默认用户全局完成。

来自 github 页面:

关于 mod_ruid2 是一个适用于 apache 2.0、2.2 和 2.4 的 suexec 模块,基于 mod_ruid 和 mod_suid2

-它只运行在Linux上,因为只有Linux内核实现了所需的进程功能。 - 它比 mod_suid2 具有更好的性能,因为它不需要在一个请求后杀死 httpd 子级。它利用内核功能,并在收到新请求后再次使用 suids。 -存在一些安全问题,例如,如果攻击者成功利用httpd进程,他可以设置有效功能并将setuid设置为root。我建议在内核(grsec)中使用一些安全补丁,或者其他东西。

-主要有两种操作模式:stat和config 1.config是默认的,必须定义uid和gid。如果没有定义 [ug]id,则使用默认用户和组。

  1. stat httpd setuid 和 setgid 到请求文件名(脚本)/目录的 uid 和 gid 如果您使用 mod_vhost_alias 进行虚拟主机,这很好

安装 1. 从这里下载并安装最新的 libcap 2. 运行 /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c 3. 配置 httpd.conf 4. 重新启动 apache

配置选项: RMode config|stat(默认为 config) RUidGid user|#uid group|#gid - 当 RMode 为 config 时,设置为此 uid 和 gid

RMinUidGid user|#uid group|#gid - 当 uid/gid < 小于 min uid/gid 时设置为默认 uid/gid RDefaultUidGid user|#uid group|#gid

RGroups group1 group2 - 通过 setgroups @none 设置的附加组 - 清除所有先前定义的组。

RDocumentChrRoot - 设置 chroot 目录和其中的文档根目录

例子:

<VirtualHost example.com>    
ServerAdmin [email protected]    
RDocumentChRoot /home /example.com/public_html    
ServerName     example.com    
ServerAlias    www.example.com    
RMode          config     # unnecessary since config is the default    
RUidGid        user1 group1    
RGroups        apachetmp

<Directory /home/example.com/public_html/dir>
   RMode stat    </Directory>

<Directory /home/example.com/public_html/dir/test>
   RMode config
   RUidGid user2 group2
   RGroups groups1    </Directory>

<Directory /home/example.com/public_html/dir/test/123>
   RUidGid user3 group3    </Directory>

<Location /yustadir>
   RMode config
   RUidGid user4 user4
   RGroups groups4    </Location>

相关内容