第 11 期:铜墙铁壁!构建企业级Linux安全防护体系的关键命令集
“黑客闻风丧胆!25+个Linux安全命令构筑多层防护体系,堵住99%的安全漏洞”
2026-01-09 09:20·Linux技术派
核心内容
1. 用户与组管理
◦ 用户账户管理
useradd -m -s /bin/bash liuyazhuang – 创建用户并指定shell(-m创建家目录)
usermod -aG sudo,developers liuyazhuang – 将用户添加到多个组(-aG追加不覆盖)
userdel -r olduser – 删除用户及其家目录(-r参数彻底清理)
chage -l liuyazhuang – 查看用户密码过期信息(安全策略审计)
◦ 组策略管理
groupadd developers – 创建新组(项目团队权限隔离)
groupmod -n eng developers – 重命名组(组织结构调整)
gpasswd -a liuyazhuang developers – 将用户添加到组(临时权限授予)
newgrp developers – 切换当前会话组身份(无需重新登录)
2. 文件权限控制
◦ 基础权限管理
chmod 750 /data/project – 设置目录权限(所有者rwx,组rx,其他无权限)
chmod -R g+w /data/shared – 递归添加组写权限(-R参数,团队协作目录)
chown liuyazhuang:developers /data/project – 同时修改所有者和组
chgrp admin /etc/config.conf – 仅修改文件组所有权
◦ 特殊权限位
chmod u+s /usr/bin/passwd – 设置SUID位(以文件所有者权限执行)
chmod g+s /data/shared – 设置SGID位(新文件继承父目录组权限)
chmod +t /tmp – 设置sticky bit(仅文件所有者可删除,/tmp目录必备)
getfacl /data/confidential – 查看ACL权限(超越传统权限模型)
3. 认证与提权
◦ 密码策略
passwd -l account – 锁定用户账户(-l参数,紧急安全响应)
passwd -e liuyazhuang – 强制下次登录修改密码(-e参数,新员工入职)
chage -M 90 liuyazhuang – 设置密码90天后过期(合规性要求)
chage -I 7 liuyazhuang – 密码过期后7天账户锁定(安全缓冲期)
◦ sudo精细控制
sudo visudo – 安全编辑sudoers文件(语法检查防止锁定)
sudo -l – 列出当前用户sudo权限(权限审计)
sudo -u postgres psql – 以postgres用户执行命令(最小权限原则)
sudo !! – 重新执行上一条命令但使用sudo(命令行效率技巧)
4. 安全审计与监控
◦ 登录审计
last – 显示最近登录记录(包括关机、重启事件)
lastlog -u liuyazhuang – 查看特定用户最近登录时间(账户活动审核)
faillog -a – 显示所有用户的失败登录尝试(暴力破解检测)
lastb – 仅显示失败登录尝试(需root权限,安全事件调查)
◦ 高级审计
ausearch -k privilege_change – 搜索特定审计事件(-k标签过滤)
aureport -au – 生成认证失败报告(系统范围安全分析)
auditctl -w /etc/shadow -p wa -k shadow_access – 监控敏感文件访问
journalctl _COMM=sudo – 仅查看sudo相关日志(systemd环境)
5. 防火墙与网络防护
◦ 防火墙管理
ufw enable – 启用UFW防火墙(Ubuntu/Debian简化工具)
firewall-cmd –permanent –add-service=http – 永久开放HTTP端口(Firewalld)
iptables -L -n -v – 详细列出防火墙规则(传统但强劲)
ss -tulpn – 列出所有监听端口和服务(识别不必要的开放端口)
◦ SSH安全加固
ssh-keygen -t ed25519 – 生成高安全性SSH密钥(替代RSA)
ssh-copy-id liuyazhuang@server – 复制公钥到远程主机(禁用密码登录前提)
fail2ban-client status sshd – 检查SSH防护状态(自动封禁暴力破解)
sshd -T | grep -E “permitroot|password” – 验证SSH安全配置(快速审计)
实战小贴士:18个企业级安全案例
1. 最小权限原则实施
# 创建仅能执行特定命令的受限用户
useradd -s /bin/rbash restricted_user # rbash=受限bash
mkdir /home/restricted_user/bin
ln -s /usr/bin/tail /home/restricted_user/bin/
ln -s /usr/bin/grep /home/restricted_user/bin/
echo 'PATH=$HOME/bin' >> /home/restricted_user/.bashrc
chmod -R 755 /home/restricted_user
创建仅能查看日志的受限账户(运维审计人员最小权限实现)
2. 敏感文件实时监控
# /etc/passwd和shadow变更监控脚本
audit_rules=(
"-w /etc/passwd -p wa -k identity"
"-w /etc/shadow -p wa -k identity"
"-w /etc/group -p wa -k identity"
)
for rule in "${audit_rules[@]}"; do
auditctl $rule
done
echo "@daily /sbin/aureport -k --summary --key identity | mail -s 'Identity File Changes' security-team@example.com" | crontab -
实时监控身份文件变更,每日摘要邮件(合规性关键需求)
3. 服务账户安全加固
# 创建无登录能力的服务账户
useradd -r -s /usr/sbin/nologin -M app_service
# 设置密码永不过期(避免服务中断)
chage -I -1 -m 0 -M 99999 -E -1 app_service
# 限制资源使用
echo "app_service hard nproc 50" >> /etc/security/limits.conf
echo "app_service hard rss 1024000" >> /etc/security/limits.conf
服务账户安全最佳实践(防止权限提升和资源耗尽)
4. 紧急安全响应流程
# 检测可疑SUID文件(可能的后门)
find / -perm -4000 -type f 2>/dev/null | grep -vE "/bin|/usr/bin|/sbin|/usr/sbin" | tee /root/suspicious_suid.log
# 立即锁定可疑账户
usermod -L suspicious_user
# 记录当前进程状态
ps auxfww > /root/incident_ps_$(date +%Y%m%d_%H%M%S).log
lsof -i > /root/incident_net_$(date +%Y%m%d_%H%M%S).log
安全事件快速响应脚本(入侵取证黄金30分钟行动指南)
5. 文件完整性监控
# 创建关键目录基线
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 配置每日检查
echo "0 3 * * * /usr/bin/aide --check | mail -s 'AIDE Integrity Check' security@example.com" > /etc/cron.d/aide
部署AIDE文件完整性监控(检测未授权文件修改,等保合规必备)
6. SSH暴力破解防护
# 配置fail2ban多层防御
cat > /etc/fail2ban/jail.local <<EOF
[sshd]
enabled = true
maxretry = 3
bantime = 1h
findtime = 10m
[sshd-ddos]
enabled = true
EOF
systemctl restart fail2ban
# 额外限制:仅允许特定IP段
echo "sshd: 192.168.1.0/24 203.0.113.0/24" > /etc/hosts.allow
echo "sshd: ALL" > /etc/hosts.deny
多层SSH防护体系(降低99.9%暴力破解风险)
7. 临时特权会话
# 创建临时sudo权限(1小时)
echo "temp_admin ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/temp_admin
echo "Defaults:temp_admin timestamp_timeout=60" >> /etc/sudoers.d/temp_admin
# 1小时后自动删除
echo "0 * * * * root rm -f /etc/sudoers.d/temp_admin && logger 'Temporary sudo access removed'" | crontab -
临时特权会话管理(运维应急处理权限管控)
8. 目录权限自动化修复
#!/bin/bash
# Web服务器目录权限标准化脚本
WEB_ROOT="/var/www/html"
find $WEB_ROOT -type d -exec chmod 750 {} ;
find $WEB_ROOT -type f -exec chmod 640 {} ;
find $WEB_ROOT -name "*.cgi" -o -name "*.pl" -exec chmod 750 {} ;
chown -R www-data:developers $WEB_ROOT
# 设置默认ACL确保新文件正确权限
setfacl -R -d -m u::rwx,g::r-x,o::- $WEB_ROOT
Web目录权限标准化(防止目录遍历和未授权访问)
9. 安全密码策略实施
# 强密码策略PAM配置
echo "password required pam_pwquality.so minlen=14 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 retry=3" > /etc/pam.d/common-password
# 密码历史防止重复使用
echo "password required pam_unix.so remember=5" >> /etc/pam.d/common-password
# 账户锁定策略
echo "auth required pam_faillock.so preauth deny=5 unlock_time=900" > /etc/pam.d/login
echo "auth required pam_faillock.so authfail deny=5 unlock_time=900" >> /etc/pam.d/login
企业级密码策略实现(满足ISO27001合规要求)
10. 受限Shell环境
# 创建SFTP仅访问环境
groupadd sftp_users
useradd -g sftp_users -s /usr/sbin/nologin -d /var/sftp/liuyazhuang liuyazhuang
mkdir -p /var/sftp/liuyazhuang/upload
chown root:sftp_users /var/sftp/liuyazhuang
chmod 750 /var/sftp/liuyazhuang
chown liuyazhuang:sftp_users /var/sftp/liuyazhuang/upload
chmod 770 /var/sftp/liuyazhuang/upload
# SSH配置
echo "Match Group sftp_users
ChrootDirectory /var/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no" >> /etc/ssh/sshd_config
安全文件传输环境(无需完整shell访问,最小权限原则)
11. 内核参数安全加固
# sysctl安全优化
cat > /etc/sysctl.d/99-security.conf <<EOF
# 防止SYN洪水攻击
net.ipv4.tcp_syncookies = 1
# 忽略ICMP广播请求
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 防止IP欺骗
net.ipv4.conf.all.rp_filter = 1
# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
# 内核指针保护
kernel.kptr_restrict = 2
# ASLR强化
kernel.randomize_va_space = 2
EOF
sysctl -p /etc/sysctl.d/99-security.conf
内核级安全参数优化(系统级防护第一道防线)
12. 特权命令审计
# 记录所有sudo执行的命令
echo 'Defaults log_output' > /etc/sudoers.d/audit
echo 'Defaults!/usr/bin/su !log_output' >> /etc/sudoers.d/audit
mkdir /var/log/sudo-io
chmod 750 /var/log/sudo-io
chown root:adm /var/log/sudo-io
# 创建审计报告脚本
echo "0 8 * * * root find /var/log/sudo-io -type f -mtime +30 -delete" > /etc/cron.d/sudo-log-rotate
特权命令全面审计(满足SOX、GDPR等合规审计要求)
13. 敏感环境变量保护
# 防止敏感信息泄露
echo "export HISTCONTROL=ignorespace" >> /etc/profile.d/security.sh
echo "export HISTSIZE=1000" >> /etc/profile.d/security.sh
echo "export HISTTIMEFORMAT="%F %T "" >> /etc/profile.d/security.sh
# 阻止history记录含敏感词的命令
cat > /etc/profile.d/history_filter.sh <<'EOF'
shopt -s histappend
PROMPT_COMMAND='history -a; history -c; history -r; history | sed "/[Pp][Aa][Ss][Ss][Ww][Oo][Rr][Dd]/d" > $HISTFILE; history -c; history -r'
EOF
chmod +x /etc/profile.d/history_filter.sh
命令历史安全过滤(防止密码和密钥意外记录)
14. 安全删除敏感数据
# 安全擦除已删除文件残留
shred -vzu -n 3 /tmp/sensitive_data.txt
# 擦除整个磁盘(退役磁盘处理)
dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
# 安全清理交换空间
swapoff -a
dd if=/dev/urandom of=/dev/sda2 bs=4M status=progress # 假设sda2是swap分区
mkswap /dev/sda2
swapon -a
敏感数据彻底擦除(符合NIST 800-88数据销毁标准)
15. 服务最小化暴露
# 识别并禁用不必要的服务
systemctl list-unit-files --state=enabled | grep -vE "ssh|cron|rsyslog|network|firewalld" > /tmp/services.txt
# 创建服务审核报告
for service in $(cat /tmp/services.txt | awk '{print $1}'); do
systemctl status $service --no-pager > /tmp/${service}_status.txt
done
# 禁用高风险服务
systemctl mask avahi-daemon cups nfs-server rpcbind
服务最小化原则实施(攻击面缩减80%)
16. 容器安全隔离
# Docker安全运行配置
docker run -d
--name secure_app
--read-only # 文件系统只读
--cap-drop=ALL # 丢弃所有能力
--cap-add=NET_BIND_SERVICE # 仅添加必要能力
-p 127.0.0.1:8080:80 # 仅绑定localhost
-v app_data:/data:Z # SELinux安全卷
--security-opt no-new-privileges # 禁止提权
--security-opt seccomp=profile.json # 自定义seccomp
nginx:latest
容器安全运行最佳实践(防止容器逃逸和权限提升)
17. 自动化漏洞扫描
# 每日安全扫描脚本
echo "0 2 * * * root lynis audit system --pentest --no-log > /var/log/lynis_daily_$(date +\%Y\%m\%d).log && mail -s 'Security Scan Report' admin@example.com < /var/log/lynis_daily_$(date +\%Y\%m\%d).log" > /etc/cron.d/lynis-scan
# 安装lynis
apt-get install lynis -y || yum install lynis -y
# 配置lynis
echo "skip-test=USB-1000" > /etc/lynis/default.prf
自动化安全漏洞扫描(每日生成报告,提前发现隐患)
18. 安全合规自动化
#!/bin/bash
# CIS基准合规性检查脚本
REPORT_DIR="/var/log/compliance"
mkdir -p $REPORT_DIR
DATE=$(date +%Y%m%d)
# 运行OpenSCAP扫描
oscap xccdf eval
--profile xccdf_org.ssgproject.content_profile_cis
--report $REPORT_DIR/cis_scan_$DATE.html
/usr/share/xml/scap/ssg/content/ssg-ubuntu1804-ds.xml
# 生成执行摘要
echo "CIS Compliance Scan - $DATE" > $REPORT_DIR/summary_$DATE.txt
grep "Result" $REPORT_DIR/cis_scan_$DATE.html | awk -F'>' '{print $3}' | cut -d'<' -f1 | sort | uniq -c >> $REPORT_DIR/summary_$DATE.txt
# 邮件通知
mail -s "CIS Compliance Report - $(cat $REPORT_DIR/summary_$DATE.txt | grep fail | wc -l) failures" security-team@example.com < $REPORT_DIR/summary_$DATE.txt
自动化合规性审计(满足等保2.0、GDPR等法规要求)
高级技巧:安全防护倍增器
零信任sudo策略:
# 创建命令级sudo控制
Cmnd_Alias DB_COMMANDS = /usr/bin/mysql, /usr/bin/mysqldump
Cmnd_Alias LOG_COMMANDS = /bin/journalctl, /usr/bin/tail
%db_admins ALL=(ALL) NOPASSWD: DB_COMMANDS
%auditors ALL=(ALL) NOPASSWD: LOG_COMMANDS
精细控制sudo权限,实现最小权限模型(超越简单用户组控制)
实时入侵检测脚本:
#!/bin/bash
# 监控异常进程行为
while true; do
# 检测可疑网络连接
netstat -antup | grep ESTABLISHED | awk '{print $5,$7}' | grep -vE "192.168|10.|127.0" > /tmp/suspicious_conns
if [ -s /tmp/suspicious_conns ]; then
mail -s "SUSPICIOUS CONNECTION DETECTED" security@example.com < /tmp/suspicious_conns
logger "SECURITY ALERT: Suspicious external connections detected"
fi
# 检测高权限SUID执行
auditctl -l | grep -q "execve" || auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
sleep 300
done
实时入侵检测守护进程(比传统IDS更轻量、更聚焦)
证书透明度监控:
# 监控组织域名的SSL证书颁发
while true; do
for domain in example.com example.org example.net; do
crtsh_query="curl -s "https://crt.sh/?q=%.${domain}&output=json""
eval $crtsh_query | jq -r '.[].name_value' | sort -u > /tmp/certificates_$domain
diff -u /var/cache/certificates/$domain /tmp/certificates_$domain || {
mail -s "NEW CERTIFICATE DETECTED for $domain" security@example.com < <(diff -u /var/cache/certificates/$domain /tmp/certificates_$domain)
mv /tmp/certificates_$domain /var/cache/certificates/$domain
}
done
sleep 86400 # 每天检查
done
证书透明度监控(检测未授权证书颁发,防止中间人攻击)
硬件级安全验证:
# 验证系统完整性从引导开始
if [ -f /sys/firmware/efi/efivars/SecureBoot-*/ ]; then
sb_state=$(hexdump -n 1 -s 4 -e '"%d"' /sys/firmware/efi/efivars/SecureBoot-*)
if [ "$sb_state" -ne 1 ]; then
logger "SECURITY WARNING: Secure Boot is disabled"
echo "SECURE BOOT DISABLED" | wall
fi
fi
# TPM验证
tpm2_pcrread sha256:0,7 > /tmp/pcrs
if ! diff -q /tmp/pcrs /var/lib/tpm/baseline; then
logger "SECURITY WARNING: TPM PCR values changed - possible boot tampering"
systemctl isolate emergency.target
fi
硬件级安全验证(防止bootkit和固件级攻击)
掌握这些安全命令,你将能够构建纵深防御体系,从账户管理到网络防护,从文件权限到内核加固,层层设防。在当今威胁日益复杂的环境中,这些技能不仅保护系统安全,更是职业发展的核心竞争力。从简单的chmod到复杂的SELinux策略,安全不是功能,而是一种持续实践的艺术。
下期我们将深入探讨Linux定时任务与自动化脚本命令,助你解放双手,让系统自己管理自己!
