SELinux(Security-Enhanced Linux)是Linux的一个安全子系统,它提供了一种机制来帮助系统管理员更精确地控制哪些人可以访问哪些资源。与传统的自主访问控制(DAC)不同,SELinux使用强制访问控制(MAC),这意味着即使用户或程序拥有对文件的权限,SELinux策略也可以进一步限制其访问。
SELinux有三种工作模式:
在配置SELinux之前,首先需要检查当前系统的SELinux状态。
使用以下命令查看当前SELinux的工作模式:
getenforce
如果输出为Enforcing
,则表示SELinux处于强制执行模式;如果输出为Permissive
,则表示SELinux处于宽容模式;如果输出为Disabled
,则表示SELinux已被禁用。
SELinux的配置文件通常位于/etc/selinux/config
。可以通过以下命令查看该文件内容:
cat /etc/selinux/config
关键配置项为:
SELINUX=enforcing # enforcing模式
SELINUX=permissive # permissive模式
SELINUX=disabled # disabled模式
如果需要临时更改SELinux模式而无需重启系统,可以使用setenforce
命令。
setenforce 0
执行后,SELinux将切换到宽容模式。
setenforce 1
执行后,SELinux将切换回强制执行模式。
注意:这种更改是临时的,系统重启后会恢复到/etc/selinux/config
中定义的模式。
要永久更改SELinux模式,需要修改/etc/selinux/config
文件。
使用文本编辑器打开/etc/selinux/config
文件:
vi /etc/selinux/config
根据需求修改SELINUX
参数:
SELINUX=enforcing # 强制执行模式
SELINUX=permissive # 宽容模式
SELINUX=disabled # 禁用模式
保存并退出编辑器后,需要重启系统以使更改生效:
reboot
SELinux的核心在于策略管理。通过策略,可以定义特定程序或服务的访问权限。
每个文件、目录和进程都有一个SELinux上下文。可以通过以下命令查看文件或目录的SELinux上下文:
ls -Z 文件名
例如:
ls -Z /var/www/html/index.html
如果需要更改文件或目录的SELinux上下文,可以使用chcon
命令:
chcon -t httpd_sys_content_t /var/www/html/index.html
上述命令将/var/www/html/index.html
的上下文设置为httpd_sys_content_t
,允许Apache服务器访问该文件。
如果误更改了文件的SELinux上下文,可以使用restorecon
命令恢复默认上下文:
restorecon -R /var/www/html/
如果某些程序无法正常运行,可能是因为SELinux策略过于严格。可以创建自定义策略来解决这些问题。以下是创建自定义策略的基本步骤:
使用audit2allow
工具从日志中提取未被允许的操作:
grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
生成的策略模块文件名为mypolicy.pp
,可以通过以下命令安装:
semodule -i mypolicy.pp
问题:Apache无法访问网页文件
chcon
或restorecon
命令修复。问题:SSH登录失败
SELinux是一个强大的安全子系统,能够显著提高Linux系统的安全性。通过合理配置和管理SELinux策略,可以有效防止未经授权的访问和潜在的安全威胁。