新手勇闯网络安全 | Linux安全基础(四)

0 阅读9分钟

前三篇掌握了 Linux 命令行、权限机制和运维排查,这一篇进入远程管理与反检测的核心战场。软件怎么装、SSH 怎么安全登录、服务怎么加固、黑客如何隐藏进程——每一项都是内网渗透和系统加固的必考点。看完你就能从零搭建一套安全的 SSH 远程管理体系,并理解恶意程序的隐身原理。


一、软件安装与更新

1.1 包管理器对比

主流发行版包文件格式默认包管理器系统更新核心命令
CentOS / RHEL / Fedora.rpmyum / dnfyum update / dnf update
Ubuntu / Debian / Kali.debapt / apt-getapt 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 公钥认证原理(难点)

核心概念:非对称加密——公钥加密,私钥解密。

形象比喻:

  • 公钥 = 锁头(可以公开给别人,用于加密)
  • 私钥 = 唯一的钥匙(必须自己保管,用于解密)
  • 服务器 = 装了锁头的房间,只认锁不认人
  • 客户端 = 想进房间的人,有能开锁的钥匙就能进

认证流程六步走

  1. 客户端本地生成"公钥 + 私钥"密钥对
  2. 手动将公钥上传到服务器
  3. 客户端向服务器发起 SSH 登录请求
  4. 服务器用公钥加密随机"挑战码"发回
  5. 客户端用私钥解密挑战码,并回传结果
  6. 验证通过即建立连接,允许登录

为什么公钥认证更安全

  • 私钥永不传输,只传输解密后的挑战
  • 几乎无法被暴力破解(密钥长度通常 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 系统下隐藏指定进程的动态链接库。通过拦截系统调用,可让特定进程在 pstop 等常规进程查看工具中"凭空消失"。

技术原理:利用 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 安全防护建议

  1. 限制 LD_PRELOAD:在 /etc/ld.so.preload 中配置受信任的库,定期检查该文件是否被篡改
  2. 启用 SELinux / AppArmor:限制预加载机制的滥用
  3. 监控 /proc 目录:异常进程隐藏可能留下痕迹
  4. 使用入侵检测系统:如 AIDE、Tripwire 等,监控系统文件完整性
  5. 定期安全基线检查:检查系统库文件和预加载配置

五、知识小结

知识模块核心内容一句话速记
包管理器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、入侵检测、基线检查多层防御不留死角