Linux权限维持(一):添加用户与SSH公私钥免密登录

文章定位:面向安全运维人员与应急响应人员,侧重于“原理+操作+检测”三位一体。

复现环境:Red Hat Enterprise Linux 8

1. 引言

核心思想:知己知彼,百战不殆。账号级后门是攻击者最基础、最直接的权限维持手段——通过在系统中留下一个“隐形账户”,随时可以卷土重来。

本篇内容

  • 一句话添加用户(普通用户 / root用户)

  • SSH公私钥免密登录


2. 后门技术详解

2.1 一句话添加用户

原理

攻击者通过一条命令行在目标系统中创建一个新用户,该用户可以:

  • 是普通用户(UID≥1000)

  • 也可以是 root 用户(UID=0)

创建完成后,攻击者即可使用该用户的密码通过 SSH 登录。

操作(攻击者视角)

类型 命令 说明
普通用户 useradd -p "$(openssl passwd -6 123456)" guest 创建用户 guest,密码 123456,使用 SHA512 加密
root用户 useradd -p "$(openssl passwd -6 123456)" guest -o -u 0 -g root -G root -s /bin/bash -d /home/guest 创建 UID=0 的用户,等同于 root
chpasswd方式 useradd guest; echo 'guest:123456' | chpasswd 先建用户,再通过管道设置密码
echo -e方式 useradd test; echo -e "123456\n123456\n" | passwd test 通过管道输入两次密码

RHEL 8 注意

  • openssl passwd -6 使用 SHA512 加密(推荐,RHEL 8 默认)

  • 老式 -1(MD5)仍可用但已不推荐

检测方法

# 1. 查找 UID=0 的特权用户(除了 root 之外的都是异常) 
awk -F: '$3==0{print $1}' /etc/passwd 
# 2. 查找最近新增的用户(按UID排序) 
sort -n -t: -k3 /etc/passwd | tail -10
 # 3. 查找有登录权限的用户(bash/sh 作为 shell) 
grep -E ":/bin/bash|:/bin/sh" /etc/passwd 
# 4. 检查可疑的密码加密方式
awk -F: '{print $1, substr($2,1,3)}' /etc/shadow | grep -E ' \$1\$|\$5\$|\$6\$'
# 5. 检查 sudo 权限 
grep -v "^#\|^$" /etc/sudoers | grep "ALL=(ALL)"

清除方法

# 删除恶意用户并删除其家目录 
userdel -r guest

# 如果用户正在登录,先踢掉 
pkill -u guest userdel -r guest

2.2 SSH 公私钥免密登录

原理

SSH 公私钥认证是一种非对称加密方式:

  • 私钥id_rsa):放在攻击者客户端,相当于“钥匙”

  • 公钥id_rsa.pub):放在目标服务器的 ~/.ssh/authorized_keys,相当于“锁”

当攻击者使用私钥登录时,SSH 服务端会用公钥验证签名,验证通过则直接登录,无需密码

操作(攻击者视角)

步骤1:在攻击机(或任何地方)生成密钥对

ssh-keygen -t rsa
# 一路回车(不设密码)

ad1a1b718320260529154641

生成的文件:

  • ~/.ssh/id_rsa私钥(要复制到攻击机)

  • ~/.ssh/id_rsa.pub公钥(要放到目标服务器)

步骤2:查看并复制私钥

cat ~/.ssh/id_rsa

ad1a1b718320260602111613

输出示例:

-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn NhAAAAAwEAAQAAAYEAt3mXv4Z4I+riM1g7VJI0LcJXpZQsnLqZVJqKsodr3gF9ok9mZBnU ...(中间省略)... 0bLp5Pm2W+3F6tZp1fT5PjR6c8dE= -----END OPENSSH PRIVATE KEY-----

用鼠标选中从 -----BEGIN-----END 的全部内容(包括这两行),右键复制。

步骤3:将公钥追加到目标服务器

# 方法1:使用 ssh-copy-id(需要一次密码登录) 
ssh-copy-id root@目标IP

# 方法2:手动追加 
cat ~/.ssh/id_rsa.pub | ssh root@目标IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

步骤4:验证免密登录

ssh root@目标IP 
# 应该直接登录成功,无需密码

检测方法

# 1. 检查 root 用户的 
authorized_keys cat /root/.ssh/authorized_keys 

# 2. 检查所有用户的
authorized_keys find /home -name "authorized_keys" -exec echo "=== {} ===" \; -exec cat {} \; 2>/dev/null 

# 3. 检查文件修改时间(寻找最近添加的公钥)
ls -la /root/.ssh/authorized_keys stat /root/.ssh/authorized_keys

# 4. 检查 .ssh 目录权限(应该为 700)
ls -ld /root/.ssh 

# 5. 查看 SSH 日志中的公钥认证记录 
grep "Accepted publickey" /var/log/secure

清除方法

# 编辑 authorized_keys,删除可疑的公钥行 vi /root/.ssh/authorized_keys 
# 或者备份后清空(谨慎操作) cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bak > /root/.ssh/authorized_keys 
# 修复权限 chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys

3. 综合排查与应急响应

3.1 快速自查脚本(账号级)

#!/bin/bash
echo "========== 账号级后门排查 ==========" 

echo -e "\n[1] UID=0 特权用户:" 
awk -F: '$3==0{print $1}' /etc/passwd 

echo -e "\n[2] 可登录用户(shell=/bin/bash 或 /bin/sh):" 
grep -E ":/bin/bash|:/bin/sh" /etc/passwd | cut -d: -f1

echo -e "\n[3] 最近新增的5个用户:" 
sort -n -t: -k3 /etc/passwd | tail -5 | cut -d: -f1,3 

echo -e "\n[4] root用户的SSH公钥:" 
cat /root/.ssh/authorized_keys 2>/dev/null | wc -l | xargs echo "公钥数量:" 

echo -e "\n[5] 所有用户的authorized_keys:" 
find /home -name "authorized_keys" -exec sh -c 'echo "=== {} ==="; cat {}' \; 2>/dev/null

3.2 日志取证

日志文件 相关字段 说明
/var/log/secure useraddpasswordAccepted publickey 用户添加和登录记录

/var/log/audit/audit.log

USER_ADDUSER_LOGIN 审计日志(需启用auditd)
# 查看最近添加的用户
grep "useradd" /var/log/secure

# 查看公钥登录记录+y" /var/log/secure | tail -20

4. 总结与建议

核心原则

原则 说明
定期巡检 每周检查 /etc/passwdauthorized_keys
最小化权限 删除不必要的普通用户和 sudo 权限
禁用密码登录 服务器建议使用 PasswordAuthentication no 禁止密码登录
监控文件变更 使用 auditd 监控 /etc/passwdauthorized_keys

监控配置示例(auditd)

# 监控 /etc/passwd 和 /etc/shadow 
auditctl -w /etc/passwd -p wa -k user_modify 
auditctl -w /etc/shadow -p wa -k user_modify 
# 监控 root 的 authorized_keys
auditctl -w /root/.ssh/authorized_keys -p wa -k ssh_key_modify
# 查看监控日志 
ausearch -k user_modify

最终提醒

账号级后门是最容易被发现的后门,也是攻击者最常用的后门。
定期巡检 cat /etc/passwdcat /root/.ssh/authorized_keys 是最简单有效的防御手段。
如发现可疑用户或公钥,立即删除并排查入侵途径。


 

 
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容