前三篇掌握了 Linux 命令行、权限机制和运维排查,这一篇进入远程管理与反检测的核心战场。软件怎么装、SSH 怎么安全登录、服务怎么加固、黑客如何隐藏进程——每一项都是内网渗透和系统加固的必考点。看完你就能从零搭建一套安全的 SSH 远程管理体系,并理解恶意程序的隐身原理。
一、软件安装与更新
1.1 包管理器对比
| 主流发行版 | 包文件格式 | 默认包管理器 | 系统更新核心命令 |
|---|---|---|---|
| CentOS / RHEL / Fedora | .rpm | yum / dnf | yum update / dnf update |
| Ubuntu / Debian / Kali | .deb | apt / apt-get | apt update && apt upgrade |
- RPM 系(CentOS / RHEL):基于 Red Hat 生态,企业级服务器最主流的选择。CentOS 8+ 默认用 dnf,yum 是软链接。
- DEB 系(Ubuntu / Debian):以稳定性著称,个人桌面和云原生开发的首选。
1.2 CentOS / RHEL 软件管理(yum / dnf)
| 命令 | 说明 | 示例 |
|---|---|---|
yum install 软件名 | 安装软件 | yum install vim |
yum update 软件名 | 更新软件 | yum update vim |
yum remove 软件名 | 删除软件 | yum remove vim |
yum search 关键词 | 搜索软件 | yum search python |
yum info 软件名 | 查看软件信息 | yum info vim |
yum clean all | 清理缓存 | - |
yum makecache | 手动刷新缓存 | - |
仓库配置文件目录:
/etc/yum.repos.d/
1.3 Kali / Ubuntu 软件管理(apt)
| 命令 | 说明 | 示例 |
|---|---|---|
apt update | 更新软件包列表 | - |
apt upgrade | 升级已安装软件 | - |
apt install 软件名 | 安装软件 | apt install vim |
apt remove 软件名 | 删除软件 | apt remove vim |
apt purge 软件名 | 删除软件及配置文件 | apt purge vim |
apt search 关键词 | 搜索软件 | apt search vim |
apt show 软件名 | 查看软件信息 | apt show vim |
apt clean / apt autoclean | 清理缓存 | - |
仓库配置文件:
/etc/apt/sources.list和/etc/apt/sources.list.d/
1.4 源码编译安装
当软件不在官方仓库中,或需要自定义编译参数时,使用源码编译安装。
通用六步流程:
# 1. 安装编译依赖
yum install -y gcc make # CentOS / RHEL
apt install -y gcc make # Kali / Ubuntu
# 2. 下载源码
cd /usr/local/src
wget https://example.com/src.tar.gz
# 3. 解压
tar -xzf src.tar.gz
cd src
# 4. 配置:检测系统环境,生成 Makefile
./configure --prefix=/usr/local
# 5. 编译:根据 Makefile 编译源码,生成二进制可执行程序
make
# 6. 安装:将编译好的程序复制到系统目录(需要 root)
make install
二、SSH:密码与公钥远程登录管理
2.1 SSH 基础
核心配置文件:/etc/ssh/sshd_config
| 配置项 | 说明 | 默认值 |
|---|---|---|
Port 22 | 服务监听端口 | 22 |
ListenAddress 0.0.0.0 | 监听地址 | 所有地址 |
PermitRootLogin yes | 是否允许 root 登录 | yes |
PasswordAuthentication yes | 是否允许密码认证 | yes |
PubkeyAuthentication yes | 是否允许公钥认证 | yes |
AuthorizedKeysFile .ssh/authorized_keys | 公钥文件位置 | - |
SSH 服务管理:
# CentOS / RHEL
systemctl status sshd
systemctl start sshd
systemctl enable sshd
# Kali / Ubuntu
systemctl status ssh
systemctl start ssh
systemctl enable ssh
密码登录基本使用:
ssh 用户名@主机IP
ssh -p 端口号 用户名@主机IP
ssh 用户名@主机IP "命令" # 执行远程命令
2.2 公钥认证原理(难点)
核心概念:非对称加密——公钥加密,私钥解密。
形象比喻:
- 公钥 = 锁头(可以公开给别人,用于加密)
- 私钥 = 唯一的钥匙(必须自己保管,用于解密)
- 服务器 = 装了锁头的房间,只认锁不认人
- 客户端 = 想进房间的人,有能开锁的钥匙就能进
认证流程六步走:
- 客户端本地生成"公钥 + 私钥"密钥对
- 手动将公钥上传到服务器
- 客户端向服务器发起 SSH 登录请求
- 服务器用公钥加密随机"挑战码"发回
- 客户端用私钥解密挑战码,并回传结果
- 验证通过即建立连接,允许登录
为什么公钥认证更安全:
- 私钥永不传输,只传输解密后的挑战
- 几乎无法被暴力破解(密钥长度通常 2048/4096 位)
- 每次登录挑战不同,防止重放攻击
- 公钥泄露不影响安全,私钥泄露才危险
2.3 密码登录 vs 公钥登录对比
| 对比项 | 密码登录 | 公钥登录 |
|---|---|---|
| 安全性 | 较低,易受暴力破解 | 较高,基于密钥认证 |
| 便利性 | 需记忆密码 | 配置后无需密码 |
| 配置复杂度 | 简单 | 较复杂 |
| 适用场景 | 临时访问、测试环境 | 生产环境、自动化脚本 |
| 等保合规 | 不符合三级要求 | 符合三级要求 |
2.4 实战演示:配置公钥认证
步骤 1:客户端生成密钥对
ssh-keygen -t rsa -b 4096 -C "备注信息"
# 按提示输入保存路径和密码(可选,建议设置密码保护私钥)
步骤 2:上传公钥到服务器
ssh-copy-id 用户名@服务器IP
# 自动将公钥追加到服务器的 authorized_keys 文件中
步骤 3:服务器端权限加固(关键)
chmod 700 ~/.ssh # 目录只允许所有者进入
chmod 600 ~/.ssh/authorized_keys # 文件只允许所有者读写
步骤 4:校验配置并重启服务
sshd -t # 先校验配置,避免 sshd 起不来
systemctl restart sshd # CentOS / RHEL
systemctl restart ssh # Kali / Ubuntu
步骤 5:测试免密登录
ssh 用户名@服务器IP
# 应该无需输入密码即可登录
如果私钥泄露,立即删除服务器上的公钥(
~/.ssh/authorized_keys),然后重新生成新的密钥对。
三、SSH 服务加固
3.1 基本加固措施
1. 修改默认端口
vim /etc/ssh/sshd_config
# 修改 Port 2222
# 注意:修改前必须在防火墙放行新端口!
firewall-cmd --zone=public --add-port=2222/tcp --permanent
firewall-cmd --reload
systemctl restart sshd
2. 禁用 root 登录
重要提醒:禁用 root 登录前,必须先创建其他可 sudo 用户,否则可能死锁!
# 先创建普通用户并授予 sudo 权限
useradd -m shiba
passwd shiba
usermod -aG wheel shiba # CentOS / RHEL
usermod -aG sudo shiba # Kali / Ubuntu
# 再禁用 root 登录
vim /etc/ssh/sshd_config
# 修改 PermitRootLogin no
systemctl restart sshd
3. 禁用密码认证,仅允许公钥认证
vim /etc/ssh/sshd_config
# 修改:
PasswordAuthentication no
PubkeyAuthentication yes
systemctl restart sshd
前提:确保已正确配置并测试好公钥认证后,再禁用密码。
4. 限制用户登录
vim /etc/ssh/sshd_config
AllowUsers 用户1 用户2 # 仅允许特定用户登录
DenyUsers 用户1 # 拒绝特定用户登录
AllowGroups 组名1 组名2 # 允许特定组登录
DenyGroups 组名 # 拒绝特定组登录
3.2 使用 Fail2ban 防止暴力破解(难点)
工作原理:Fail2ban 通过实时监控 SSH 日志文件,检测短时间内的多次登录失败尝试,自动调用防火墙规则(如 iptables)封禁该可疑 IP,有效阻断暴力破解攻击。
安装:
# CentOS / RHEL(需先安装 EPEL 源)
yum -y install epel-release
yum -y install fail2ban
# Kali / Ubuntu
apt update
apt install fail2ban
配置:
# 推荐复制模板文件修改,避免直接编辑 jail.conf
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
在 jail.local 中添加 SSH 防护配置:
[sshd]
enabled = true
port = 2222
filter = sshd
action = iptables-multiport[name=sshd, port="2222", protocol=tcp]
logpath = /var/log/secure
maxretry = 3
findtime = 300
bantime = 86400
| 参数 | 说明 |
|---|---|
enabled | 是否启用 |
port | 监听端口 |
logpath | 日志文件路径 |
maxretry | 最大重试次数 |
findtime | 检测时间窗口(秒) |
bantime | 封禁时间(秒) |
管理 Fail2ban:
systemctl start fail2ban
systemctl enable fail2ban
# 查看状态
fail2ban-client status
fail2ban-client status sshd
# 手动封禁 / 解封 IP
fail2ban-client set sshd banip IP地址
fail2ban-client set sshd unbanip IP地址
四、演示:libprocesshider 进程隐藏
4.1 简介与原理
libprocesshider 是一个专门用于在 Linux 系统下隐藏指定进程的动态链接库。通过拦截系统调用,可让特定进程在 ps、top 等常规进程查看工具中"凭空消失"。
技术原理:利用 Linux 的 LD_PRELOAD 预加载机制,将自定义库注入所有由 bash 启动的进程。在系统调用读取 /proc 目录项时,重载 readdir() 与 readdir64() 函数,对返回结果进行过滤,直接剔除目标进程名,达成"隐形"效果。
安全警示:该技术是恶意软件(如 Rootkit、挖矿木马)常用的"反检测"手段。理解它是为了更好地防御,而非用于非法用途。
4.2 环境准备与下载源码
# 安装编译工具
yum groupinstall "Development Tools" # CentOS / RHEL
yum install git
apt install build-essential git # Kali / Ubuntu
# 下载源码
git clone https://github.com/gianlucaborello/libprocesshider.git
源码结构:
libprocesshider/
├── evil_script.py # 恶意测试脚本
├── Makefile # 编译脚本
├── processhider.c # 隐藏进程的核心代码
└── README.md # 项目说明
4.3 编译和使用
# 1. 进入项目目录
cd /root/libprocesshider
# 2. 把要隐藏的进程名改成目标进程(例如 sleep)
sed -i 's/evil_script.py/sleep/' processhider.c
# 3. 编译
make clean
make
# 4. 启动测试进程
sleep 9999 &
# 5. 设置环境变量,开启隐藏(当前终端会话生效)
export LD_PRELOAD=/root/libprocesshider/libprocesshider.so
# 6. 测试隐藏效果,sleep 进程应消失
ps aux | grep sleep
# 7. 取消隐藏
unset LD_PRELOAD
4.4 永久隐藏(系统级)
# 1. 将库文件复制到系统库目录
cp /root/libprocesshider/libprocesshider.so /usr/local/lib/
# 2. 编辑系统预加载配置
echo "/usr/local/lib/libprocesshider.so" > /etc/ld.so.preload
# 3. 重启系统或重新登录后,ps、top 等命令将自动隐藏目标进程
# 取消永久隐藏
echo "" > /etc/ld.so.preload
rm -f /usr/local/lib/libprocesshider.so
ldconfig
4.5 安全防护建议
- 限制 LD_PRELOAD:在
/etc/ld.so.preload中配置受信任的库,定期检查该文件是否被篡改 - 启用 SELinux / AppArmor:限制预加载机制的滥用
- 监控 /proc 目录:异常进程隐藏可能留下痕迹
- 使用入侵检测系统:如 AIDE、Tripwire 等,监控系统文件完整性
- 定期安全基线检查:检查系统库文件和预加载配置
五、知识小结
| 知识模块 | 核心内容 | 一句话速记 |
|---|---|---|
| 包管理器 | RPM 系用 yum/dnf,DEB 系用 apt | 企业用 yum,桌面用 apt |
| 源码编译 | ./configure → make → make install | 三步走,装遍天下 |
| SSH 配置 | /etc/ssh/sshd_config,Port/PermitRootLogin/PasswordAuthentication | 改配置先备份 |
| 公钥认证 | ssh-keygen 生成 → ssh-copy-id 上传 → chmod 700/600 加固 | 私钥是钥匙,公钥是锁 |
| SSH 加固 | 改端口、禁 root、禁密码、限用户、Fail2ban | 五板斧锁死 SSH |
| Fail2ban | 监控日志 + 自动封禁 IP,jail.local 配置 | 暴力破解的克星 |
| 进程隐藏 | LD_PRELOAD 拦截 readdir,过滤 /proc 目录项 | 黑客的隐身衣 |
| 永久隐藏 | 写入 /etc/ld.so.preload,全局生效 | 检查这个文件是防御关键 |
| 防护思路 | 限制预加载、SELinux、入侵检测、基线检查 | 多层防御不留死角 |