У меня еще одна досадная проблема. У меня есть группа пользователей, принадлежащих к группе "testing". У меня есть папка, расположенная в /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 sticky, мне удалось исправить проблему, используя следующие директивы в моей пользовательской конфигурации шаблона 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 по умолчанию с помощью директивы $umask 0000.