SELinux加固Linux安全2

控制端口 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_t
 http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
 pegasus_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 18020
 http_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 18020
 ssh_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 18020
 http_port_t                    tcp      18020, 80, 81, 443, 488, 8008, 8009, 8443, 9000
 ​
 #查看自定义的端口标签
 [root@server ~ 09:51:19]# semanage port -lC
 SELinux 端口类型                   协议       端口号
 ​
 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_homedirs
 httpd_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_homedirs
 httpd_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 -C
 SELinux 布尔值                    状态  默认 描述
 ​
 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(删除所有自定义设置)”,把所有手动改过的开关都恢复到系统默认状态。
 -类比:小区所有手动修改的安全规则全部重置(比如之前允许快递进楼道,现在恢复禁止)