其实很多人对 Linux 安全的理解,还停留在“防火墙+强密码”的层面。但真正的 Linux 安全,是从内核到用户层、从身份到资源的立体纵深防御体系。
一、先建立认知:Linux 安全的核心逻辑
Linux 安全的本质,是“最小权限原则”——任何用户、任何进程,都只拥有完成自身任务所需的最小权限。
整体安全体系如下:
身份认证 → 权限控制 → 资源隔离 → 内核防护 → 审计日志
二、Linux 八大核心安全机制
1. 用户与身份认证机制
账号体系:分为 root(超级用户,拥有所有权限)和普通用户(受限权限),日常运维严禁直接用 root 操作。
密码存储:用户密码加密存储在 /etc/shadow 文件中(而非 /etc/passwd),即使被读取,也无法直接破解(采用 SHA-512 加密)。
PAM 认证模块:可插拔认证模块,负责所有登录场景的验证(登录、su、sudo、ssh 等),灵活配置认证规则(比如禁止密码登录、限制登录IP)
2. DAC 自主访问控制(最基础的权限控制)
DAC(Discretionary Access Control),即自主访问控制,是 Linux 最基础的权限模型,核心是:谁创建文件/目录,谁就拥有控制权。
举个例子:chmod 755 file 表示:属主拥有读、写、执行权限,属组和其他用户只有读、执行权限(企业最常用的文件权限)。
3. ACL 访问控制列表(精细化权限控制)
ACL(Access Control List),即访问控制列表,专门解决 DAC 权限粗糙的问题,核心是:可以给任意用户、任意组,单独设置文件/目录的权限。
# 给用户user设置file文件的读写执行权限setfacl -m u:user:rwx file# 给组group设置file文件的只读权限setfacl -m g:group:r file# 查看文件的ACL权限getfacl file# 移除用户user的ACL权限setfacl -x u:user file# 清空文件所有ACL权限setfacl -b file
4. SUID / SGID / Sticky 特殊权限
这三个特殊权限,是 Linux 权限体系的“补充增强”,核心是“临时提升权限”或“限制操作范围”。
SUID:普通用户执行带有 SUID 权限的文件时,会临时拥有该文件所有者的权限(最典型的例子:passwd 命令,普通用户可执行,临时拥有 root 权限修改自己的密码)。 权限标识:文件权限前加s(如 -rwsr-xr-x)。
SGID:用户执行带有 SGID 权限的文件时,会临时拥有该文件所属组的权限;若设置在目录上,目录下新建的文件/目录会继承该目录的属组。 权限标识:属组权限前加 s(如 -rwxr-sr-x)。
Sticky:仅对目录有效,目录下的文件,只有文件所有者、root 才能删除,其他用户即使有写权限,也无法删除(最典型的例子:/tmp 目录)。 权限标识:其他用户权限前加 t(如 drwxrwxrwt)。
# 给文件添加SUID权限chmod u+s file# 给文件添加SGID权限chmod g+s file# 给目录添加Sticky权限chmod o+t dir
风险提示:SUID 权限不能随便给,若给恶意文件添加 SUID 权限,可能导致普通用户提权,入侵系统。
5. Capabilities 内核能力(现代 Linux 核心安全)
Capabilities(内核能力),是比 SUID 更安全、更精细的权限提升机制,核心是:不授予用户全部 root 权限,只授予完成任务所需的特定内核能力。
比如:普通用户需要执行 ping 命令(需要发送 ICMP 包,涉及内核网络权限),不需要给 ping 加 SUID 权限,只需授予 CAP_NET_RAW 能力即可。
# 查看文件的Capabilities权限getcap /usr/bin/ping# 给ping命令添加CAP_NET_RAW能力setcap cap_net_raw+ep /usr/bin/ping# 移除ping命令的Capabilities权限setcap -r /usr/bin/ping
常用内核能力:
CAP_NET_BIND_SERVICE:允许绑定小于 1024 的端口(如 80、443 端口)。
CAP_SYS_ADMIN:系统管理能力(类似 root 权限的子集)。
CAP_NET_RAW:允许使用原始网络套接字(如 ping、tcpdump)。
6. LSM Linux 安全模块(内核级强制防护)
LSM(Linux Security Modules),即 Linux 安全模块,是 Linux 内核级的强制防护机制,核心是:强制限制进程的操作范围,即使进程被入侵,也无法突破限制。
最典型的两个场景:
SELinux:RedHat 系系统(CentOS、RHEL)默认启用,基于 MAC(强制访问控制),给每个进程、每个文件分配“安全上下文”,只有匹配的上下文才能访问。 实操命令:getenforce(查看状态)、setenforce 0(临时关闭)、sestatus(查看详细状态)。
AppArmor:Debian 系系统(Ubuntu)默认启用,基于“配置文件”限制进程的访问范围,配置更简单,适合快速部署。
避坑点:很多新手遇到“权限足够但无法访问文件”的问题,大概率是 SELinux 拦截了,可临时关闭 SELinux 排查问题(生产环境不建议长期关闭,需配置 SELinux 规则)。
7. Namespace + Cgroup 隔离机制(容器时代必备)
Namespace 和 Cgroup,是容器(Docker、K8s)的底层安全基石,核心是:实现进程、资源的隔离,一个进程崩溃或被入侵,不影响整个系统。
8. 审计与日志机制(安全追溯)
安全防护不仅要“防入侵”,还要“可追溯”——谁在什么时候做了什么操作,全部记录在日志中,一旦发生安全事件,可快速排查原因、定位责任人。
auditd:系统审计服务,可记录文件访问、进程执行、权限变更等操作,精准追溯异常行为。
journalctl:系统日志管理工具,可查看所有系统服务、内核的日志(CentOS 7+ 默认启用)。
sudo 日志:记录所有使用 sudo 命令的操作(存储在 /var/log/secure),避免普通用户滥用权限。
last / lastlog:查看用户登录记录,排查异常登录。
# 查看sudo操作日志grep "sudo" /var/log/secure# 查看最近10条系统错误日志journalctl -e -n 10 -p err# 查看auditd审计日志ausearch -m SYSCALL -k test
留言互动:你在工作中,用过哪些 Linux 安全机制?遇到过哪些安全坑?评论区分享你的经验,一起交流学习~