또 다른 실망스러운 문제가 있습니다. "테스트" 그룹에 속한 사용자 집합이 있습니다. setgid 비트가 설정된 /var/log/projects에 폴더가 있습니다. 이렇게 하면 /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 서비스를 시작하면 프로세스에서 생성된 모든 파일 폴더는 루트:루트의 소유권을 상속합니다.
drwx--S---. 2 root root 4096 Jun 10 19:44 remotehost
내 생각에 setgid 비트의 목적은 내 사용 사례에 대한 것입니다. 내가 뭘 잘못하고 있는지 또는 rsyslogd 프로세스에서 생성된 모든 폴더/파일이 "테스트"라는 그룹 소유권을 갖도록 이 문제를 해결하는 방법을 알려줄 수 있는 사람이 있나요? 이것은 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
$umask 0000 지시어를 사용하여 기본 umask를 재정의하지 않으면 $DirCreateMode 및 $FileCreateMode는 아무런 효과가 없습니다.