
已为Linux安全课程的学生准备了该文章的翻译。
SELinux或安全性增强Linux是由美国国家安全局(NSA)开发的一种高级访问控制机制,用于防止恶意入侵。 它在现有的自由(或选择性)模型(例如,自由访问控制,DAC)之上实现了强制(或强制)访问控制模型(例如,强制访问控制,MAC),即读取,写入,执行的权限。
SELinux具有三种模式:
- 强制 -基于策略规则的拒绝访问。
- 允许 -记录违反在强制模式下禁止的策略的操作。
- 禁用 -完全禁用SELinux。
默认情况下,设置在/etc/selinux/config
更改SELinux模式
要找出当前模式,请运行
$ getenforce
要将模式更改为宽松模式,请运行以下命令
$ setenforce 0
或者,要将模式从允许更改为强制 ,请执行
$ setenforce 1
如果您需要完全禁用SELinux,则只能通过配置文件来完成
$ vi /etc/selinux/config
要禁用,请如下更改SELINUX参数:
SELINUX=disabled
SELinux设置
每个文件和进程都带有SELinux上下文标记,该上下文包含其他信息,例如用户,角色,类型等。 如果这是您第一次启用SELinux,则必须首先配置上下文和标签。 标记和上下文的过程称为标记。 要开始标记,请在配置文件中将模式更改为permissive 。
$ vi /etc/selinux/config SELINUX=permissive
设置许可模式后,在根目录中创建一个名为autorelabel
的空隐藏文件
$ touch /.autorelabel
然后重启电脑
$ init 6
注意:我们使用许可模式进行标记,因为使用强制模式可能会导致重新引导期间系统崩溃。
不用担心下载是否卡在某个文件上,标记会花费一些时间。 标记并引导系统后,您可以转到配置文件并设置强制模式,然后运行:
$ setenforce 1
现在,您已经在计算机上成功启用了SELinux。
监控日志
标记或系统运行时,您可能会遇到某种错误。 要检查您的SELinux是否正常工作,以及它是否不阻止对任何端口,应用程序等的访问,您需要查看日志。 SELinux日志位于/var/log/audit/audit.log
,但是您无需完整阅读即可发现错误。 您可以使用audit2why查找错误。 运行以下命令:
$ audit2why < /var/log/audit/audit.log
结果,您将得到一个错误列表。 如果日志中没有错误,则不会显示任何消息。
配置SELinux策略
SELinux策略是指导SELinux安全的一组规则。 策略为特定环境定义了一组规则。 现在,我们将学习如何配置策略以允许访问受限制的服务。
1.逻辑值(开关)
开关(布尔值)使您可以在工作时更改策略的某些部分,而无需创建新策略。 它们使您无需重新启动或重新编译SELinux策略即可进行更改。
例子
假设我们想通过FTP共享用户的主目录以进行读写,并且我们已经共享了它,但是当我们尝试访问时,什么也没看到。 这是因为SELinux策略禁止FTP服务器读取和写入用户的主目录。 我们需要更改策略,以便FTP服务器可以访问主目录。 让我们通过执行以下操作查看是否有任何开关
$ semanage boolean -l
该命令将显示可用开关的列表及其当前状态(打开/打开或关闭/关闭)和说明。 您可以通过添加grep来优化搜索,以仅查找与ftp相关的结果:
$ semanage boolean -l | grep ftp
并找到以下内容
ftp_home_dir -> off Allow ftp to read & write file in user home directory
该开关已关闭,因此我们将在setsebool $ setsebool ftp_home_dir on
启用它
现在,我们的ftp守护程序将能够访问用户的主目录。
注意:通过执行getsebool -a
您还可以获取可用开关列表,而无需描述
2.标签和上下文
这是实现SELinux策略的最常用方法。 每个文件,文件夹,进程和端口都标记有SELinux上下文:
- 对于文件和文件夹,标记作为扩展属性存储在文件系统中,可以使用以下命令查看:
$ ls -Z /etc/httpd
- 对于进程和端口,核心控制标记,您可以看到以下标签:
过程
$ ps –auxZ | grep httpd
港口
$ netstat -anpZ | grep httpd
例子
现在,让我们看一个示例,以更好地理解标签和上下文。 假设我们有一个/var/www/html/ /home/dan/html/
而不是/var/www/html/ /home/dan/html/
目录的Web服务器。 SELinux将认为这是违反政策的,您可能无法浏览您的网页。 这是因为我们尚未设置与HTML文件关联的安全上下文。 要查看默认的安全上下文,请使用以下命令:
$ ls –lz /var/www/html -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
在这里,我们将httpd_sys_content_t
作为html文件的上下文。 我们需要为当前目录设置此安全上下文,该目录现在具有以下上下文:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
用于检查文件或目录的安全性上下文的替代命令:
$ semanage fcontext -l | grep '/var/www'
找到正确的安全上下文后,我们还将使用语义管理来更改上下文。 要更改/ home / dan / html的上下文,请运行以下命令:
$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(/.*)?' $ semanage fcontext -l | grep '/home/dan/html' /home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 $ restorecon -Rv /home/dan/html
使用semanage更改上下文后,restorecon命令将加载文件和目录的默认上下文。 现在,我们的Web服务器将能够从文件夹/home/dan/html
读取文件,因为该文件夹的安全上下文已更改为httpd_sys_content_t
。
3.制定地方政策
在某些情况下,上述方法对您无用,并且您在audit.log中遇到错误(avc /拒绝)。 发生这种情况时,您需要创建一个本地策略。 如上所述,您可以使用audit2why找到所有错误。
要解决错误,您可以创建本地策略。 例如,我们收到与httpd(apache)或smbd(samba)相关的错误,我们对这些错误进行grep并为其创建策略:
apache $ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy samba $ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
这里的http_policy
和smb_policy
是我们创建的本地策略的名称。 现在,我们需要将这些创建的本地策略加载到当前的SELinux策略中。 可以按以下步骤完成:
$ semodule –I http_policy.pp $ semodule –I smb_policy.pp
我们的本地策略已加载,并且我们不应再在audit.log中收到任何avc或denail。
我试图帮助您了解SELinux。 我希望阅读本文后,您对SELinux感到更满意。