控制端口 SELinux 上下文
端口 SELinux 上下文
#安装 SELinux 故障排查工具[root@server ~ 09:29:41]# yum install -y setroubleshoot-server-作用:安装后能自动分析 SELinux 导致的错误(比如 “为什么服务启动失败”),相当于给安保配备 “故障扫描仪”。#查看端口的 “默认通行证”[root@server ~ 09:40:37]# semanage port -l | grep http_port_thttp_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000pegasus_http_port_t tcp 5988-作用:http_port_t 是 httpd 服务的 “端口通行证”,默认包含 80(http)、443(https)等端口。-类比:查看小区规定 “哪些门只能快递员走”(80 号门、443 号门等)#给新端口发 “通行证”[root@server ~ 09:43:29]# semanage port -a -t http_port_t -p tcp 18020-作用:给 18020 端口贴上 http_port_t 标签,允许 httpd 服务使用这个端口。-实际案例:如果想让网站跑在 18020 端口(而不是默认的 80),必须先做这一步,否则 SELinux 会拦阻 httpd 访问 18020。[root@server ~ 09:44:14]# semanage port -l|grep 18020http_port_t tcp 18020, 80, 81, 443, 488, 8008, 8009, 8443, 9000#给端口换 “通行证”[root@server ~ 09:44:29]# semanage port -m -t ssh_port_t -p tcp 18020-作用:把 18020 端口的标签从 http_port_t 改成 ssh_port_t,现在这个端口只能给 ssh 服务用了。-类比:把 18020 号门的 “快递员通行证” 换成 “住户通行证”,现在只有住户能走。[root@server ~ 09:44:45]# semanage port -l |grep 18020ssh_port_t tcp 18020, 22#收回端口的 “通行证”[root@server ~ 09:45:05]# semanage port -d -t ssh_port_t -p tcp 18020-删除 18020 端口的 ssh_port_t 标签,这个端口不再属于任何服务的默认允许列表# 确认 18020 端口已正确贴上 http_port_t 标签[root@server ~ 09:45:21]# semanage port -l | grep 18020
#给 18020 端口添加 SELinux 标签,给 TCP 协议的 18020 端口添加 http_port_t 标签[root@server ~ 09:49:01]# semanage port -a -t http_port_t -p tcp 18020#重启 httpd 服务使配置生效[root@server ~ 09:50:25]# systemctl restart httpd#检查 httpd 服务状态中的关键信息,查看 httpd 服务状态中包含 “Per”(通常是 “Permission” 相关,即权限)的信息,确认是否有 SELinux 导致的权限错误。[root@server ~ 09:50:37]# systemctl status httpd.service |cat |grep Per#验证端口标签是否正确配置[root@server ~ 09:51:13]# semanage port -l | grep 18020http_port_t tcp 18020, 80, 81, 443, 488, 8008, 8009, 8443, 9000#查看自定义的端口标签[root@server ~ 09:51:19]# semanage port -lCSELinux 端口类型 协议 端口号http_port_t tcp 18020#修改 Apache 的配置文件,通常是在这里指定 httpd 服务监听 18020 端口(比如添加 Listen 18020 配置)[root@server ~ 09:46:12]# vim /etc/httpd/conf/httpd.conf [root@server ~ 09:48:16]# systemctl restart httpd# 测试 httpd 是否能在 18020 端口提供服务[root@server ~ 10:01:09]# curl http://server.lyk.cloud:18020/hello
控制 SELinux 布尔值
SELinux 布尔值
#查看 SELinux 布尔值状态(看看开关是开还是关)[root@server ~ 10:16:26]# getsebool -a |grep httpd_enable_homedirshttpd_enable_homedirs --> off-作用:getsebool -a 是 “查看所有安全开关”,| grep 关键词 是 “筛选出包含 httpd_enable_homedirs 的开关”。-结果 off 表示这个开关是 “关闭” 状态。-类比:物业查 “是否允许快递员进楼道” 的开关,结果是 “禁止”(off)。-实际意义:httpd_enable_homedirs 控制 “Apache 服务器(httpd)能否访问用户的家目录(/home/xxx)”,现在是禁止状态。#直接查看单个布尔值[root@server ~ 10:20:30]# getsebool httpd_enable_homedirshttpd_enable_homedirs --> off-作用:直接查看 httpd_enable_homedirs 这个开关的状态(更精准),结果还是 “关闭”。-类比:直接问物业 “快递员进楼道的开关是开还是关”,得到明确答复 “关”。# 临时打开开关[root@server ~ 10:21:29]# setsebool httpd_enable_homedirs=1-作用:1 表示 “打开” 开关,允许 httpd 访问用户家目录,但这是临时的(服务器重启后会自动变回 off)。-类比:临时允许快递员进楼道送大件,但第二天恢复禁止。-实际场景:测试网站时临时让 httpd 访问 /home/user/blog 目录,用完就关。#临时关闭开关[root@server ~ 10:21:59]# setsebool httpd_enable_homedirs=0-作用:0 表示 “关闭” 开关,重新禁止 httpd 访问用户家目录(临时生效)#先临时打开,再永久生效[root@server ~ 10:22:04]# setsebool httpd_enable_homedirs=1[root@server ~ 10:22:29]# setsebool -P httpd_enable_homedirs=1-作用:第一步临时打开开关,立即生效;第二步加 -P(Persistent,持久化),让这个状态永久保存(重启服务器也不会变)。-类比:先临时允许快递员进楼道,然后告诉物业 “以后一直允许”,长期生效。-实际场景:如果网站文件确实放在用户家目录(比如 /home/user/www),就需要永久打开这个开关,否则每次重启后网站都会无法访问。
semanage boolean 命令管理 SELinux 布尔值
#查看 semanage 命令用法[root@server ~ 10:22:37]# semanage boolean Usage: semanage boolean [-h] [-n] [-N] [-S STORE] [ --extract | --deleteall | --list -C | --modify ( --on | --off ) boolean ]#查看所有布尔值[root@server ~ 10:23:01]# semanage boolean -l# 查看自定义的布尔值(非系统默认)[root@server ~ 10:24:14]# semanage boolean -l -CSELinux 布尔值 状态 默认 描述httpd_enable_homedirs (开 , 开) Allow httpd to enable homedirs# 永久打开其他开关[root@server ~ 10:30:27]# semanage boolean -m --on use_nfs_home_dirs-作用:-m 是 “modify(修改)”,--on 是 “打开”;use_nfs_home_dirs 这个开关控制 “系统能否使用 NFS 共享的家目录”(比如多台电脑共用一个用户目录)。-实际场景:如果你的用户目录(/home)是通过网络共享(NFS)的,必须打开这个开关,否则登录时会提示 “找不到家目录”。#永久关闭开关[root@server ~ 10:31:44]# semanage boolean -m --off use_nfs_home_dirs作用:永久关闭 use_nfs_home_dirs 开关,禁止使用 NFS 共享的家目录#恢复所有自定义布尔值到默认状态[root@server ~ 10:24:48]# semanage boolean -D-作用:-D 是 “Delete all custom settings(删除所有自定义设置)”,把所有手动改过的开关都恢复到系统默认状态。-类比:小区所有手动修改的安全规则全部重置(比如之前允许快递进楼道,现在恢复禁止)