这可能是一个愚蠢的问题。在强制使用 selinux 的 Centos8 上,我的 subversion 服务器遇到了麻烦。我们有一个 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
> 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/svn
via 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
和。我好主意已经用完了。很可能有一个超级简单的解决方案,我已经对任何想法感到非常高兴(禁用 selinux 强制执行不是一个选项)。svnserve_content_t
提前非常感谢,
R
答案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 };
... 检查、编译、安装、运行。可能限制更多,但目前我很高兴它按预期运行。