Linux命令专栏第 11 期:权限管理与防护的25+个必备命令

内容分享2小时前发布
0 0 0

第 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定时任务与自动化脚本命令,助你解放双手,让系统自己管理自己!

© 版权声明

相关文章

暂无评论

none
暂无评论...