我還有另一個令人沮喪的問題。我有一組屬於「測試」群組的使用者。我有一個位於 /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。