












前三篇掌握了 Linux 命令行、权限机制和运维排查,这一篇进入远程管理与反检测的核心战场。软件怎么装、SSH 怎么安全登录、服务怎么加固、黑客如何隐藏进程 —— 每一项都是内网渗透和系统加固的必考点。看完你就能从零搭建一套安全的 SSH 远程管理体系,并理解恶意程序的隐身原理。
| 主流发行版 | 包文件格式 | 默认包管理器 | 系统更新核心命令 |
|---|---|---|---|
| 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):以稳定性著称,个人桌面和云原生开发的首选。
| 命令 | 说明 | 示例 |
|---|---|---|
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/
| 命令 | 说明 | 示例 |
|---|---|---|
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. 安装编译依赖
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
核心配置文件:/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 "命令" # 执行远程命令
核心概念:非对称加密 —— 公钥加密,私钥解密。
形象比喻:
公钥 = 锁头(可以公开给别人,用于加密)
私钥 = 唯一的钥匙(必须自己保管,用于解密)
服务器 = 装了锁头的房间,只认锁不认人
客户端 = 想进房间的人,有能开锁的钥匙就能进
认证流程六步走:
客户端本地生成 "公钥 + 私钥" 密钥对
手动将公钥上传到服务器
客户端向服务器发起 SSH 登录请求
服务器用公钥加密随机 "挑战码" 发回
客户端用私钥解密挑战码,并回传结果
验证通过即建立连接,允许登录
为什么公钥认证更安全:
私钥永不传输,只传输解密后的挑战
几乎无法被暴力破解(密钥长度通常 2048/4096 位)
每次登录挑战不同,防止重放攻击
公钥泄露不影响安全,私钥泄露才危险
| 对比项 | 密码登录 | 公钥登录 |
|---|---|---|
| 安全性 | 较低,易受暴力破解 | 较高,基于密钥认证 |
| 便利性 | 需记忆密码 | 配置后无需密码 |
| 配置复杂度 | 简单 | 较复杂 |
| 适用场景 | 临时访问、测试环境 | 生产环境、自动化脚本 |
| 等保合规 | 不符合三级要求 | 符合三级要求 |
步骤 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),然后重新生成新的密钥对。
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 组名 # 拒绝特定组登录
工作原理: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是一个专门用于在 Linux 系统下隐藏指定进程的动态链接库。通过拦截系统调用,可让特定进程在ps、top等常规进程查看工具中 "凭空消失"。
技术原理:利用 Linux 的LD_PRELOAD预加载机制,将自定义库注入所有由 bash 启动的进程。在系统调用读取/proc目录项时,重载readdir()与readdir64()函数,对返回结果进行过滤,直接剔除目标进程名,达成 "隐形" 效果。
安全警示:该技术是恶意软件(如 Rootkit、挖矿木马)常用的 "反检测" 手段。理解它是为了更好地防御,而非用于非法用途。
\# 安装编译工具
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 # 项目说明
\# 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
\# 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
限制 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、入侵检测、基线检查 | 多层防御不留死角 |
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。