我还有另一个令人沮丧的问题。我有一组属于“测试”组的用户。我有一个位于 /var/log/projects 的文件夹,其中设置了 setgid 位。这样,在 /projects 中创建的任何新文件或文件夹将始终保留“testing”的组所有权。
[root@system log]# ll | grep projects
drwxr-s---. 4 root testing 4096 Jun 10 19:36 projects
当我触摸文件或在该目录中创建文件夹时,它们会继承正确的权限和所有权。
[root@system log]# touch /var/log/projects/testfile
[root@system log]# ll /var/log/projects/
total 4
-rw-r--r--. 1 root testing 0 Jun 10 19:49 testfile
当我创建一个新文件夹时,它会按预期工作。
[root@system projects]# mkdir folder1
[root@system projects]# ll
total 8
drwxr-sr-x. 2 root testing 4096 Jun 10 19:52 folder1
-rw-r--r--. 1 root testing 0 Jun 10 19:49 testfile
到目前为止,一切都很好。不过,我正在使用此文件夹来存储来自其他系统的远程系统日志。当我启动 rsyslogd 服务时,该进程创建的任何文件文件夹都会继承 root:root 的所有权。
drwx--S---. 2 root root 4096 Jun 10 19:44 remotehost
我的印象是 setgid 位的目的是为了我的用例。谁能告诉我我做错了什么或者如何解决这个问题,以便 rsyslogd 进程创建的任何文件夹/文件都具有“testing”的组所有权?这是在 RHEL 6 服务器上。
答案1
您创建的方法适用于不专门管理其输出权限和所有权的程序,但 rsyslogd 可以。
Rsyslogd
的输出模块文档页面表明您可以使用fileGroup [groupName]
配置指令来设置输出文件组的默认值。
答案2
由于 rsyslog 忽略 setgid 粘性位,我可以通过在 rsyslogd.conf 自定义模板配置中使用以下指令来纠正该问题:
$template TmplAuth, "/var/log/projects/%FROMHOST-IP%/%PROGRAMNAME%.log"
$template TmplMsg, "/var/log/projects/%FROMHOST-IP%/%PROGRAMNAME%.log"
$umask 0000
$DirCreateMode 0750
$FileCreateMode 0640
$FileGroup testing
$DirGroup testing
authpriv.* ?TmplAuth
*.info,mail.none,authpriv.none,cron.none ?TmplMsg
注意 $DirCreateMode 和 $FileCreateMode 将不起作用,除非您使用 $umask 0000 指令覆盖默认 umask。