安装 semanage 等管理工具
dnf install policycoreutils-python-utils
查看 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
恢复被服务商禁用的 SELinux
vim /etc/sysconfig/selinux SELINUX=enforcing # 要先保证能登录系统再启用,如果你改了 ssh 端口而新端口不被 selinux 允许那就不能远程进系统了
查看 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 并不会删除这个端口
为 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
查看整理过的 SELinux 日志
yum install setroubleshoot sealert -a /var/log/audit/audit.log > ~/selinux.log
查看安全上下文
ls -Z fileOrFolder # 查看文件的安全上下文 ps -eZ # 查看进程的安全上下文
查看 SELinux 的工作状态
sestatus getenforce # setenforce 1