Httpd 目录仅读取权限问题

Httpd 目录仅读取权限问题

在我的场景中,我需要“/var/log/”中的“httpd”目录可供“devs”组中的用户读取(Amazon Linux 2)有人可以指导我如何实现这一点吗?

我们有几个开发人员负责维护系统,我希望他们能够轻松读取 /var/log/httpd 中的日志文件,而无需 root 访问权限。

这有帮助吗?

chmod -R go+r /var/log/httpd

或者chmod -R go+rX /var/log/httpd

或者我需要选择:

chmod 644 /var/log/httpd

chgrp -R apache /var/log/httpd
chmod 02750 /var/log/httpd
chmod 0640 /var/log/httpd/*
create 0640 root apache

ls

[root@ip-10-0-10-165 httpd]# ls -la
total 48
drwx------ 19 root   devs   4096 Apr  3 03:42 .
drwxr-xr-x 11 root   devs   4096 Apr  8 07:45 ..
-rw-r--r--  1 root   root      0 Feb 15 14:55 access_log
drwxr-xr-x  2 root   devs     41 Mar  1 20:44 u1-dev.qwerty.com
-rw-r--r--  1 root   root   1648 Apr  3 03:42 error_log
-rw-r--r--  1 root   root    883 Mar 13 03:41 error_log-20220313
drwxr-xr-x  2 root   devs     41 Mar  1 20:44 u4-dev.qwerty.com
drwxr-xr-x  2 root   root     41 Mar  1 20:44 langs.qwerty.com
drwxr-xr-x  2 root   devs     41 Mar  1 20:44 u8-dev3.qwerty.com
-rw-r--r--  1 root   root      0 Feb 15 14:55 ssl_access_log
-rw-r--r--  1 root   root    314 Apr  3 03:42 ssl_error_log
-rw-r--r--  1 root   root    157 Mar  6 03:50 ssl_error_log-20220313
-rw-r--r--  1 root   root      0 Feb 15 14:55 ssl_request_log
drwxr-xr-x  2 apache apache  253 Apr  3 03:42 www.qwerty.com
drwxr-xr-x  2 root   devs     41 Mar  1 20:44 u13-dev.qwerty.com
[root@ip-10-0-20-173 httpd]#

如何修改这些权限集?这里最好的方法是什么?

答案1

您可以对此目录使用 acl,并授予 devs 组的权限。例如:

setfacl -m g:devs:rx httpd/

您可以为目录设置文件访问列表。在您的示例中,您有一个 httpd 目录,其权限仅设置给用户/组 root。

# ls -la| grep httpd
drwx------   2 root     root        4096 Apr  8 10:11 httpd

您可以检查该目录没有 acl 列表:

getfacl httpd/
# file: httpd/
# owner: root
# group: root
user::rwx
group::---
other::---

我们为 devs 组设置读取和执行权限:

setfacl -m g:devs:rx httpd/

设置权限后将如下所示:

getfacl httpd/
# file: httpd/
# owner: root
# group: root
user::rwx
group::---
group:devs:r-x
mask::r-x
other::---

请注意 ls 命令上任何现有 acl 的额外符号 (+)。

# ls -la| grep httpd
drwxr-x---+  2 root     root        4096 Apr  8 10:11 httpd

重复使用 -b 开关的 setfacl 命令来设置默认权限可能是一个好主意。我通常这样做。

-d, --default
           All operations apply to the Default ACL. Regular ACL entries in the input set are promoted to Default ACL entries. Default ACL entries in the input set are discarded. (A warning  is  issued
           if that happens).

问候

答案2

根据您对问题的标记,您使用的是 Redhat 风格的环境。假设您使用的是普通的 Apache httpd 安装,那么您可能在幕后处理 logrotate。默认情况下,logrotate 每天执行一次/etc/cron.daily。它会将您当前的日志文件移开,创建新的日志文件并重新启动,httpd以便开始使用新创建的空日志文件。

检查/etc/logrotate.d/httpd。例如,库存版本显示:

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

如果在花括号内添加这样的一行,logrotate 将使用正确的所有者和组成员身份正确旋转并重新创建日志文件:

    create 0640 root devs

root这指示 logrotate 以所有者、devs组的身份创建新的日志文件,权限为所有者读/写和组读。

然后,您可以像这样设置 httpd 日志目录的权限和所有权:

chown root:devs /var/log/httpd
chmod 0750 /var/log/httpd

对于第一天,您可能还需要手动设置日志文件的权限,logrotate 将在接下来的几天内启动:

chown root:devs /var/log/httpd/*log
chmod 0640 /var/log/httpd/*log

您可以像上面的@KuchnMar 所演示的那样使用 ACL,但是此解决方案可以使事情保持简单并且与各种 *nix 和文件系统类型兼容。

这可能在 Debian 风格的主机上类似,但可能会调用您的 logrotate 配置文件apache2

更多信息可以在这里找到:

相关内容