nfs 掛載上有 selinux 的 svnserve 無法啟動 (Centos8)

nfs 掛載上有 selinux 的 svnserve 無法啟動 (Centos8)

可能是個愚蠢的問題。在 Centos8 上使用我的 subversion 伺服器並強制執行 selinux 時遇到了困難。我們有一個 NFS 掛載來儲存資料 ( /mnt/data/svn)。

問題(當 selinux 處於強制模式時)是該服務不會啟動,因為它沒有存取權限/mnt/data/svn

> service svnserve start # error
> journalctl -xe

systemd[1]: Starting Subversion protocol daemon...
-- Subject: Unit svnserve.service has begun start-up
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
-- 
-- Unit svnserve.service has begun starting up.
... svnserve[2445049]: svnserve: E000013: Can't check path '/mnt/data/svn': Permission denied
... systemd[1]: svnserve.service: Control process exited, code=exited status=1
... systemd[1]: svnserve.service: Failed with result 'exit-code'.
... systemd[1]: Failed to start Subversion protocol daemon.

SVN環境: /etc/sysconfig/svnserve:

OPTIONS="-r /mnt/data/svn"

目錄權限:遞迴...

drwxr-xr-x. 36 svn svn 4096 Nov 17 16:40 /mnt/data/svn

SE配置: 透過語義

> semanage fcontext -l | egrep "/mnt/data/svn"
/mnt/data/svn           all files          system_u:object_r:svnserve_content_t:s0 
/mnt/data/svn(/.*)?    all files          system_u:object_r:svnserve_content_t:s0 

SE 上下文類型

> ls -ldaZ /mnt/data/svn
drwxr-xr-x. 36 svn svn system_u:object_r:nfs_t:s0 4096 Nov 17 16:40 /mnt/data/svn

沒有 selinuxenforced一切都會如預期進行。問題:無法將svnserve_content_t類型新增至/mnt/data/svnvia semanage

chcon -Rv --user system_u /mnt/data/svn             # fine
chcon -Rv --type svnserve_content_t /mnt/data/svn   # fails

似乎snvserve_content_t無效,或者我無法同時分配nfs_t和。svnserve_content_t我是一個好主意的終結者。很可能有一個超級簡單的解決方案,我已經對任何想法感到非常高興(禁用 selinux 強制不是一個選項)。

預先非常感謝您,

答案1

我的解決方案

審計日誌確實顯示出了問題所在:

type=AVC msg=audit(1606892987.322:161301): avc:  denied  { search } for  pid=2570843 comm="svnserve" name="/" dev="0:46" ino=2131353823 scontext=system_u:system_r:svnserve_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir permissive=0

search沒有目錄權限。我的解決方案是編寫一個自訂的 selinux 策略模組/規則:

module svnserve_nfs 1.0;

require {
        type svnserve_t;
        type nfs_t;
        class dir { getattr search read write };
        class file { getattr unlink append open read setattr write lock create rename };
}

#============= svnserve_t ==============
allow svnserve_t nfs_t:dir { getattr search read write };
allow svnserve_t nfs_t:file { getattr unlink append open read setattr write lock create rename };

....檢查、編譯、安裝、工作。可能有點限制,但目前我很高興它按預期工作。

相關內容