当前位置: 首页 > news >正文

深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略

目录

一、引言

二、实验环境说明

三、实验 1:Nginx 服务安全上下文配置

3.1 实验目标

3.2 操作步骤

1. 开启 SELinux 并重启系统

2. 安装 Nginx 并创建自定义目录

3. 配置 Nginx 指向自定义目录

4. 分析 SELinux 上下文冲突

5. 修改上下文为合法类型

6. 验证配置

四、实验 2:Nginx 自定义端口的 SELinux 配置

4.1 实验目标

4.2 操作步骤

1. 修改 Nginx 监听端口

2. 查看 SELinux 允许的 HTTP 端口

3. 添加新端口到 HTTP 端口类型

4. 验证端口策略

五、实验 3:SSH 服务端口修改的 SELinux 配置

5.1 实验目标

5.2 操作步骤

1. 修改 SSH 配置文件

2. 查看 SSH 端口策略

3. 添加新端口到 SSH 端口类型

4. 验证并重启服务

六、SELinux 配置核心要点总结

6.1 安全上下文管理

6.2 端口策略管理

七、总结


一、引言

SELinux(Security-Enhanced Linux)作为 Linux 系统中重要的安全增强机制,通过强制访问控制(MAC)对系统资源的访问进行细粒度管控。本文将通过三个实际实验,演示如何在 SELinux 环境下配置 Nginx 服务的安全上下文、自定义端口以及 SSH 服务的端口修改,帮助读者掌握 SELinux 的核心配置方法。

二、实验环境说明

  • 系统版本:CentOS/RHEL 9
  • SELinux 模式:Enforcing(强制模式)
  • 服务:Nginx 1.16+、OpenSSH 7.4+

三、实验 1:Nginx 服务安全上下文配置

3.1 实验目标

解决 Nginx 访问自定义网页目录时因 SELinux 上下文不匹配导致的 403 权限问题。

3.2 操作步骤

1. 开启 SELinux 并重启系统
[root@server ~]# vim /etc/selinux/config# 修改SELINUX=enforcing[root@server ~]# reboot

 

2. 安装 Nginx 并创建自定义目录
[root@server ~]# yum install nginx -y[root@server ~]# mkdir -p /www/aa # 新建网页存储目录

 

#创建index.html文件并写入内容
[root@server ~]# vim /www/aa/index.html 

3. 配置 Nginx 指向自定义目录
vim /etc/nginx/nginx.conf# 修改server块中的root路径为/www/zysystemctl restart nginx

访问主机地址显示403,说明selinux对/www/zy的安全上下文件检测未通过

 

4. 分析 SELinux 上下文冲突
  • 查看默认网页目录上下文:
[root@server ~]# ls -Zd /usr/share/nginx/html/
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html/# 输出:system_u:object_r:httpd_sys_content_t:s0 (正确上下文)

  • 查看自定义目录上下文:
[root@server ~]# ls -Zd /www/aa
system_u:object_r:default_t:s0 /www/aa

5. 修改上下文为合法类型
  • 方法 1:直接指定类型
[root@server ~]# chcon -Rv -t httpd_sys_content_t /www/aa

  • 方法 2:参考现有目录(推荐)
[root@server ~]# chcon -R --reference=/usr/share/nginx/html/ /www/aa
6. 验证配置
[root@server ~]# ls -Zd /www/aa/
system_u:object_r:httpd_sys_content_t:s0 /www/aa/# 浏览器访问成功,403错误消失

四、实验 2:Nginx 自定义端口的 SELinux 配置

4.1 实验目标

允许 Nginx 监听非默认端口(如 7777),解决 SELinux 端口拦截问题。

4.2 操作步骤

1. 修改 Nginx 监听端口
[root@server ~]# vim /etc/nginx/nginx.conf# 在server块中添加:listen 7777;

[root@server ~]# systemctl restart nginx# 重启失败,SELinux拦截

2. 查看 SELinux 允许的 HTTP 端口
[root@server ~]# semanage  port -l  |  grep  http_port_t# 输出:http_port_t tcp 80,81,443,...9000 (默认允许端口列表)

3. 添加新端口到 HTTP 端口类型
[root@server ~]# semanage port -a -t http_port_t -p tcp 7777# -a:添加端口;-t:指定类型;-p:协议+端口
4. 验证端口策略
[root@server ~]# semanage port -l | grep http_port_t# 确认7777已加入列表

[root@server ~]# systemctl restart nginx # 成功启动

# 浏览器访问http://192.168.2.131:7777 验证

 

五、实验 3:SSH 服务端口修改的 SELinux 配置

5.1 实验目标

将 SSH 默认端口 22 修改为 2222,并解决 SELinux 策略限制。

5.2 操作步骤

1. 修改 SSH 配置文件
[root@server ~]# vim /etc/ssh/sshd_config# 修改Port 2222

systemctl restart sshd

[root@server ~]# systemctl restart sshd# 重启失败,SELinux拦截

2. 查看 SSH 端口策略
[root@server ~]# semanage port -l | grep ssh_port_t# 输出:ssh_port_t tcp 22 (默认仅允许22端口)

3. 添加新端口到 SSH 端口类型
[root@server ~]# semanage port -a -t ssh_port_t -p tcp 2222
4. 验证并重启服务
[root@server ~]# semanage port -l | grep ssh_port_t# 确认2222已加入列表

 

systemctl restart sshd # 成功启动

[root@server ~]# systemctl restart sshd

# 使用ssh客户端连接IP:2222 验证

六、SELinux 配置核心要点总结

6.1 安全上下文管理

  • chcon 命令:临时修改文件 / 目录的安全上下文,重启后可能失效。
    • -t:指定类型(如 httpd_sys_content_t)。
    • --reference:通过参考现有文件快速复制上下文。
  • 永久生效:使用semanage fcontext结合restorecon,例如:

semanage fcontext -a -t httpd_sys_content_t '/www/zy(/.*)?'

restorecon -Rv /www/zy

6.2 端口策略管理

  • semanage port:永久修改端口策略,需明确端口类型(如 http_port_t、ssh_port_t)。
  • 常见服务端口类型
    • HTTP:http_port_t
    • HTTPS:https_port_t
    • SSH:ssh_port_t
    • MySQL:mysql_port_t

七、总结

通过以上实验可见,SELinux 通过安全上下文和端口策略实现了对服务的细粒度控制。在生产环境中,应避免直接关闭 SELinux(设置为 permissive 或 disabled),而是通过chcon、semanage等工具合理配置策略,在保障安全性的前提下满足自定义需求。熟练掌握 SELinux 配置,是 Linux 系统管理员进阶的重要技能。

参考资料

  • SELinux 官方文档
  • man chcon、man semanage

相关文章:

  • 动态规划-931.下降路径最小和-力扣(LeetCode)
  • 高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例
  • 制造企业生产数据分析全解析:5大类数据定义、分析方法与落地指南
  • 阿里通义实验室突破空间音频新纪元!OmniAudio让360°全景视频“声”临其境
  • 制造企业搭建AI智能生产线怎么部署?
  • C++:栈帧、命名空间、引用
  • 人工智能浪潮下,制造企业如何借力DeepSeek实现数字化转型?
  • 学习黑客小故事理解 Metasploit 的 Meterpreter
  • 酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法
  • NUMA 架构科普:双路 CPU 系统是如何构建的?
  • 如何给老旧 iOS App 添加安全保护?用 Ipa Guard 对 IPA 文件混淆加固实录
  • ComfyUI+阿里Wan2.1+内网穿透技术:本地AI视频生成系统搭建实战
  • WebVm:无需安装,一款可以在浏览器运行的 Linux 来了
  • 本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt
  • SpringBoot(五)--- 异常处理、JWT令牌、拦截技术
  • json转成yolo用的txt(json中没有宽高,需要自设宽高的)
  • VMware ESXi网络配置
  • Learning Discriminative Data Fitting Functions for Blind Image Deblurring论文阅读
  • dto vo类为什么要序列化?
  • 跨架构镜像打包问题及解决方案
  • 杭州企业做网站/关键词排名怎么做上去
  • 哪家网站遴选做的比较好/百度最新版本2022
  • 外贸公司年终总结/seo咨询师
  • 网站建设协议/seo综合查询 站长工具
  • 高端网站开发平台/优化建站seo门户
  • 冬青街 做网站/沧州网站运营公司