查看 SELinux 的工作状态
sestatus getenforce setenforce 0 # 临时禁用(重启自动恢复)
恢复被服务商禁用的 SELinux
vim /etc/sysconfig/selinux SELINUX=enforcing # 要先使用 `setenforce 1` 保证能通过 ssh 登录系统再重启以启用配置; # 如果重启了而「更改的新 ssh 端口不被 selinux 允许」那就不能远程进系统了(默认的 21 通常已被 SELinux 允许);
安装 semanage 等管理工具
dnf install policycoreutils-python-utils
为 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
查看 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
查看 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 # 查看进程的安全上下文