![Httpd 目录仅读取权限问题](https://linux22.com/image/776373/Httpd%20%E7%9B%AE%E5%BD%95%E4%BB%85%E8%AF%BB%E5%8F%96%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98.png)
在我的场景中,我需要“/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
。
更多信息可以在这里找到:
- logrotate:https://linux.die.net/man/8/logrotate
- mod_log_config:https://httpd.apache.org/docs/current/mod/mod_log_config.html