selinux是linux内核级强制访问控制(mac)机制,通过安全上下文标签(如system_u:object_r:shadow_t:s0)严格限制进程操作,即使root进程也无法越权访问;需启用enforcing模式、正确标记文件类型、结合acl与auditd实现权限闭环审计。

对系统配置文件实施强制访问控制(MAC),不是简单改 chmod 就完事,而是要让内核层策略真正管住进程——哪怕它以 root 身份运行,也不能越界读写关键文件。
用 SELinux 标签锁定敏感路径
SELinux 是最成熟、生产环境验证过的强制访问控制机制。核心是给文件打上类型标签,并限制哪些进程域能操作它:
- 先确认已启用:
getenforce输出应为 Enforcing;若为 Disabled,需在/etc/selinux/config中设SELINUX=enforcing并重启 - 查看当前标签:
ls -Z /etc/shadow,正常应为system_u:object_r:shadow_t:s0 - 若标签缺失或错误,用
semanage fcontext -a -t shadow_t "/etc/shadow"定义,再执行restorecon -v /etc/shadow生效 - 对自定义配置目录(如
/opt/app/conf),建议标记为etc_t或专用类型(如app_conf_t),避免被 web 进程误读
ACL + 基础权限:补足 DAC 层的精细缺口
标准权限(ugo)太粗,ACL 可单点授权,适合临时或特定用户场景:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 确保文件系统挂载时启用 acl:检查
mount | grep $(df / | tail -1 | awk '{print $1}')是否含acl;若无,在/etc/fstab对应行加acl后sudo mount -o remount / - 只允许运维人员读取日志配置:
sudo setfacl -m u:ops:r /etc/rsyslog.conf - 彻底拒绝某测试账户访问 SSH 私钥:
sudo setfacl -m u:test:--- /etc/ssh/ssh_host_rsa_key - 权限优先级:ACL > 组权限 > 其他权限,但不覆盖 SELinux 策略——两者叠加才真正闭环
auditd 实时盯防,把“谁动了什么”记下来
权限是门锁,auditd 是摄像头。没有审计,加固等于盲操作:
- 监控关键路径变更:
-w /etc/shadow -p wa -k shadow_access写入/etc/audit/rules.d/privileged.rules - 记录所有对
/etc/passwd的修改:-w /etc/passwd -p wa -k passwd_mod - 重启 auditd:
sudo systemctl restart auditd,之后用ausearch -k shadow_access查日志 - 配合定时脚本每日校验哈希:
sha256sum /etc/shadow /etc/passwd > /var/log/config-hash-$(date +%F)
sudoers 白名单:让高危操作可追溯、可约束
不禁止编辑,而是限定谁能用什么命令编辑哪些文件:
- 禁用通配符提权:
ALL=(ALL) NOPASSWD: ALL必须删除 - 按需开放最小能力:
deployer ALL=(root) /bin/bash -c "echo 'restarting' && /usr/bin/systemctl restart nginx" - 限制编辑配置文件:
admin ALL=(root) /usr/bin/vi /etc/nginx/*.conf, /usr/bin/nano /etc/nginx/*.conf - 所有 sudo 操作自动记录到
/var/log/secure,配合 auditd 形成双日志源










