Linux 安全加密与审计命令速查
更新时间:2026-08-28。本文是 Linux 命令速查主题第⑪族:安全加密与审计,约 26 个命令。这一族管三件事——谁能进来(防火墙)、数据是不是真的(加密与证书)、出事之后能不能追溯(审计)。前两者是防线,审计是兜底,缺了审计,被入侵后连怎么进来的都说不清。账户与权限基础见 用户与权限,网络排查见 网络命令。
一、防火墙与包过滤
Linux 的包过滤演进过三代:iptables → nftables → 上层的 ufw/firewalld。nftables(新一代包过滤框架)是内核现在的默认后端,语法更简洁、规则能原子更新;ufw 和 firewalld 是不同发行版的高层封装,底层其实都在调 nftables。新手直接用封装工具,写 iptables 规则前建议先确认后端是哪个,避免两套工具互相覆盖。
| 命令 | 作用 | 常用示例 |
|---|---|---|
nftables | 内核新一代包过滤框架,替代 iptables,规则集原子生效、语法更紧凑 | nft list ruleset(列出全部);nft add table inet mytable;nft add rule inet mytable input tcp dport 22 accept;nft -f /etc/nftables.conf(加载配置) |
ufw | Ubuntu 系简化防火墙工具,底层封装 iptables/nftables,几条命令搞定常见场景 | ufw enable;ufw allow 22/tcp;ufw allow from 10.0.0.0/8;ufw deny 3306;ufw status verbose;ufw delete allow 22 |
firewalld | RedHat 系动态防火墙管理器,按 zone 划分信任级别,支持不中断连接改规则 | firewall-cmd --state;firewall-cmd --list-all;firewall-cmd --add-service=http --permanent;firewall-cmd --reload;firewall-cmd --add-port=8080/tcp |
ipset | 管理 IP 地址集合,让防火墙规则能一次匹配成千上万个 IP,性能远高于逐条规则 | ipset create blocklist hash:ip;ipset add blocklist 1.2.3.4;ipset list blocklist;nft add rule inet filter input ip saddr @blocklist drop |
改防火墙的保命习惯:远程操作前先
ufw allow 22/tcp(或firewall-cmd --add-service=ssh)并确认生效,再改其他规则。用firewalld时区分--permanent与运行时——不加--permanent的规则重启即失效,加了不--reload也不会生效,这个坑踩过的人都懂。
二、加密与证书
openssl 是事实上的标准加密工具箱,证书签发、格式转换、HTTPS 调试都靠它。它子命令多且参数风格不统一,但日常只需要记住几个高频组合。gpg 则用于文件与邮件的签名加密,常见于软件发布校验。
| 命令 | 作用 | 常用示例 |
|---|---|---|
openssl | 加密工具箱:生成密钥、签发证书、格式转换、测试 TLS 连接,排查 HTTPS 问题必备 | openssl req -x509 -newkey rsa:2048 -nodes -keyout k.pem -out c.pem -days 365(自签证书);openssl x509 -in cert.pem -noout -dates(查有效期);openssl s_client -connect example.com:443(看握手与证书链);openssl rand -hex 16(随机串) |
openssl req | 生成证书签名请求(CSR,Certificate Signing Request)与自签证书,申请正式证书的第一步 | openssl req -new -key server.key -out server.csr |
openssl pkcs12 | 转换 PKCS#12 格式(.pfx/.p12),Nginx/Java 密钥库之间的格式互转常用 | openssl pkcs12 -export -out bundle.p12 -inkey k.pem -in c.pem;openssl pkcs12 -in bundle.p12 -nodes -out k.pem |
gpg | GNU Privacy Guard,文件签名与加密,验证下载包是否被篡改 | gpg --gen-key(生成密钥对);gpg -e -r user file(加密);gpg -d file.gpg(解密);gpg --verify pkg.sig pkg(验签) |
查线上证书到期时间最实用的写法:
echo | openssl s_client -connect host:443 2>/dev/null | openssl x509 -noout -dates。证书过期导致的故障几乎每年都有,值得挂个监控。注意私钥泄露后自签证书要重新生成,不能只换证书。
三、SSH 密钥管理与隧道
| 命令 | 作用 | 常用示例 |
|---|---|---|
ssh-agent | 在内存中缓存解密后的私钥,避免每次 SSH 都输密码短语 | eval $(ssh-agent -s)(启动并注入环境变量);ssh-agent -k(关闭) |
ssh-add | 把私钥交给 ssh-agent 托管,可指定有效期,配合 agent 转发在多跳跳板机场景很关键 | ssh-add ~/.ssh/id_rsa;ssh-add -l(列出已加载);ssh-add -D(清空);ssh-add -t 3600 key(1 小时有效) |
sshfs | 基于 SFTP 把远程目录挂载成本地文件系统,临时查看/编辑远程文件比反复 scp 方便 | sshfs user@host:/remote /mnt/local;fusermount -u /mnt/local(卸载) |
socat | 双向数据转发工具,功能远超 netcat,可做端口转发、Unix socket 与 TCP 互转、TLS 代理 | socat TCP-LISTEN:8080,fork TCP:remote:80(端口转发);socat -d -d TCP-LISTEN:443,reuseaddr,fork SYSTEM:"openssl s_server -cert c.pem" |
autossh | 自动重连的 SSH 隧道包装器,长驻反向隧道用它比裸 ssh 可靠 | autossh -M 0 -N -R 2222:localhost:22 remote |
ssh-add前务必确认私钥权限是 600(chmod 600 ~/.ssh/id_rsa),否则 SSH 会直接拒绝使用。跳板机场景优先用ProxyJump(ssh -J jump target)而不是 agent 转发——后者在跳板机不可信时会泄露密钥使用权。
四、系统审计
auditd(audit daemon,审计守护进程)是内核级的审计子系统,能记录谁在什么时候访问了哪个文件、执行了什么命令。入侵排查时它是唯一的真相来源——日志可以删,但 audit 规则一旦装上,行为就会被记下来(前提是把日志同步到远端)。
| 命令 | 作用 | 常用示例 |
|---|---|---|
auditctl | 动态管理 audit 规则,指定监视哪些文件、哪些系统调用、哪些用户行为 | auditctl -w /etc/passwd -p wa -k passwd_watch(监视写入/属性变更);auditctl -l(列出规则);auditctl -D(清空);auditctl -a always,exit -F arch=b64 -S execve(记录所有命令执行) |
ausearch | 按关键字、时间、用户检索 audit 日志,出事后定位"谁改了这个文件" | ausearch -k passwd_watch;ausearch -ts today;ausearch -ua root;ausearch -m USER_LOGIN |
aureport | 生成 audit 日志的汇总统计报告,快速看全貌而非逐条翻 | aureport --auth(登录相关);aureport --file;aureport --summary |
audit 规则默认是临时的,
auditctl加的规则重启即失效。永久生效要写进/etc/audit/rules.d/*.rules再augenrules --load。注意规则不是越多越好——监视范围太广会显著拖慢系统并产生海量日志,一般只盯关键配置文件和可执行文件。
五、SELinux
SELinux(Security-Enhanced Linux,安全增强型 Linux)是内核的强制访问控制(MAC,Mandatory Access Control)机制。它最容易让人困惑的地方在于:文件权限明明是 777,服务还是访问不了——因为 SELinux 在权限位之外又加了一层判断。遇到"权限看起来没问题却被拒绝",第一反应应该去查 audit 日志而不是继续 chmod。
| 命令 | 作用 | 常用示例 |
|---|---|---|
getenforce | 查看 SELinux 当前模式:Enforcing(强制)/Permissive(仅记录不阻止)/Disabled | getenforce |
setenforce | 临时切换 Enforcing 与 Permissive(重启失效,且 Disabled 状态下不可用) | setenforce 0(临时放行,排障用);setenforce 1(恢复) |
sestatus | 显示 SELinux 完整状态,含模式、策略类型与配置文件中的设定值 | sestatus;sestatus -v(含进程上下文) |
semanage | 管理 SELinux 策略的持久配置,如端口标签、文件上下文规则 | `semanage port -l |
chcon | 临时修改文件的安全上下文,重启或 restorecon 后会丢失,适合临时验证 | chcon -t httpd_sys_content_t /var/www/html/index.html;chcon -R -t httpd_sys_content_t /web |
restorecon | 按策略恢复文件的默认安全上下文,是修复"SELinux 拒绝访问"的标准动作 | restorecon -Rv /var/www/html;restorecon -v /etc/nginx/nginx.conf |
正确的排障顺序:先看
/var/log/audit/audit.log里的AVC denied,确认是 SELinux 拦的;再用semanage fcontext加正确的持久规则;最后restorecon让它生效。不要一上来就setenforce 0或关掉 SELinux——那等于拆掉一层防护,问题只是被藏起来了。
六、登录审计与账户策略
| 命令 | 作用 | 常用示例 |
|---|---|---|
faillog | 查看与设置登录失败记录,配合 PAM 锁定策略防范暴力破解 | faillog(列出全部);faillog -u user(查某用户);faillog -r -u user(清除失败计数,解锁) |
ac | 统计用户连接总时长,来自 wtmp 日志,用于合规审计"谁在线多久" | ac;ac -d(按天);ac -p(按用户) |
chage | 设置账户密码有效期,强制定期改密,等保与合规场景常见 | chage -l user(查看);chage -M 90 user(90 天过期);chage -E 2026-12-31 user(账户到期日);chage -d 0 user(强制下次登录改密) |
newgrp | 临时切换到另一个有效组,使新建文件归属该组,多组协作时很有用 | newgrp docker |
sg | 以指定组的身份执行单条命令,不改变当前会话 | sg docker -c "docker ps" |
runuser | 以另一个用户身份执行命令,比 su 更轻(不启动登录 Shell),常用于服务脚本 | runuser -u nginx -- nginx -t |
chroot | 改变进程看到的根目录,把进程关在指定目录里,构建隔离环境或修复系统 | chroot /mnt/sysroot /bin/bash;chroot /mnt/sysroot grub-install /dev/sda |
chroot只隔离文件系统视图,不是安全沙箱——root 权限的进程仍有办法逃出去。真要做隔离请用容器(namespace + cgroup)。chroot的正确用途是系统救援:从 LiveCD 挂载原系统分区后 chroot 进去修引导、改密码。
一句话总结
安全审计速查:门外用 ufw/firewalld/nftables 挡,数据用 openssl/gpg 验,密钥交给 ssh-agent 托管,行为靠 auditctl/ausearch 留痕,权限再加 SELinux 一层(sestatus/semanage/restorecon),账户策略用 chage/faillog 收口——26 个命令搭起"防得住、验得真、查得到"的完整闭环。