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。

相關內容