SELinux 入门详解
什么是 SELinux?
SELinux(Security-Enhanced Linux)是 Linux 内核基于 Flawor 操作系统开发的安全模块。它为操作系统提供了一种访问控制机制,可以让管理员为每个主体(如用户、进程和服务)指定安全策略。
SELinux 架构
SELinux 架构分为三个部分: 安全服务器(Security Server)、安全策略(Security Policy)和安全上下文(Security Context)。
安全服务器
SELinux 通过安全服务器来实现针对用户安全决策的执行政策。该模块决定了系统上的所有对象如何使用它们的权限。它将查询有关用户、权限等的安全策略和上下文的信息,并根据这些信息确定所允许的操作。
安全策略
安全策略指定了在系统运行时受到保护的对象以及如何允许或拒绝对这些对象的访问。这包括系统对象,如文件、目录、管道、进程和套接字以及非系统对象如 DHCP 守护进程和其他的用户进程。
安全上下文
安全上下文是 SELinux 安全策略的基础。安全上下文定义了每个对象的名称,以及与该对象相关联的用户、角色、类型和标签。
如何使用 SELinux?
在常规用法中,SELinux 提供以下三种类型的安全环境: Enforcing、Permissive 和 Disabled。
- Enforcing 模式:所有的访问都必须通过 SELinux 的策略检查。如果策略检查失败,该操作将被阻止并记录下来。
- Permissive 模式:操作将被允许并记录下来,但不会阻止操作。这个模式常用于调试 SELinux 策略。
- Disabled 模式:不使用 SELinux。
查看 SELinux 状态
要查看 SELinux 当前的运行模式,可以使用以下命令:
sestatus
输出的结果类似于:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
其中,“Current mode” 行显示了当前 SELinux 的运行模式。
转换 SELinux 模式
要改变 SELinux 当前的运行模式,可以使用以下命令:
setenforce
- 要启用“Enforcing”模式,请运行
setenforce 1
- 要切换到“Permissive”模式,请运行
setenforce 0
- 要禁用 SELinux,请 ‘SELINUX=disabled’ 选项添加到 /etc/sysconfig/selinux 文件中。
例如,要将 SELinux 状态从 Enforcing 模式切换到 Permissive 模式,请运行以下命令:
setenforce 0
SELinux 示例
示例1:禁止 NetworkManager 访问 /etc/a.conf
在此示例中,我们将创建一个名为 “NetworkManager_block” 的 SELinux 策略模块,阻止 NetworkManager 访问 /etc/a.conf.
- 创建一个名为“NetworkManager_block”的文件夹:
mkdir NetworkManager_block
- 创建名为“NetworkManager_block.te”的 SELinux 策略模块文件,内容如下:
```
cat >NetworkManager_block.te <<EOF
module NetworkManager_block 1.0;
require {
type NetworkManager_t;
type etc_t;
class file { read getattr open };
}
#============= NetworkManager_t ==============
# Disallow read and open access to /etc/a.conf
deny NetworkManager_t etc_t:file { read getattr open };
EOF
```
- 使用以下命令将 SELinux 策略模块进行编译:
checkmodule -M -m -o NetworkManager_block.mod NetworkManager_block.te
- 使用以下命令生成一个基于 SELinux 策略模块的二进制模块:
semodule_package -o NetworkManager_block.pp -m NetworkManager_block.mod
- 使用以下命令安装 SELinux 模块:
semodule -i NetworkManager_block.pp
示例2:允许 Apache 服务器访问 /var/www/html
在此示例中,我们将创建一个名为“httpd_custom” 的 SELinux 策略模块,以允许 Apache 服务器访问 /var/www/html。
- 创建名为“httpd_custom_te”的 SELinux 策略模块文件,内容如下:
```
cat >httpd_custom_te <<EOF
module httpd_custom 1.0;
require {
type httpd_sys_content_t;
type httpd_t;
class file { read getattr open };
}
#============= httpd_t ==============
allow httpd_t httpd_sys_content_t:file { read getattr open };
EOF
```
- 使用以下命令将 SELinux 策略模块进行编译:
checkmodule -M -m -o httpd_custom.mod httpd_custom.te
- 使用以下命令生成一个基于 SELinux 策略模块的二进制模块:
semodule_package -o httpd_custom.pp -m httpd_custom.mod
- 使用以下命令安装 SELinux 模块:
semodule -i httpd_custom.pp
结论
SELinux 是一种可用于 Linux 系统的强大的访问控制机制。它使用安全上下文来实现策略,并根据这些策略限制对系统上的资源(如文件、目录、管道、进程和套接字)的访问。在使用 SELinux 过程中,需要根据需要启用、禁用或更改 SELinux 的运行模式,以适应特定的使用场景和业务需求。在创建 SELinux 策略模块时,请使用 SELinux 命令进行编译、生成二进制模块并执行安装。
以上是 SELinux 入门详解的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SELinux 入门详解 - Python技术站