如何在从未定义的用户运行时在文件上保留SELinux上下文

如何在从未定义的用户运行时在文件上保留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:

我在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: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;
    

你无法阻止它。SElinux就是要这么做的。另一方面,试着为它创建一个目标策略。@alvits是的,我就是这么想的。那将是什么样的政策?您能告诉我详细信息吗?我们有一个
/var/cache/swift(/.*)类型的策略规则?常规文件系统\u:object\r:swift\u var\u cache\u t:s0
但如何强制执行它。Restorecon修复问题,但只是暂时修复,直到有人再次点击终端的命令:(SElinux是强制的还是允许的?