目前我们每次启动时都需要运行这样的程序:
/usr/sbin/semanage port -a -t memcache_port_t -p tcp ${special-snowflake-port}
如果我们能在重启后保留这一点,那就太好了。答案是编译策略,但最大的问题是如何做到这一点?我在.fc
文件文档中没有看到任何迹象表明这可以在那里编码,而且.te
文件语法有点难以阅读。但很明显,预先编译的策略确实设置了一些东西,我只是找不到如何设置。
我错过了什么?
答案1
我刚刚在 CentOS 6.5 系统上测试了您提供的命令,它按预期执行并添加${special-snowflake-port}
到tcp memcache_port_t
列表中。重新启动测试虚拟机并没有改变这一点,正如所见
semanage port -l | grep memcache_port_t
memcache_port_t tcp 11311, 11211
memcache_port_t udp 11211
除非你删除它,否则它将一直存在
semanage port -d -t memcache_port_t -p tcp 11311
semanage port -l | grep memcache_port_t
memcache_port_t tcp 11211
memcache_port_t udp 11211
你误会了什么?是什么让你认为这不是持久的?
答案2
事实证明它们实际上是持久化的,而我从未注意到。semanage
将策略的文件表示存储在中/etc/selinux/${config-file}/modules/active
。在我的例子中,端口列表位于:
/etc/selinux/targeted/modules/active/ports.local
这里充满了与此类似的条目:
portcon tcp 11222 system_u:object_r:memcache_port_t:s0
每当 semanage 添加(-a)或删除(-d)规则时,此目录都会重新生成。
file_contexts
是文件持久化文件上下文。
这很方便,因为这些文件的 grep 生成速度比 semanage -l 输出的速度更快。