[内容] Linux 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 显示 /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 命令)

[内容] Postfix 数据的加密 (通过 TLS 实现)

内容一:Postfix 不使用 TLS 加密数据传输的后果

1) 收发的邮件数据会被他人截取
2) 给 Gmail 等电子邮箱发送邮件时,会提示类似 “ *** 未对此邮件进行加密” 的信息

内容二:给 Postfix 设置 TLS 加密数据传输的方法

2.1 给 Postfix 的配置文件设置 TLS 机密数据传输的参数

# vim /etc/postfix/main.cf

添加以下内容:

......
smtpd_tls_security_level = may
smtp_tls_security_level = may
......


补充:
smtpd_tls_security_level 代表接收邮件的 TLS 安全等级
smtp_tls_security_level 代表发送邮件的 TLS 安全等级
TLS 的常用安全等级有 none、may 和 encrypt :
1) none 表示禁止使用 TLS 加密
2) may 表示可以接收不使用 TLS 加密的邮件,但是会提出支持 TLS 加密的通告。发送邮件时优先发送支持 TLS 加密的邮件
3) encrypt 表示强制使用 TLS 加密

2.2 重启 Postfix 服务

# systemctl restart postfix

[内容] Linux 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

[工具] Shell 取消所有已开放的端口策略 (firewalld 版)

介绍

基本信息

作者:朱明宇
名称:取消所有已开放的端口策略
作用:取消所有已开放的端口策略

使用方法

1. 给此脚本添加执行权限
2. 执行此脚本

脚本

#!/bin/bash

systemctl start firewalld
systemctl enable firewalld

for i in `firewall-cmd --list-all | grep ports | egrep [0-9] | awk -F':' '{print $2}'`
do
        pports=`echo $i | awk -F'/' '{print $1}'`
        ptus=`echo $i | awk -F'/' '{print $2}'`

        firewall-cmd --remove-port=$pports/$ptus --permanent

done

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload