首页 » 操作系统 » Linux » 正文

SELinux 常用命令收集 10+

发布者:站点默认
2020/07/14 浏览数(1,471) 分类:Linux, 数据安全 SELinux 常用命令收集 10+已关闭评论

把文件的权限改为“与其它文件相同”

chcon -v system_u:object_r:systemd_unit_file_t:s0 xxx.service

安装 semanage 等管理工具

dnf install policycoreutils-python-utils. # CentOS 8
yum install policycoreutils-python        # CentOS 7

查看 SELinux 的工作状态

sestatus
getenforce
setenforce 0 # 临时禁用(重启自动恢复)

恢复被服务商禁用的 SELinux

vim /etc/sysconfig/selinux
SELINUX=enforcing
# 要先使用 `setenforce 1` 保证能通过 ssh 登录系统再重启以启用配置;
# 如果重启了而「更改的新 ssh 端口不被 selinux 允许」那就不能远程进系统了(默认的 21 通常已被 SELinux 允许);

查看 sshd 使用的端口

semanage port -l | grep ssh
# ssh_port_t    tcp    2222, 22

为 sshd 添加一个 2222 端口

semanage port -a -t ssh_port_t -p tcp 2222
# 如需删除把 -a 换成 -d 。如果端口已经分配到其它地方,可以把 -a 换成 -m

查看最近的 AVC 拒绝日志(有无被阻止)

ausearch -m avc -ts recent

为 Web 项目配置权限

执行这2行后即使你不懂 SELinux 也不用关闭 SELinux 了,如果是 Tomcat 把 httpd_sys_content_t 换成 tomcat_var_lib_t

# 假设 Web 项目在 /data/web/ 中
semanage fcontext -a -t httpd_sys_content_t '/data/web(/.*)?'
restorecon -RvvF /data/web
# 如果不是 httpd_sys_content_t 可通过 ls -lZ /usr/share/nginx/html 查找
# 查看(确认)目录的 SELinux 权限用下边这行:
semanage fcontext -l | grep /data/web

# 启用 file_get_contents('https://...') 功能
setsebool -P httpd_can_network_connect on

# 其它
sestatus -b | grep httpd_can_network_connect
sestatus -b | grep httpd_unified
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_unified 1

为 MySQL 配置权限

# 假设 mysql 的 datadir=/data/mysql
semanage fcontext -a -t mysqld_db_t '/data/mysql(/.*)?'
restorecon -RvvF /data/mysql
# 如果不是 mysqld_db_t 可通过 ls -lZ /var/lib/mysql 查找

变更权限

# 临时:
chcon -t tomcat_var_lib_t -R /data

# 永久为(下边两条):
semanage fcontext -a -t tomcat_var_lib_t "/data(/.*)?"
restorecon -Rv /data/

查看 7100 端口的用途

semanage port -l | grep 7100
# xfs_port_t    tcp    7100

把 7100 端口也给 shhd 用

semanage port -m -t ssh_port_t -p tcp 7100
# $ semanage port -l | grep 7100
# ssh_port_t    tcp    7100, 2222, 22
# xfs_port_t    tcp    7100
# 原来使用 7100 的 _t 并不会删除这个端口

查看整理过的 SELinux 日志

yum install setroubleshoot
sealert -a /var/log/audit/audit.log > ~/selinux.log

查看安全上下文

ls -Z fileOrFolder # 查看文件的安全上下文
ps -eZ             # 查看进程的安全上下文

根据日志生成例外规则

audit2allow -a -c systemd-sysctl -M systemd_sysctl_cap # 仅提取 systemd-sysctl 相关的审计日志生成规则
semodule -i systemd_sysctl_cap.pp                      # 加载模块(永久生效)

# .te 纯文本策略源码(由 audit2allow 生成) --> .mod 中间字节码 --> .pp 策略包,可加载的模块
checkmodule -M -m -o systemd_sysctl_cap.mod systemd_sysctl_cap.te
semodule_package -o systemd_sysctl_cap.pp -m systemd_sysctl_cap.mod

解决装了宝塔面板后 SELinux 无法 enforcing 的问题

用 # 注释掉以下文件中的 setenforce 0,每个文件都只有1处:

/www/server/panel/class/firewalls.py          public.ExecShell('setenforce 0')
/www/server/panel/class/firewall_new.py       public.ExecShell('setenforce 0');
/www/server/panel/class/safeModel/sshModel.py public.ExecShell('setenforce 0')
/usr/lib/systemd/system/monitor.service       ExecStartPre=-/usr/sbin/setenforce 0
# monitor.service --> Baota Site Monitor Service

# 最后:删除编译后的 pyc 文件(避免面板加载旧缓存)
rm -f /www/server/panel/class/__pycache__/firewalls.cpython-37.pyc

排查开机就想关 SELinux 的脚本

# 1. 检查 rc.local(系统启动最后执行的脚本)
cat /etc/rc.d/rc.local | grep -i "setenforce"
grep -r "setenforce 0" /etc/rc.d/ /etc/init.d/  # 搜索所有启动脚本

# 2. 检查面板启动脚本(以宝塔为例)
grep -r "setenforce 0" /www/server/panel/ /etc/init.d/bt  # 宝塔相关脚本
grep -r "setenforce 0" /usr/lib/systemd/system/  # 系统服务单元文件

# 3. 检查 cron 启动任务(罕见,但可能存在)
crontab -l | grep -i "setenforce"
grep -r "setenforce 0" /etc/cron.d/ /etc/cron.hourly/

# 4. auditd 是 SELinux 日志审计服务,若启动失败,可能导致 SELinux 模式加载异常
systemctl status auditd

若找不到原因,创建 SELinux 模式锁定文件强制系统启动时使用 enforcing 模式(该文件会让 SELinux 无视 setenforce 的临时切换优先使用配置的强制模式):

# 1. 锁定 SELinux 为 enforcing 模式(创建模式文件)
echo "enforcing" > /etc/selinux/enforce

# 2. 确保文件权限正确
chmod 644 /etc/selinux/enforce
chown root:root /etc/selinux/enforce

# 3. 验证文件内容
cat /etc/selinux/enforce  # 输出 enforcing

重置 SELinux 到初始状态

# 1. 重新安装 SELinux 核心组件
yum reinstall -y selinux-policy selinux-policy-targeted policycoreutils openssh-server

# 2. 重置 SELinux 上下文和策略
fixfiles -F relabel  # 重新标记所有文件(耗时很长)

# 3. 重启
reboot
点击返回顶部
  1. 留言
  2. 联系方式