使用 Apache 的 Linux 上的文件/文件夹权限和组

使用 Apache 的 Linux 上的文件/文件夹权限和组

我正在尝试使用 apache 来了解 Linux 网络服务器上的权限。

系统的一些线索:
我要使用的服务器基于 Fedora。Apache 以 apache:apache 的形式运行。为了允许 php 写入文件,需要对文件进行 chmod 777。755 是不够的。

我想知道的基本上是如何设置权限,就像它们应该在“共享网络主机”上一样。

我的主要问题是,如果我设置权限使得一个用户无法访问另一个用户的主文件夹,那么 apache 也无法从 public_html 文件夹读取。

为了阻止用户访问,我需要设置 chmod 700。但为了让 Apache 读取,我至少需要在世界上执行,因此 701 基本上可以工作,但不会让一些用户在。

所以我真的不知道该怎么办。一直在考虑将 apache 用户添加到下面的 frous 组中,以避免必须添加 world 执行标志,但这是一件坏事吗?应该反过来吗,下面组中的用户也应该在 apache 组中?

我的目标是建立 4 个组:

1. Web 应用程序
与 dev_int 相同,但唯一可以进入 webapp/live 文件夹,例如从 repo 进行更新。

2. dev_int
可以读取、写入和执行“Web 根目录”中的所有内容,包括下面的两个,但不能读取、写入和执行 Web 根目录之外的任何内容

3. dev_ext
可以在所有客户端文件夹中进行读写和执行,但无法访问 Web 应用根目录之外的任何内容

4. 客户
基本 ftp 帐户。有一个带有 public_html 的主文件夹,但无法访问任何其他主文件夹

文件夹结构示例:

  • 网页根目录    上述群组中的用户均不得离开此处
    • 一些项目    仅限 :dev_int
    • 网络应用
      • 居住    :webapp 仅限
      • 分期    :dev_int 和 :dev_ext
      • 客户    :dev_int 和 :dev_ext
        • 客户端_1    :dev_int、:dev_ext 和 client1:clients
          • 公共的html
    • 开发
      • 开发人员_1    developer_1:dev_int 或 :dev_ext
        • 公共的html

答案1

我建议你考虑以下两个选项:

  1. 使用 Apache 的多处理模块(例如mpm-itk,它允许您为每个 VHost 分配特定的 UID 和 GID。这可以让您以每个目录所需的权限运行 Apache,并会稍微提高安全性,因为 Apache 进程将以较窄的文件系统访问权限运行。

  2. 使用文件系统访问控制列表(一些信息可以在例如RHEL 的文档)。这是一个很好的解决方案,因为所有用户都可以保留他们的权限(并与其他用户隔离),但您可以授予 Apache 访问其public_html目录的权限。

您还可以结合使用这两种解决方案来配置高度隔离的环境。我很高兴在一台服务器上结合使用这两种方法,该服务器有几百个 shell 帐户和几个用于各种网页的独立 VHost。

答案2

如果您使用的是 apache 2 的 yum 安装,那么您可以将网页文件放在任何地方。我用它/var/www/html/DomainName.com来存储每个虚拟域文件。我将域的信息保存在单独的文件中,而不是 httpd.conf 中,这样如果我必须编辑它,就不必浏览整个文件。

我的 httpd.conf 文件的最后一行是:

Include /etc/httpd/conf/domains.conf

这是我用来创建新域的脚本的一部分。

DOMAIN=$1 
USERNAME=$2 
mkdir /var/www/html/$DOMAIN 
useradd -g apache  $USERNAME 
chown $USERNAME:    /var/www/html/$DOMAIN 
cd /home/$USERNAME 
ln -s /var/www/html/$DOMAIN www

echo "Adding httpd entry" 

echo "  " >>    /etc/httpd/conf/domains.conf 
echo "<VirtualHost *:80>" >>    /etc/httpd/conf/domains.conf
echo "      ServerAdmin webmaster@$DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      DocumentRoot /var/www/html/$DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      ServerName $DOMAIN" >> /etc/httpd/conf/domains.conf
echo "      ServerAlias www.$DOMAIN" >>   /etc/httpd/conf/domains.conf
echo "      ErrorLog logs/$DOMAIN-error_log" >>   /etc/httpd/conf/domains.conf
echo "      CustomLog logs/$DOMAIN-access_log common" >>   /etc/httpd/conf/domains.conf 
echo "</VirtualHost>" >> /etc/httpd/conf/domains.conf 

希望这可以帮助。

相关内容