[步骤] SELinux 的启用 (openSUSE & SLE 版) (不建议)

软件准备:

在 SELinuxProject 的官网上下载 SELinux 策略 UseRefpolicy:

https://github.com/SELinuxProject/refpolicy/wiki/UseRefpolicy

注意:

1) 如果使用此文的方法将 openSUSE & SLE 的 SELinux 设置为 Enforcing 则系统将无法设置 IP 地址
2) 如果使用此文的方法开启了 SELinux 并且将所有的布尔(boolean)值开启,则系统将无法关机,开启所有布尔值的方法:# for i in semanage boolean -l | awk '{print $1}'; do echo $i;setsebool -P $i 1; done

正文:

步骤目录:

步骤一:安装 SELinux 组件

步骤二:安装 SELinux 策略
2.1 解压包含 SELinux 策略的压缩包
2.2 将 SELinux 策略移动到 SELinux 配置文件的位置
2.3 进入到和 SELinux 策略相同目录下
2.4 显示 SELinux 策略的安装手册
2.5 创建 SELinux 策略的配置文件
2.6 创建 SELinux 策略
2.7 编译 SELinux 策略
2.8 安装 SELinux 策略

步骤三:配置 SELinux 配置文件
3.1 在 SELinux 配置文件中将 SELinux 设置为 Permissive 状态
3.2 在系统内核中禁止使用 AppArmor 使用 SELinux 并且将 SELinux 状态设置为 Permissive
3.2.1 设置 grub 文件
3.2.2 让刚刚设置的 grub 文件生效
3.3 刷新系统内所有文件的标签

步骤四:重启系统让 SELinux 生效

具体的操作步骤:

步骤一:安装 SELinux 组件

# zypper in libselinux1 libsemanage1 libsepol-devel libsepol1 libselinux-devel mcstrans libselinux1-32bit policycoreutils checkpolicy libsemanage-devel setools-tcl setools-libs setools-java setools-devel setools-console selinux-tools python3-policycoreutils python3-selinux python3-semanage python3-setools restorecond

步骤二:安装 SELinux 策略
2.1 解压包含 SELinux 策略的压缩包

# tar -xvf refpolicy-2.20210203.tar.bz2

(补充:这里以解压 refpolicy-2.20210203.tar.bz2 压缩包为例)

2.2 将 SELinux 策略移动到 SELinux 配置文件的位置

# mv refpolicy /etc/selinux/

2.3 进入到和 SELinux 策略相同目录下

# cd /etc/selinux/refpolicy/

2.4 显示 SELinux 策略的安装手册

# cat INSTALL

2.5 创建 SELinux 策略的配置文件

# make conf

2.6 创建 SELinux 策略

# make policy

2.7 编译 SELinux 策略

# make install

2.8 安装 SELinux 策略

# make load

步骤三:配置 SELinux 配置文件
3.1 在 SELinux 配置文件中将 SELinux 设置为 Permissive 状态

# vim /etc/selinux/config

创建以下内容:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=refpolicy

3.2 在系统内核中禁止使用 AppArmor 使用 SELinux 并且将 SELinux 状态设置为 Permissive
3.2.1 设置 grub 文件

# vim /etc/default/grub

在这一行里:

GRUB_CMDLINE_LINUX_DEFAULT="......"
添加以下内容:
GRUB_CMDLINE_LINUX_DEFAULT="...... security=selinux selinux=1 enforcing=0"

3.2.2 让刚刚设置的 grub 文件生效

# grub2-mkconfig -o /boot/grub2/grub.cfg

3.3 刷新系统内所有文件的标签

# restorecon -Rp /

步骤四:重启系统让 SELinux 生效

# reboot

参考文献:

https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-selinux.html

[内容] Linux SELinux 状态的设置

内容目录:

内容一:SELinux 的状态

内容二:永久切换 SELinux 状态
2.1 将 SELinux 永久切换至 Disabled 状态
2.1.1 修改 SELinux 配置文件
2.1.2 重启系统
2.1.3 显示 SELinux 状态
2.2 将 SELinux 永久切换至 Permissive 状态
2.2.1 修改 SELinux 配置文件
2.2.2 重启系统
2.2.3 显示 SELinux 状态
2.3 将 SELinux 永久切换至 Enforcing 状态
2.3.1 修改 SELinux 配置文件
2.3.2 重启系统
2.3.3 显示 SELinux 状态

内容三:临时切换 SELinux 状态
3.1 临时切换到 Permissive 状态
3.1.1 临时切换到 Permissive 状态
3.1.2 显示 SELinux 状态
3.2 临时切换到 Enforcing 状态
3.2.1 临时切换到 Enforcing 状态
3.2.2 显示 SELinux 状态

具体的内容:

内容一:SELinux 的状态

1) Disabled:完全关闭 SELinux
2) Permissive:即使违反了策略也依旧可以执行,但是违反策略的记录会被记录在日志中
3) Enforcing:如果违反了策略就不能之行

内容二:永久切换 SELinux 状态
2.1 将 SELinux 永久切换至 Disabled 状态
2.1.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=......
......

修改为:

......
SELINUX=disabled
......

2.1.2 重启系统

# reboot

2.1.3 显示 SELinux 状态

# getenforce 
Disabled

2.2 将 SELinux 永久切换至 Permissive 状态
2.2.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=......
......

修改为:

......
SELINUX=permissive
......

2.2.2 重启系统

# reboot

2.2.3 显示 SELinux 状态

# getenforce 
Permissive

2.3 将 SELinux 永久切换至 Enforcing 状态
2.3.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=......
......

修改为:

......
SELINUX=enforcing
......

2.3.2 重启系统

# reboot

2.3.3 显示 SELinux 状态

# getenforce 
Enforcing

内容三:临时切换 SELinux 状态
3.1 临时切换到 Permissive 状态
3.1.1 临时切换到 Permissive 状态

# setenfoce 0


注意:
1) 系统重启后失效
2) 只能从 Enforcing 状态切换到 Permissive 状态

3.1.2 显示 SELinux 状态

# getenforce 
Permissive

3.2 临时切换到 Enforcing 状态
3.2.1 临时切换到 Enforcing 状态

# setenfoce 1


注意:
1) 系统重启后失效
2) 只能从 Permissive 状态切换到 Enforcing 状态

3.2.2 显示 SELinux 状态

# getenforce 
Enforcing

[内容] Linux SELinux 标签的设置

内容目录:

内容一:开启 SELinux 标签
1.1 修改 SELinux 配置文件
1.2 重启系统

内容二:SELinux 的常见特性
2.1 SELinux 特性一:创建的文件或目录会自动继承其父目录的 SELinux 标签
2.1.1 在 /var/www/html/ 目录下新创建 index.html 文件
2.1.2 显示 /var/www/html/ 目录的 SELinux 标签
2.1.3 显示新生成的 /var/www/html/index.html 标签
2.2 SELinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 SELinux 标签,普通复制会改变 SELinux 标签
2.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件
2.2.2 显示 ls -Zd /tmp/ 目录的 SELinux 标签
2.2.3 显示新创建文件的标签
2.2.4 将 /tmp/file1 复制到 /var/www/html/
2.2.5 将 /tmp/file2 移动到 /var/www/html/
2.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性
2.2.7 显示这些文件的 SELinux 标签

内容三:显示某个文件或目录 SELinux 标签
3.1 显示某个文件 SELinux 标签
3.2 显示某个目录 SELinux 标签
3.3 显示某个进程 SELinux 标签

内容四:显示所有 SELinux 标签
4.1 显示所有文件和目录的 SELinux 标签
4.2 显示所有端口的 SELinux 标签
4.3 显示所有进程的 SELinux 标签

内容五:设置 SELinux 标签
5.1 设置文件和目录 SELinux 标签
5.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.1 semanage fcontext 命令的常用选项
5.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.2.1 使用 smanage fcontext 命令设置 SELinux 标签
5.1.1.2.2 使用 restorecon 命令修改默认上下文
5.1.2 使用 chcon 命令设置 SELinux 标签
5.2 设置端口 SELinux

具体的内容:

内容一:开启 SELinux 标签
1.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=disabled
......

修改为:

......
SELINUX=enforcing
......

或者:

......
SELINUX=perssive
......

1.2 重启系统

# reboot

内容二:SELinux 的常见特性
2.1 SELinux 特性一:创建的文件或目录会自动继承其父目录的 SELinux 标签
2.1.1 在 /var/www/html/ 目录下新创建 index.html 文件

# echo website > /var/www/html/index.html

(补充:这里以在 /var/www/html/ 目录下生成 index.html 文件为例)

2.1.2 显示 /var/www/html/ 目录的 SELinux 标签

# ls -dZ /var/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

2.1.3 显示新生成的 /var/www/html/index.html 标签

# ls -Z /var/www/html/index.html/index.html 
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

(补充:从内容 1.1.2 和内容 1.1.3 命令的结果可以看出新生成的文件或其父目录的 SELinux 标签一致)

2.2 SELinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 SELinux 标签,普通复制会改变 SELinux 标签
2.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件

# touch /tmp/file{1,2,3}

2.2.2 显示 ls -Zd /tmp/ 目录的 selinux 标签

# ls -Zd /tmp/
unconfined_u:object_r:user_tmp_t:s0 /tmp/

2.2.3 显示新创建文件的标签

# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1  unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
unconfined_u:object_r:user_tmp_t:s0 /tmp/file3

2.2.4 将 /tmp/file1 复制到 /var/www/html/

# cp /tmp/file1 /var/www/html/

2.2.5 将 /tmp/file2 移动到 /var/www/html/

# mv /tmp/file2 /var/www/html/

2.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性

# cp -a /tmp/file3 /var/www/html/

2.2.7 显示这些文件的 SELinux 标签

# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 file1           unconfined_u:object_r:user_tmp_t:s0 file3
unconfined_u:object_r:user_tmp_t:s0 file2

(补充:从内容 2.2.3 和内容 2.2.7 命令的结果可以看出只有普通复制会改变 SELinux 标签 )

内容三:显示某个文件、目录或进程 SELinux 标签
3.1 显示某个文件 SELinux 标签

# ls -Z <file>

3.2 显示某个目录 SELinux 标签

# ls -Zd <directory>

3.3 显示某个进程 SELinux 标签

# ps -auxZ | grep <process>

内容四:显示所有 SELinux 标签
4.1 显示所有文件和目录的 SELinux 标签

# semanage fcontext -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.2 显示所有端口的 SELinux 标签

# semanage port -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.3 显示所有进程的 SELinux 标签

# ps -auxZ

内容五:设置 SELinux 标签
5.1 设置文件和目录 SELinux 标签
5.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.1 semanage fcontext 命令的常用选项

1) -a 添加或变更 SELinux 标签
2) -d 删除 SELinux 标签
3) -l 显示所有的 SELinux 标签
4) -t 指定上下文 SELinux 标签
5) -v 显示修改 SELinux 标签的内容
6) -R 递归设置 SELinux 标签
7) -m 变更 SELinux 标签

5.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.2.1 使用 smanage fcontext 命令设置 SELinux 标签

# semanage fcontext -a -t httpd_sys_content_t "/tmp(/.*)?"

(补充:这里以将 /tmp(/.*) 的 SELinux 标签设置为 httpd_sys_content_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

5.1.1.2.2 使用 restorecon 命令修改默认上下文

# restorecon -Rv /tmp
Relabeled /tmp from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0

5.1.2 使用 chcon 命令设置 SELinux 标签

# chcon -t httpd_sys_content_t /tmp/*

(补充:这里以将 /tmp/* 的 SELinux 标签设置为 httpd_sys_content_t 为例)

5.2 设置端口 SELinux

# semanage port -a -t http_port_t -p tcp 82

(补充:这里以将 TCP 82 端口的 SELinux 标签设置为 http_port_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

[内容] Linux SELinux 布尔 (boolean) 值的设置

内容目录:

内容一:开启 SELinux 布尔(boolean)值
1.1 显示当前 SELinux 状态
1.2 将 SELinux 的状态设置为 Enforcing 以开启布尔(boolean)值
1.2.1 当当前 SELinux 的状态为 Disabled 时开启布尔(boolean)值的方法
1.2.1.1 修改 SELinux 配置文件
1.2.1.2 重启系统
1.2.2 当当前 SELinux 的状态为 Perssive 时开启布尔(boolean)值的方法

内容二:显示所有 SELinux 布尔(boolean)值

内容三:布尔(boolean)值的管理
3.1 允许某一个 SELinux 布尔(boolean)值开启
3.1.1 临时允许某一个 SELinux 布尔(boolean)值开启
3.1.1.1 临时允许某一个 SELinux 布尔(boolean)值开启的格式
3.1.1.2 临时允许某一个 SELinux 布尔(boolean)值开启的案例
3.1.2 永久允许某一个 SELinux 布尔(boolean)值开启
3.1.2.1 永久允许某一个 SELinux 布尔(boolean)值开启的格式
3.1.2.2 永久允许某一个 SELinux 布尔(boolean)值开启的案例
3.2 取消某一个 SELinux 布尔(boolean)值开启
3.2.1 临时取消某一个 SELinux 布尔(boolean)值开启
3.2.1.1 临时取消某一个 SELinux 布尔(boolean)值开启的格式
3.2.1.2 临时取消某一个 SELinux 布尔(boolean)值开启的案例
3.2.2 永久取消某一个 SELinux 布尔(boolean)值关闭
3.2.2.1 永久取消某一个 SELinux 布尔(boolean)值开启的格式
3.2.2.2 永久取消某一个 SELinux 布尔(boolean)值开启的案例

具体的操作步骤:

内容一:开启 SELinux 布尔(boolean)值
1.1 显示当前 SELinux 状态

# getenforce

1.2 将 SELinux 的状态设置为 Enforcing 以开启布尔(boolean)值
1.2.1 当当前 SELinux 的状态为 Disabled 时开启布尔(boolean)值的方法
1.2.1.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=disabled
......

修改为:

......
SELINUX=enforcing
......

1.2.1.2 重启系统

# reboot

1.2.2 当当前 SELinux 的状态为 Perssive 时开启布尔(boolean)值的方法

# setenfoce 1

(补充:系统重启后失效)

内容二:显示所有 SELinux 布尔(boolean)值

# semanage boolean -l

内容三:布尔(boolean)值的管理
3.1 允许某一个 SELinux 布尔(boolean)值开启
3.1.1 临时允许某一个 SELinux 布尔(boolean)值开启
3.1.1.1 临时允许某一个 SELinux 布尔(boolean)值开启的格式

# setsebool <boolean value> 1

或者:

# setsebool <boolean value> on

3.1.1.2 临时允许某一个 SELinux 布尔(boolean)值开启的案例

# setsebool httpd_can_network_connect 1

或者:

# setsebool httpd_can_network_connect on

3.1.2 永久允许某一个 SELinux 布尔(boolean)值开启
3.1.2.1 永久允许某一个 SELinux 布尔(boolean)值开启的格式

# setsebool -P <boolean value> 1

或者:

# setsebool -P <boolean value> on

3.1.2.2 永久允许某一个 SELinux 布尔(boolean)值开启的案例

# setsebool -P httpd_can_network_connect 1

或者:

# setsebool -P httpd_can_network_connect on

3.2 取消某一个 SELinux 布尔(boolean)值开启
3.2.1 临时取消某一个 SELinux 布尔(boolean)值开启
3.2.1.1 临时取消某一个 SELinux 布尔(boolean)值开启的格式

# setsebool <boolean value> 0

或者:

# setsebool <boolean value> off

3.2.1.2 临时取消某一个 SELinux 布尔(boolean)值开启的案例

# setsebool httpd_can_network_connect 0

或者:

# setsebool httpd_can_network_connect off

3.2.2 永久取消某一个 SELinux 布尔(boolean)值关闭
3.2.2.1 永久取消某一个 SELinux 布尔(boolean)值开启的格式

# setsebool -P <boolean value> 0

或者:

# setsebool -P <boolean value> off

3.2.2.2 永久取消某一个 SELinux 布尔(boolean)值开启的案例

# setsebool -P httpd_can_network_connect 0

或者:

# setsebool -P httpd_can_network_connect off