默认情况下,创建 /var/log/messages* 时仅具有“root”用户的读写权限。
可能需要使日志文件世界可读,例如允许应用程序读取和处理其中的数据。
使用“chmod”更改此类文件的权限可能是一个临时解决方案,因为它们将在下一个 logrotate cron 作业期间使用原始权限重新创建。
这篇文章将有助于了解如何在 /var/log/messages 上永久设置自定义权限(例如 644)。
对于 CentOS/RHEL 4 和 5(使用 syslogd)
/etc/logrotate.d/syslog 配置文件中的“create xxxx”指令控制由syslogd守护进程管理的日志文件的权限。
下面的例子展示了如何将 /var/log/messages 上的权限更改为 644(世界可读)。
由于目的是仅更改单个日志文件(例如 /var/log/messages)的权限,我们正在 /etc/logrotate.d/syslog 中创建一个新的配置部分,专门用于更改 /var/log/messages。
当前权限:
# ls -l /var/log/messages -rw-------. 1 root root 424848 June 22 09:18 /var/log/messages
- 首先,从文件/etc/logrotate.d/syslog的主要部分中删除/var/log/messages,
# vi /etc/logrotate.d/syslog /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { ### 从main部分删除 /var/log/messages sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
并为 /var/log/messages 创建一个新部分,如下所示,并将其添加到同一文件中。
/var/log/messages { ### 将 /var/log/messages 添加到子部分 sharedscripts create 0644 ### 该指令会将 /var/log/messages* 的权限更改为 644 postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
注意:syslogd 不会自动更改任何已存在文件的权限。
复制或者移动原始文件并强制立即旋转以使更改生效。
- 手动轮换系统日志以查看权限的变化。
# logrotate --force /etc/logrotate.d/syslog
# ls -l /var/log/messages -rw-r--r--. 1 root root 231 June 22 09:19 /var/log/messages
所有后续日志文件都将使用“644”权限创建。
对于 CentOS/RHEL 6 和 7(使用 rsyslogd 版本 >3)
/etc/rsyslog.conf 配置文件中的 $FileCreateMode 指令和 $umask 指令允许指定 rsyslogd 创建新文件的创建模式。
默认情况下,$FileCreateMode 指令编译为 0644,理想情况下应该创建由 rsyslog 管理的具有 644 权限的文件,但由于实际权限取决于 rsyslogd 的进程 umask,因此所有文件都以 600 权限创建。
要解决此问题,请编辑 /etc/rsyslog.conf 并在需要修改的文件的开头添加“$umask 0000”。
下面的示例显示了如何将 /var/log/messages 上的权限更改为 644(世界可读)
1.检查/va/log/messages文件的当前权限:
# ls -l /var/log/messages -rw-------. 1 root root 424848 June 22 09:18 /var/log/messages
- 编辑/etc/rsyslog.conf 配置文件和文件顶部的指令“$umask 0000”。
# vi /etc/rsyslog.conf .. $umask 0000 ### 添加这个以重置 umask $FileCreateMode 0644 ### 这行可以省略,因为默认编译已经设置为644。如果需要设置644以外的权限,请修改此值 *.info;mail.none;authpriv.none;cron.none /var/log/messages $umask 0077 ### 添加此项以将 umask 设置回默认值,否则所有由 rsyslogd (/eg /var/log/secure) 管理的文件将被创建为世界可读 (644)
注意:rsyslogd 不会自动更改任何已存在文件的权限。
我们必须删除或者移动文件并重新加载 rsyslogd 才能使新权限生效。
- 让我们将当前的 /var/log/messages 文件移动到其他位置。
这将允许我们使用新定义的权限创建一个新的消息文件。
# mv /var/log/messsages /tmp/
- 重启rsyslog服务,生成新的/var/log/messages文件。
# service rsyslog restart ### CentOS/RHEL 6 # systemctl restart rsyslog ### CentOS/RHEL 7
- 再次检查文件的权限。
# ls -l /var/log/messages -rw-r--r--. 1 root root 231 June 22 09:19 /var/log/messages