帮助中心

产品使用与售后服务帮助

当前位置:首页 > 帮助中心> 如何使用semanage并避免禁用SELinux?

如何使用semanage并避免禁用SELinux?

发布时间:2021-03-22 08:50 来源:A5数据

当你的服务器应用程序或服务被安全层阻止时,你的第一倾向是将SELinux设置为禁用或允许。在一个安全很重要的时代,你不能做出这样的改变,否则你会危及整个系统或网络的安全。

与其把一切都置于危险之中,为什么不利用一个可以帮助你的工具呢?这个工具就是semanage,也就是SELinux策略管理工具。通过semanage,你可以调整文件上下文、端口上下文和booleans,这将在很大程度上帮助你使事情变得可行,同时又不会使安全系统失效。

我想向你介绍以下命令。

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) 允许httpd读取用户内容。

每个列表都包括布尔值的名称、布尔值的当前和持久状态以及布尔值的描述。如上图所示,httpd_read_user_content 布林值被设置为关闭。我们如何启用它?很简单。

sudo semanage boolean -m --on httpd_read_user_content

通过-m选项,我们指示SELinux使用后面的选项(--on)修改一条记录(本例中是httpd_read_user_context)。

就是这样。你只是让SELinux允许Web服务器读取用户内容。

如果你想列出所有的boolean,看看你还能做什么,请发出命令。

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

我们必须使用 restorecon 命令来设置新文件的安全上下文--在我们用 semanage fcontxt 创建新策略之后。正则表达式 *.* 涵盖了目录内的所有文件。

如何使用 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或将其设置为Permissive模式,不如熟悉以上三个命令,这应该会让你的管理生活变得更加轻松。