温馨提示×

如何学习ubuntu selinux

小樊
40
2026-09-16 13:01:07
栏目: 智能运维

学习 Ubuntu 下的 SELinux 需要明确一点:Ubuntu 默认使用的是 AppArmor,而不是 SELinux。SELinux 主要出现在 RHEL / CentOS / Fedora 等系统上。不过,Ubuntu 也可以安装和启用 SELinux,只是配置方式略有不同。

下面我给你一个从入门到可实操的学习路线


一、先搞清楚:SELinux 是什么?

SELinux(Security-Enhanced Linux) 是 Linux 的**强制访问控制(MAC)**机制。

核心概念:

  • 主体(Subject):进程
  • 对象(Object):文件、端口、设备等
  • 策略(Policy):规定“谁可以访问什么”
  • 三种模式
    • Enforcing:强制执行
    • Permissive:只记录不阻止
    • Disabled:关闭

二、Ubuntu 上使用 SELinux 的准备

1. 确认 Ubuntu 当前安全模块

cat /sys/kernel/security/lsm

默认通常看到:

lockdown,yama,apparmor

2. 安装 SELinux

sudo apt update
sudo apt install selinux selinux-utils policycoreutils

3. 切换启动参数(重要)

编辑 GRUB:

sudo nano /etc/default/grub

GRUB_CMDLINE_LINUX 中添加:

security=selinux selinux=1

更新 GRUB:

sudo update-grub

重启:

sudo reboot

三、基础命令学习(必会)

查看 SELinux 状态

sestatus

查看当前模式

getenforce

临时切换模式

sudo setenforce 0   # Permissive
sudo setenforce 1   # En enforcing

四、核心配置文件

SELinux 主配置

/etc/selinux/config

示例:

SELINUX=enforcing
SELINUXTYPE=default

五、策略与上下文(最关键)

查看文件安全上下文

ls -Z
ps -Z

修改文件上下文

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"
sudo restorecon -Rv /var/www

常用工具

  • semanage:策略管理
  • restorecon:恢复上下文
  • setsebool:布尔开关
  • ausearch / sealert:日志分析

六、日志与排错(非常重要)

查看拒绝日志

sudo ausearch -m avc -ts recent

使用 sealert

sudo apt install setroubleshoot
sealert -a /var/log/audit/audit.log

自动生成策略模块(学习神器)

sudo audit2allow -a

七、推荐学习路径(实战顺序)

  1. 先在 Permissive 模式练习
  2. 部署一个服务(如 Nginx)
  3. 故意制造拒绝(改端口、目录)
  4. ausearch + sealert 分析
  5. 手动写策略或 audit2allow

八、学习资源推荐

官方文档

  • Red Hat SELinux Guide(最权威) https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/using_selinux/

书籍

  • 《SELinux by Example》
  • 《Linux 系统安全:SELinux 实战》

视频

  • RHCSA / RHCE 中的 SELinux 章节

九、重要提醒(Ubuntu 用户必看)

✅ Ubuntu 可以学 SELinux
❌ 但不如 CentOS/Fedora 顺滑
✅ 如果你是为了 面试 / 运维 / 红帽认证,建议直接用 CentOS Stream 或 Fedora


如果你愿意,我可以:

  • 给你一套 SELinux 实验清单
  • 或针对 Ubuntu + Nginx / Docker / K8s 讲具体配置
  • 或对比 AppArmor vs SELinux

你更想从哪一块开始?

0