如何在从未定义的用户运行时在文件上保留SELinux上下文
我在openstack swift设置中遇到了一些文件的SELinux上下文问题 设置详细信息: 守护进程正在使用以下SELinux上下文运行swift object replicator如何在从未定义的用户运行时在文件上保留SELinux上下文,linux,selinux,openstack-swift,Linux,Selinux,Openstack Swift,我在openstack swift设置中遇到了一些文件的SELinux上下文问题 设置详细信息: 守护进程正在使用以下SELinux上下文运行swift object replicator system\u:system\r:swift\t:s0 swift/usr/bin/python/usr/bin/swift object replicator/etc/swift/object server.conf 此守护进程定期调用脚本。该脚本创建的文件具有以下SELinux上下文 system\u:
system\u:system\r:swift\t:s0 swift/usr/bin/python/usr/bin/swift object replicator/etc/swift/object server.conf
此守护进程定期调用脚本。该脚本创建的文件具有以下SELinux上下文
system\u:object\r:swift\u var\u cache\t:s0/var/cache/swift/object.recon
这是正确的
问题
如果我从终端以“root”的身份运行相同的脚本(该守护进程正在内部调用),object.recon文件SELinux上下文将被修改如下-rw-------。swift未限定\u u:object\u r:var\u t:s0/var/cache/swift/object.recon
然后我开始在守护进程的日志文件中看到错误消息
如果我想从终端触发脚本,你知道为什么会更改上下文以及如何保存它吗?我想出了两种方法来保留上下文:
- 使用runcon以正确的上下文运行命令
runcon -t swift_t -r system_r swift-object-replicator /etc/swift/object-server.conf -ov
- 或者,定义SELinux类型转换规则,以便在执行脚本转换到正确的域时使用未定义的\u t域的用户
require { type unconfined_t; type swift_exec_t; type swift_t; role unconfined_r; class process transition; } role unconfined_r types swift_t; type_transition unconfined_t swift_exec_t:process swift_t;
/var/cache/swift(/.*)类型的策略规则?常规文件系统\u:object\r:swift\u var\u cache\u t:s0
但如何强制执行它。Restorecon修复问题,但只是暂时修复,直到有人再次点击终端的命令:(SElinux是强制的还是允许的?