Compiling
在 RPM .spec 中設置 SELinux 上下文的正確方法是什麼?
我正在嘗試建構一個以 RHEL4 和 5 為目標的 RPM。現在我打來電話
chcon
,%post
但多個 Google 條目說“這不是你應該這樣做的”,而在正確方式上的幫助非常有限。我還注意到,fixfiles -R mypackage check
當文件正確時,文件是錯誤的(正如預期的那樣;RPM DB 沒有意識到我想要什麼)..
我特別說 RHEL4,因為它沒有這
semanage
似乎是正確的方法之一。(添加一個新策略,然後restorecon
在您的目錄上執行%post
。)
- 我也不需要我自己的上下文,只需要
httpd_cache_t
一個非標準目錄。我也看到過“讓我們
cpio
照顧它”——但後來我遇到了一個新問題,即非 root RPM 建構使用者無法chcon
在建構目錄上執行。我在規範文件中作弊,sudo
但這似乎並不重要。
Fedora 打包指南有一個草稿文件,解釋如何在包中處理 SELinux,他們使用
semanage
. 沒有semanage
,看起來支持 RHEL 4 將是一個黑客,而且沒有辦法解決這個問題。根據rpm 4.9.0 發行說明,在 rpm 中直接支持管理 SELinux 策略,但它在歷史上已被破壞:
- 舊版本的 RPM 在規範中支持 %policy 指令,用於將 SELinux 策略附加到標頭中,但這從來沒有真正用於任何事情。應該刪除規範中對 %policy 指令的任何使用,因為這個未使用的指令會阻止使用 RPM 4.9.0 及更高版本進行建構,而不會對舊版本執行任何操作。
- 從 RPM 4.9.0 開始,通過規範中的新 %sepolicy 部分支持 SELinux 策略打包。此類軟體包無法建構,但也可以安裝在較舊的 RPM 版本上(但不會以任何方式使用包含的策略)。
我沒有看到那裡提到文件上下文,我也找不到任何提到直接文件上下文支持
%attr
的內容(如 節中所示%files
)。無論如何,看起來 RHEL 6 僅在 rpm 4.8.0 上執行,所以(除非我錯過了什麼)這semanage
條路線至少在 RHEL 7 之前我們將能夠做到。