存储安全的第一道防线是文件系统权限。默认的Linux安装往往权限过于宽松,我们需要收紧关键系统文件的访问控制,并消除潜在的提权风险。
系统配置文件和用户数据文件必须仅允许root用户写入,防止普通用户或恶意脚本篡改。配置如下命令直接生效:
chown root:root /boot/grub2/grub.cfg
chmod og-rwx /boot/grub2/grub.cfg
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
chmod 600 /etc/gshadow
chmod 755 /etc
chmod 750 /etc/rc.d/init.d/
SUID/SGID允许普通用户以文件所有者(通常是root)身份执行程序,这是提权漏洞的高发区。我们需要扫描并移除不必要的SUID/SGID位。
执行以下命令查找系统中所有携带SUID或SGID的文件:
查找SUID文件
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
查找SGID文件
find / -perm -2000 -type f -exec ls -la {} 2>/dev/null \;
对于非必须的二进制文件(如mount、ping、su等核心命令除外),建议直接移除特殊权限。例如,如果系统中安装了python且带有SUID位,必须立即移除:
chmod a-s /usr/bin/python
chmod a-s /usr/bin/vim
chmod a-s /usr/bin/less
对于存储敏感数据的服务器,静态数据加密是必须的。如果物理硬盘被盗或服务器被非法拆解,没有密钥的人无法读取数据。我们使用LUKS(Linux Unified Key Setup)对数据盘进行加密。
在CentOS/RHEL或Ubuntu/Debian上执行:
CentOS/RHEL
yum install -y cryptsetup
Ubuntu/Debian
apt-get update && apt-get install -y cryptsetup
假设有一块新数据盘 /dev/sdb,我们将对其进行加密。注意:此操作会清空磁盘数据,请确认盘符正确。
1. 对磁盘进行加密初始化(YES必须大写)
cryptsetup luksFormat /dev/sdb
执行后会提示:
WARNING!
========
This will overwrite data on /dev/sdb irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: (输入高强度密码)
Verify passphrase: (再次输入)
加密后的磁盘不能直接挂载,需要先打开映射:
打开加密设备,映射名称为 secure_data
cryptsetup luksOpen /dev/sdb secure_data
输入刚才设置的密码
此时会在 /dev/mapper/ 下生成 secure_data 设备
对其格式化为 ext4 文件系统
mkfs.ext4 /dev/mapper/secure_data
创建挂载点并挂载
mkdir -p /data
mount /dev/mapper/secure_data /data
为了实现开机自动挂载加密盘,我们需要将密钥信息写入配置文件(注意:这要求服务器启动时有人工交互输入密码,或者配置Keyfile,此处演示最安全的交互式配置基础)。
编辑 /etc/crypttab 文件:
cat >> /etc/crypttab << EOF
secure_data /dev/sdb none luks
EOF
编辑 /etc/fstab 文件:
cat >> /etc/fstab << EOF
/dev/mapper/secure_data /data ext4 defaults 0 2
EOF
注意:配置完成后,系统重启时会停在启动界面要求输入LUKS密码,输入正确后 /data 才会自动挂载。
通过配置 /etc/fstab,我们可以限制特定分区的行为,例如禁止执行二进制文件、禁止设备文件访问等,从而防止攻击者在可写目录(如/tmp)植入恶意程序并执行。
/tmp目录通常是所有用户可写的,极易被利用。我们需要添加 noexec(禁止执行)、nosuid(禁止SUID)、nodev(禁止设备文件)选项。
首先备份fstab:

cp /etc/fstab /etc/fstab.bak
编辑 /etc/fstab,找到包含 /tmp 的行。如果/tmp是独立分区,修改挂载选项如下:
UUID=xxxx-xxxx /tmp ext4 defaults,nosuid,nodev,noexec 0 0
验证操作:修改后执行以下命令生效并验证:
mount -o remount /tmp
尝试在/tmp下执行脚本,应提示权限拒绝:
cp /bin/ls /tmp/test_ls
/tmp/test_ls
预期结果:bash: /tmp/test_ls: Permission denied
对于 /home 或 /var/tmp 等用户可写目录,同样建议应用 nosuid 和 nodev 选项:
/etc/fstab 示例
/dev/mapper/vg0-home /home ext4 defaults,nosuid,nodev 0 0
如果攻击者获取了root权限,他们可能会修改系统二进制文件(如ls, ps, sshd)以隐藏后门。AIDE(Advanced Intrusion Detection Environment)通过快照对比,能发现这些文件被篡改的迹象。
CentOS/RHEL
yum install -y aide
Ubuntu/Debian
apt-get install -y aide
首先需要生成系统当前的“指纹”数据库。修改配置文件 /etc/aide.conf,根据需要调整监控的目录(默认配置通常已足够)。
执行初始化:
aide --init
生成的数据库通常位于 /var/lib/aide/aide.db.new.gz。我们需要将其重命名为正式数据库:
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
当怀疑系统被入侵或定期检查时,运行检测:
aide --check
输出结果会详细列出文件变动情况: added: 新增的文件 removed: 删除的文件 changed: 修改的文件(包括权限、内容、哈希值变化)
如果核心系统文件(如/bin/ls)出现在changed列表中,说明系统已被严重破坏,需立即启动应急响应流程。
仅仅加固权限是不够的,必须记录谁在什么时候修改了什么。Linux Auditd系统提供了内核级别的审计日志。
CentOS/RHEL (通常默认安装)
systemctl start auditd
systemctl enable auditd
Ubuntu/Debian
apt-get install -y auditd
systemctl start auditd
我们需要监控 /etc/passwd、/etc/shadow、/etc/sudoers 等文件的变更。
编辑 /etc/audit/audit.rules,添加以下规则:
监控密码文件的写入、属性修改、删除操作
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
监控系统 cron 任务计划变更
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
监控重要系统目录的权限修改
-w /etc -p wa -k etc_config
规则解释: -w: 监控的路径 -p: 监控的操作类型,w=写入,a=属性修改 -k: 给日志打标签,方便检索
重载规则使配置生效
augenrules --load
systemctl restart auditd
当有人修改了 /etc/passwd 后,使用 ausearch 查看日志:
ausearch -k identity -i
输出将包含操作的时间戳、执行命令的用户UID、具体的操作类型以及成功与否的状态。这是追踪存储数据被篡改的最直接证据。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图