【51CTO.com快译】SELinux颇具挑战性;当这个安全层阻止您的应用程序或服务时,您的第一个反应往往是将其设成“禁用”或“允许”。在安全至关重要的当下,您无法进行这种更改,否则您的整个系统或网络安全堪忧。您不想那样。
为何不使用可助您一臂之力的工具?这款工具就是semanage,它是SELinux策略管理工具。借助semanage,您可以调整文件上下文、端口上下文和布尔值,这将有助于您确保系统可使用,又不必禁用安全系统。
本文将介绍以下命令:
- semanage boolean
- semanage fcontext
- semanage port
知道这些命令后,您应该能够在Linux系统上更好地使用SELinux。
您需要什么?
运行中的Linux实例(使用SELinux)
拥有sudo特权的用户
如何使用semanage boolean?
使用semanage boolean,您可以启用和禁用允许规则集,因而可以为不同的用例允许不同的规则集。假设您有一台Web服务器,必须允许读取用户内容,比如来自主目录的数据。SELinux默认情况下不允许这么做。使用semanage boolean命令,您可以启用该功能。
您可以使用semanage boolean命令,通过以下命令列出所有可用的HTTP相关策略:
- sudo semanage boolean -l | grep httpd
您将看到几项条目,比如:
- httpd_read_user_content (off , off) Allow httpd to read user content
每份列表含有布尔值的名称、布尔值的当前和持久状态以及布尔值描述。如上所示,httpd_read_user_content布尔值设为off。我们如何启用它?很简单:
- sudo semanage boolean -m --on httpd_read_user_content
使用-m选项,我们指示SELinux使用后面的选项(--on)来修改记录(本例中是httpd_read_user_context)。
就是这样。您已完成了设置,SELinux将允许Web服务器读取用户内容。
如果想要列出所有布尔值,看看您还可以做些什么,执行以下命令:
- sudo semanage boolean -l
如何使用semanage fcontext?
semanage fcontext命令用于管理文件上下文定义,这包含额外信息(比如SELinux用户、角色、类型和级别),以做出访问控制决策。文件上下文是管理员在SELinux上面临的最大问题之一。您可能已经创建了一个新目录来容纳SSH主机密钥,但是如果没有正确的文件上下文,SELinux不会允许通过SSH访问该目录。
您可以执行什么操作?
可以使用semanage fcontext更改新目录的文件上下文。
与boolean一样,fcontext也有可以使用的策略。想查看可用策略的完整列表,请执行以下命令:
- sudo semanage fcontext -l
如果想列出所有与SSH守护程序有关的策略,请执行以下命令:
- sudo semanage fcontext -l | grep sshd
在该列表中,您将看到以下条目:
- /etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
- /etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
- /etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
假设您要将SSH主机密钥放在/data/keys中。创建目录,将所有键移动到新主目录中,并更改sshd_config文件以匹配新映射。尝试使用SSH时,它会失败。为什么?因为/data/keys没有正确的fcontext。可以使用以下两个命令解决该问题:
- sudo semanage fcontext -a -t sshd_key_t '/data/keys/*.*'
- sudo restorecon -r /data/keys
我们使用semanage fcontxt创建新策略之后,必须使用restorecon命令对新文件设置安全上下文。正则表达式*.*获取目录中的所有文件。
如何使用semanage port?
您可能猜到了,semanage port让您可以在自定义端口上运行服务。如果您尝试在自定义端口上运行服务,该服务会失败。假设您想在非标准端口上运行SSH守护程序。如果您仅为此配置sshd_config,会发现SELinux将阻止您获得访问权限,因为SELinux不知道您已进行了此更改。
如果想把SSH端口更改为2112:
- semanage port -a -t ssh_port_t -p tcp 2112
然后就要使用以下命令将端口添加到防火墙:
- sudo firewall-cmd --add-port=2112/tcp --permanent
- sudo firewall-cmd --reload
至此,您终于可以使用非标准端口,通过SSH访问支持SELinux的服务器。
想列出所有可用的端口策略,请执行以下命令:
- sudo semanage port –l
结论
SELinux是一种功能很强大的工具,擅长保护Linux服务器免受不必要的更改。这种功能带来了一定程度的复杂性。熟悉上述三个命令,可使管理工作变得更轻松,而不是禁用SELinux或将其设置为“许可”模式。
原文标题:How to use semanage and avoid disabling SELinux,作者:Jack Wallen
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】