产品使用与售后服务帮助
发布时间: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模式,不如熟悉以上三个命令,这应该会让你的管理生活变得更加轻松。