Ubuntu 上的 SELinux 教程
简介
SELinux 是驻留在 Linux 系统内核级的强制访问控制 (MAC) 模块。它是 Redhat 和 NSA 联合开发的产品,于 1998 年左右发布,至今仍由爱好者社区维护。默认情况下,Ubuntu 使用 AppArmor 而不是 SeLinux,后者在性能方面相似,但在简单性方面相当受欢迎。然而,由于政府机构的参与,SeLinux 被认为是相当安全的。 SELinux 是一个开源应用程序,它通过隔离每个应用程序并限制其活动来保护主机。默认情况下,除非授予明确的权限,否则进程将被阻止执行任何活动。该模块本身提供了两个全局级别的管理规则:Permissive 和 Enforcing,分别记录每个违反的规则,并拒绝访问从进程发送的特定请求。本教程演示如何在 Ubuntu 上轻松使用它。如何安装和启用
SeLinux 是一个安装起来非常棘手的应用程序,因为如果在第一次重新启动之前没有正确配置它,它将导致整个操作系统无法启动,这意味着通过正常方式几乎无法访问初始启动屏幕之外的任何内容。
同样如前所述,Ubuntu 已经拥有一个复杂的高级强制访问控制系统,称为 AppArmor,因此必须在安装 SeLinux 之前禁用它以避免任何冲突。使用以下说明禁用 AppArmor 并启用 SeLinux。
sudo /etc/init.d/apparmor stop
apt-get update && upgrade –yuf
apt-get install selinux
nano /etc/selinux/config
‘set SELINUX to permissive, SELINUXTYPE to default’
reboot
可以使用任何文本编辑器打开此文件配置进行更改。向 SETLINUX 分配许可规则的原因是使操作系统可访问,同时保持 SeLinux 启用。强烈建议使用宽容选项,因为它没有麻烦,但它会记录违反 SeLinux 中设置的规则。
可用选项
SELinux是一个复杂且综合的模块;因此它包含很多功能和选项。话虽如此,由于其奇异的性质,这些选项中的大多数可能并不对每个人都有用。以下选项是本模块中的一些基本且有用的选项。它们足以让 SELinux 启动并运行。
查看状态:可以直接通过终端窗口查看SELinux的状态,显示SeLinux是否启用、SELinux根目录、加载的策略名称、当前模式等基本信息。安装 SeLinux 后的系统,以 root 用户身份使用 sudo 命令使用以下命令。如果状态部分表明 SeLinux 已启用,则意味着它已启动并在后台运行。
root@ubuntu:/home/dondilanga# sestatus
更改全局权限级别:全局权限级别说明 SELinux 在遇到规则时的行为方式。默认情况下,SeLinux 将自身设置为强制,有效阻止所有请求,但可以将其更改为宽松,这对用户比较宽松,因为它允许访问,但会在其日志文件中记录任何违反的规则。
nano /etc/selinux/config
‘set SELINUX to permissive or enforcing, SELINUXTYPE to default’
检查日志文件:日志文件指出每个请求违反的规则。仅当启用 SeLinux 时才会保留日志。
grep selinux /var/log/audit/audit.log
启用和禁用策略以及它们提供的保护:这是 SeLinux 中最重要的选项之一,因为它允许启用和禁用策略。 SeLinux 有大量预先构建的策略来确定是否允许指定的请求。其中一些示例是allow_ftpd_full_access,它确定FTP服务登录本地用户并读写系统上所有文件的能力,allow_ssh_keysign,它允许在登录SSH时使用密钥,allow_user_mysql_connect,它允许用户连接到mysql 、httpd_can_sendmail,它确定 HTTP 服务发送电子邮件等的能力。在下面的代码示例中,它安装了policycoreutils-python-utils,它实际上有助于以描述性方式列出每个策略,接下来它列出了所有可用的策略终端,最后它教如何设置打开或关闭策略,allow_ftpd_full_access是semanage返回的终端中显示的策略名称,
apt-get install policycoreutils-python-utils
semanage boolean -l
setsebool -P allow_ftpd_full_access ON
高级选项
高级选项是有助于扩展 SELInux 中的功能的选项。由于 SeLinux 的综合性,存在大量的组合,因此本文列出了其中一些突出且有用的组合。
基于角色的访问控制(RBAC): RBAC允许管理员切换到基于角色的方式来限制应用程序的权限。这意味着允许特定用户组的用户执行或执行某些预定义的操作。只要用户是角色的一部分就可以。这与在具有管理权限的 Linux 上安装应用程序时切换到 root 是一样的。
semanage login -a -s 'myrole' -r 's0-s0:c0.c1023' <username>
用户可以使用以下命令切换角色。
sudo -r new_role_r -i
用户还可以通过启动时启用的角色通过 SSH 远程连接到服务器。
ssh <username>/new_role_r@nucuta.com
允许服务监听非标准端口:这在自定义服务时非常有用,例如当将 FTP 端口更改为非标准端口以避免未经授权的访问时,SELinux必须得到相应通知,以允许此类端口通过并正常运行。下面的例子让FTP端口监听992端口。同样,semanage port –l 返回的任何服务都可以被替换。一些流行的端口是 http_port_t 、 pop_port_t 、 ssh_port_t 。
semanage port -a -t <port to allow> <protocol> <port number>
semanage port -a -t ftp_port_t -p tcp 992
如何禁用
禁用 SELinux 更容易,因为它已启用并安装。基本上有两种禁用它的方法。无论是暂时的还是永久的。临时禁用 SeLinux 会使其禁用一段时间,直到下次启动为止,并且一旦计算机再次打开,状态就会重新启动。另一方面,永久禁用 SeLinux 会使其完全暴露在威胁之下;因此,至少为了系统的安全性,恢复Ubuntu默认的AppArmor是一个明智的选择。
终端上的以下命令将其暂时关闭:
setenforce 0