setgid 粘性位不起作用

setgid 粘性位不起作用

我还有另一个令人沮丧的问题。我有一组属于“测试”组的用户。我有一个位于 /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。

相关内容