Linux安全加固手册实战:用户、网络与文件系统配置避坑指南

发布时间:2026/11/3 19:37:22

Linux安全加固手册实战:用户、网络与文件系统配置避坑指南 简介这份《LINUX安全加固手册》面向系统管理员、运维工程师及信息安全初学者聚焦Linux主机从安装到网络服务的安全配置实践帮助读者建立系统化的加固思路。手册以PDF形式呈现压缩包内共1个文件体积约40KB篇幅精简、目录清晰便于快速检索与随身查阅。内容围绕密码安全策略、密码shadowing与密码管理、用户帐号安全检查以及服务过滤、/etc/inetd.conf、R服务、Tcp_wrapper、/etc/hosts.equiv、NFS、Sendmail、finger等网络服务安全条目逐项展开兼顾基础安装设置与高级服务收敛。已有1338人学习适合作为日常加固检查清单与配置参考帮助读者对照条目排查弱口令、冗余服务与访问控制风险形成可落地的安全基线。1. 拿到一份 16 页的 LINUX 安全加固手册先别急着照着敲上周有个做运维的朋友发来一份 PDF说是在某台老服务器的备份目录里翻出来的文件名就叫《LINUX安全加固手册》一共 16 页目录从安装、用户帐号安全、网络服务安全一路排到文件系统安全。他问我这东西还能用吗我翻了一遍结论是——能用但不能当“一键脚本”用。它更像一份检查清单把 Linux 主机从装完系统到对外提供服务之间该堵的洞按模块列了一遍。适合谁适合手里有台刚装好的 CentOS 或 RHEL 老版本、需要做基线加固但又不想上来就套一堆自动化工具的人。新手可以照着步骤走一遍建立手感熟手可以拿它当对照表查自己漏了哪几项。下面我按这份手册的骨架把能落地的部分拆开讲顺带把原文没写透的参数和坑补上。2. 用户帐号安全从密码策略到 shadow 文件四步把入口焊死帐号是整台机器最容易被撬的地方这份手册把这块放在第 3 章顺序是密码策略、密码检查、shadow、密码管理。我按这个顺序拆但会把原文里一笔带过的命令补全并说明每个参数改完看哪里验证。2.1 密码策略落在 /etc/login.defs 和 PAM 两处手册 3.1 说口令至少 6 位、含特殊字符、有有效期3.4 说编辑/etc/login.defs设最长时限和最短字符。实际做的时候要分清login.defs管的是useradd新建用户时的默认值对已有用户不生效真正强制复杂度的是 PAM 的pam_cracklib或pam_pwquality。老系统上常见做法是两处都改。# 1) 改默认策略影响后续新建用户 sed -i s/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/ /etc/login.defs sed -i s/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/ /etc/login.defs sed -i s/^PASS_MIN_LEN.*/PASS_MIN_LEN 8/ /etc/login.defs # 2) 强制复杂度改 PAM 配置老系统是 pam_cracklib新系统是 pam_pwquality # 在 /etc/pam.d/system-auth 的 password 段加入 # password requisite pam_cracklib.so try_first_pass retry3 minlen8 dcredit-1 ucredit-1 lcredit-1 ocredit-1PASS_MAX_DAYS 90是密码最长 90 天过期PASS_MIN_DAYS 7是改完 7 天内不许再改防止用户来回切换绕过历史记录。minlen8配dcredit-1这类负值表示“至少包含 1 个该类别字符”四个负值就是大小写、数字、特殊字符各至少一个。改完用chage -l 用户名看某个账号的过期策略是否生效用passwd改一次密码看复杂度规则是否拦得住弱口令。手册原文只写了“编辑 login.defs”没提 PAM这是它年代较早的痕迹照抄会漏掉真正的强制点。2.2 用 awk 揪出空口令账号比肉眼翻 shadow 靠谱手册 3.3 给了一条命令awk -F: length($2)0 {print $1} /etc/shadow。这条命令的意思是按冒号切分 shadow 文件第二列是密码哈希长度为 0 说明是空口令。空口令账号是血泪经验里最常见的一类翻车点——装系统时建的服务账号忘了锁后面谁都能su进去。# 找出空口令账号 awk -F: length($2)0 {print $1} /etc/shadow # 找出 UID 为 0 的非 root 账号后门排查 awk -F: $30 {print $1} /etc/passwd # 锁定不用的系统账号 for u in adm lp sync shutdown halt news uucp operator games gopher; do usermod -L $u 2/dev/null echo locked: $u done第一条是手册原命令第二条是我一般会顺手加的因为 UID 为 0 的账号等价于 root攻击者常在这里留后门。第三条对应手册 3.5 的“清除不必要的系统帐户”但原文用的是userdel我建议先usermod -L锁定而不是直接删——有些服务账号被进程引用着删了会导致服务起不来锁定的风险小得多。确认某个账号确实没人用再userdel不迟。2.3 chattr i 锁住 passwd 和 shadow但要知道后悔药怎么吃手册 3.5 让对/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow执行chattr i也就是设为不可改变位。这一步能防止攻击者改文件加账号但也会让正常的useradd、passwd全部失败。# 加锁 chattr i /etc/passwd /etc/shadow /etc/group /etc/gshadow # 验证输出里应带 i 标志 lsattr /etc/passwd /etc/shadow # 需要加用户或改密码时先解锁改完再锁回去 chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow useradd deploy chattr i /etc/passwd /etc/shadow /etc/group /etc/gshadow这里的关键不是命令本身而是流程任何需要动账号的操作都得先解锁、再操作、再锁回。我见过有人加完锁忘了第二天passwd报Authentication token manipulation error查了半天以为是 PAM 坏了其实就是这个不可改变位在拦。所以这条我建议写进变更流程而不是随手敲完就算。2.4 限制 su 到 wheel 组别让所有用户都能切 root手册 3.4 提到编辑/etc/pam.d/su加pam_wheel.so groupwheel然后用usermod -G10 admin把用户加进 wheel 组。这一步的价值在于默认任何知道 root 密码的人都能su加上这行之后只有 wheel 组成员能切。# 在 /etc/pam.d/su 头部加入Red Hat 系默认已有去掉注释即可 # auth required pam_wheel.so use_uid groupwheel # 把运维账号加入 wheel 组GID 10 在多数发行版是 wheel usermod -aG wheel deploy # 验证用非 wheel 用户 su应被拒绝 su - rootuse_uid表示按真实 UID 判断groupwheel指定放行组。改完一定要留一个 wheel 组的账号做验证否则可能把自己锁在外面——这是最典型的翻车场景改 PAM 之前先开第二个 SSH 会话挂着确认新配置能登录再关旧的。3. 网络服务安全inetd、tcp_wrapper 与 R 服务的取舍第 4 章是整份手册最厚的一块从服务过滤表到 inetd.conf、R 服务、tcp_wrapper、hosts.equiv再到 NFS、sendmail、ftp。这一章的核心思想只有一句只开需要的服务其余全关。但具体到每个服务怎么关、关完怎么验证原文写得比较散我按可操作的顺序重新组织。3.1 先看 netstat 再动 inetd.conf顺序反了会白干手册 4.2 说确保/etc/inetd.conf权限 600、属主 root、注释掉不需要的服务、重启 inetd然后用netstat -an查看本机服务。实际顺序应该是先看再改先netstat -tulnp列出当前监听端口对照手册 4.1 那张端口表echo 7、systat 11、tftp 69、exec 512、login 513、shell 514 等确定哪些要关再去 inetd.conf 里注释。# 先看当前监听 netstat -tulnp | grep LISTEN # 备份再改 cp -a /etc/inetd.conf /etc/inetd.conf.bak chmod 600 /etc/inetd.conf chown root:root /etc/inetd.conf # 注释掉不需要的服务行示例关掉 shell、login、exec、tftp sed -i -E s/^([^#].*(shell|login|exec|tftp).*)$/#\1/ /etc/inetd.conf # 重启 inetd 并复查 /etc/rc.d/init.d/inetd restart netstat -tulnp | grep -E :(512|513|514|69)\bchmod 600是防止普通用户读到服务配置sed那条只注释匹配到的行不会误伤其他服务。重启后第二条netstat如果还有输出说明服务不是 inetd 拉起的可能是独立守护进程得去chkconfig --list或 systemd 的 unit 里找。手册原文说“重启 inetd 进程”但没提醒“有些服务不归 inetd 管”这是新手最容易卡住的地方。3.2 tcp_wrapper 的 hosts.deny 与 hosts.allow 顺序不能反手册 4.4 讲 tcp_wrapper给的配置是/etc/hosts.deny写ALL: ALLALL, PARANOID/etc/hosts.allow写允许的地址。这里有个容易翻车的细节tcp_wrapper 的匹配顺序是先查 allow 再查 denyallow 里没匹配到才落到 deny。所以 deny 写全拒、allow 写白名单逻辑是对的但如果反过来把 allow 写成全放、deny 写黑名单就等于没防。# /etc/hosts.deny —— 默认全拒 echo ALL: ALLALL, PARANOID /etc/hosts.deny # /etc/hosts.allow —— 只放行运维网段和本机 cat /etc/hosts.allow EOF sshd: 10.0.0.0/255.255.255.0 sshd: 127.0.0.1 EOF # 用 tcpdchk 检查配置语法 tcpdchk -vPARANOID表示主机名和 IP 反解不一致时拒绝能挡掉一部分伪造来源但要求/etc/hosts或 DNS 配置正确否则正常连接也会被误杀。tcpdchk -v是手册提到的检查工具改完一定跑一遍它会告诉你哪条规则写错了。另外手册提醒“使用 tcp_wrapper 时要使用 inetd.conf 中的 nowait 选项”这条针对的是 inetd 管理的服务独立守护进程如 sshd走的是编译时链接 libwrap配置方式不同别混为一谈。3.3 R 服务和 hosts.equiv不用就删要用就锁成 0000手册 4.3 和 4.5 反复强调一件事R 服务rsh、rlogin、rexec和/etc/hosts.equiv如果不用就关掉或删掉如果必须留着预生成文件并设成 0000防止被写入 。 在 hosts.equiv 里的含义是“任何主机任何用户免密登录”攻击者拿到写权限第一件事就是写这个。# 不用 R 服务注释 inetd 里的 exec/login/shell或删 xinetd.d 下对应文件 # Red Hat 7 之后在 /etc/xinetd.d/ 下 for s in exec login shell; do [ -f /etc/xinetd.d/$s ] sed -i s/disable.*.*no/disable yes/ /etc/xinetd.d/$s done # hosts.equiv 和 .rhosts 预生成并锁死 touch /etc/hosts.equiv $HOME/.rhosts chmod 0000 /etc/hosts.equiv $HOME/.rhosts chown root:root /etc/hosts.equivchmod 0000之后连 root 自己读都要先改权限这是故意的——正常业务不该读它读它的时候一定是有人在动配置。手册说“攻击者经常使用类似符号链接或者利用 ROOTSHELL 写入”预生成文件就是为了占住这个路径让符号链接攻击没有落点。验证方法ls -l /etc/hosts.equiv看权限是不是----------再用cat试一下应该报 Permission denied。3.4 NFS 和 sendmail两个最容易“开了就忘”的服务手册 4.8 讲 NFS要点是在外部路由过滤 111 和 2049 端口、检查/etc/exports权限、用showmount -e看自己的导出。4.10 讲 sendmail列了一堆编译特性promiscuous_relay、accept_unqualified_senders等核心是别开开放转发。# 看本机 NFS 导出了什么 showmount -e localhost # /etc/exports 权限收紧 chmod 644 /etc/exports chown root:root /etc/exports # 导出时加只读和 noexec 等限制示例 # /data 10.0.0.0/24(ro,noexec,nodev,nosuid) exportfs -rashowmount -e的输出如果出现/或范围过大的网段基本等于把文件系统摊开了。ro,noexec,nodev,nosuid这四个挂载选项是手册 4.8 末尾提到的作用是只读、禁止执行、禁止设备文件、禁止 suid能大幅降低被挂马的风险。sendmail 那边现代环境多半换成了 postfix但原则一样确认没有开放转发relay_entire_domain别开、banner 改掉别泄露版本、expn/vrfy关掉。手册给的版本号是 sendmail 8.11.1这个版本早就该升级了照抄配置可以版本别照抄。4. 系统设置与文件系统控制台、Ping、挂载选项的边界第 5、6 章讲系统设置和文件系统条目多但每条都不长。我挑几条实际影响大、又容易做错的展开限制控制台、关 Ping、/etc/securetty、挂载选项和备份。4.1 关 Ping 和限制控制台改完要确认没误伤监控手册 5.2 给了一条命令echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all。这条立即生效但重启失效要持久化得写进/etc/sysctl.conf。# 临时关闭 echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all # 持久化 echo net.ipv4.icmp_echo_ignore_all 1 /etc/sysctl.conf sysctl -p # 验证本机 ping 自己应该不通 ping -c 1 127.0.0.1关 Ping 的收益是减少被扫描发现的概率代价是监控系统如果靠 ICMP 探活会全部告警。我一般会先确认监控用的是 TCP 探活再关或者只在外网接口上关、内网保留。手册 5.1 限制控制台是删/etc/security/console.apps/下的 halt、poweroff、reboot、shutdown、xserver再注释/etc/pam.d/里含pam_console.so的行。这一步在只有 SSH 管理的服务器上意义不大但在有物理控制台的场景能防止本地用户随手关机。4.2 /etc/securetty 和挂载选项两个“写了就生效”的硬开关手册 5.4 提/etc/securetty这个文件列的是 root 允许登录的终端。默认包含tty1到tty6如果不想让 root 从控制台登录把内容清空或只留tty1。手册 6.2 说用noexec,nodev,nosuid控制 mount 的文件系统在/etc/fstab里设。# 只允许 root 从 tty1 登录 echo tty1 /etc/securetty # /etc/fstab 中给数据盘加限制选项示例 # /dev/sdb1 /data ext4 defaults,noexec,nodev,nosuid 0 2 mount -o remount /data mount | grep /datanoexec会让该分区上的脚本无法直接执行适合纯数据盘如果分区上有需要执行的程序加了会报Permission denied这是常见误伤。nosuid让 suid 位失效nodev禁止设备文件三个一起加是数据盘的标准做法。改完mount | grep确认选项真的挂上了别只看 fstab 写没写——fstab 写错一行可能导致下次开机进不了系统改之前先cp /etc/fstab /etc/fstab.bak。5. 避坑与排查五条照着手册敲会翻车的记录这份手册年代较早命令和路径带着明显的 Red Hat 6/7 痕迹直接照抄到新系统上会踩坑。下面五条是我和身边人实际遇到过的按“现象 → 原因 → 解决”记下来。第一条chattr i之后useradd报错。现象是加用户时提示无法打开/etc/passwd。原因是不可改变位拦住了写操作。解决是先chattr -i解锁四个文件操作完再锁回并把这一步写进变更清单别靠记忆。第二条改完pam_wheel.so把自己锁在 root 外面。现象是所有账号su都提示拒绝。原因是当前账号不在 wheel 组或者pam_wheel.so那行写错了模块路径。解决是改 PAM 前保留一个已登录的 root 会话不关改完在新会话里验证真锁死了就从单用户模式或救援模式进去把行注释掉。第三条hosts.deny写了ALL: ALL之后 SSH 也断了。现象是配置完 tcp_wrapper 立刻掉线。原因是sshd链接了 libwrapdeny 全拒把 SSH 也拒了而 allow 里没放行当前来源 IP。解决是改之前先把自己的管理 IP 写进hosts.allow改完用tcpdchk检查别在唯一一个会话里直接改。第四条关 Ping 之后监控大面积告警。现象是icmp_echo_ignore_all生效后探活全红。原因是监控依赖 ICMP。解决是关之前确认探活方式或者只对特定接口生效别全局一刀切。第五条/etc/fstab加noexec后应用起不来。现象是某服务启动报脚本无法执行。原因是该分区上放了启动脚本或二进制。解决是mount -o remount,exec /data临时恢复把可执行内容挪到系统盘再重新加noexec。改 fstab 前一定备份并且用mount -a先试挂别等重启才发现。6. 把手册变成可复查的基线我的验证习惯这份手册最大的价值不是那几十条命令而是它给了一个按模块划分的检查框架。我的做法是把它转成一张可复查的基线表每次加固完逐项打勾而不是敲完命令就完事。下面这张表是我从手册里抽出来的高频项列了检查命令和期望结果可以直接拿去用。检查项命令期望结果空口令账号awk -F: length($2)0{print $1} /etc/shadow无输出UID 0 账号awk -F: $30{print $1} /etc/passwd只有 root关键文件锁定lsattr /etc/passwd /etc/shadow带i标志监听端口netstat -tulnp | grep LISTEN只出现业务端口tcp_wrapper 语法tcpdchk -v无报错NFS 导出showmount -e localhost无或范围受限挂载选项mount | grep -E noexec|nosuid数据盘带限制选项密码策略chage -l 用户名过期天数符合预期这张表的好处是可重复执行每次变更后跑一遍比凭记忆靠谱。另外我有个习惯任何涉及 PAM、fstab、inetd 的改动都先在测试机上跑一遍并且改之前cp -a备份原文件到带日期的目录比如/root/backup/20250101/。手册里没写备份这一步但它是所有加固操作的前提——加固本身就是在改系统行为改错了得有后悔药。从那以后我每次动 PAM 或 fstab 之前都强制先开第二个会话验证、先备份再改这个习惯救过我不止一次。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/11/3 19:37:22

TortoiseGit新手入门:图形化Git操作从安装到提交推送

简介:这份资源是面向 Windows 平台 Git 初学者的 TortoiseGit 图文使用教程,以 docx 文档形式系统梳理了从环境搭建到日常协作的完整流程,帮助不熟悉命令行的用户借助右键菜单快速上手版本控制。压缩包内共 1 个 docx 文件,约 1.1…

2026/11/3 19:37:22

TortoiseGit 使用教程:Windows 右键菜单玩转 Git 操作

简介:这份资源是面向 Windows 平台 Git 初学者的 TortoiseGit 图文使用教程,以 docx 文档形式系统梳理了从环境搭建到日常版本控制的完整流程,帮助不熟悉命令行的用户借助右键菜单快速上手 Git。压缩包内共 1 个 docx 文件,约 1.1…

2026/11/3 19:32:21

《深入理解Java虚拟机》第八章学习笔记:虚拟机字节码执行引擎

8.1 概述虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式从外观上来看,所有的Java虚拟机的执行引擎输入、输出都是一致的:输入的是字…

2026/11/3 20:17:26

基于Django与微信小程序的毕业设计导师双向选择系统

1. 项目概述:基于Django与微信小程序的毕业设计导师双向选择系统这个毕业设计选题瞄准了高校教学管理中的一个实际痛点——每年毕业季,学生与导师之间的双向选择过程往往效率低下、信息不对称。传统方式依赖纸质表格或简单线上表单,学生无法全…

2026/11/3 20:17:26

企业邮件安全:从边界防御到智能动态感知架构

1. 企业邮件安全的现状与挑战过去十年间,我参与过数十家企业邮件系统的安全架构设计与升级。最深刻的体会是:传统的边界防御策略正在失效。上周某金融客户的案例就很典型——他们部署了顶级防火墙、反垃圾邮件网关和沙箱系统,但依然被钓鱼邮件…

2026/11/3 20:17:26

GPT-4与ChatGPT辨析:LLM、Transformer与Token实践

简介:《Developing Apps with GPT-4 and ChatGPT》是一份 O’Reilly 出版的英文电子书 PDF,面向希望把大模型能力落地到实际产品的开发者、技术负责人以及生成式 AI 爱好者,重点讨论如何基于 GPT-4 与 ChatGPT 构建智能聊天机器人、内容生成器…

2026/11/3 20:17:26

规格驱动开发:从提示词到可执行代码的实践

1. 项目概述:当提示词遇见规格化编程三年前我第一次尝试用自然语言生成代码时,还需要在GPT对话框里输入大段注释般的描述。如今,在SpecKit工具链的支持下,我只需输入"创建用户注册API,需要邮箱验证和密码强度校验…

2026/11/3 20:17:26

规格驱动开发:从自然语言到可执行代码的自动化实践

1. 项目概述:当提示词遇见规格化编程三年前我第一次尝试用自然语言生成代码时,面对满屏似是而非的函数和混乱的逻辑结构,不得不花费数小时手动修正。而今天在SpecKit工具链的帮助下,同样的需求通过结构化提示词驱动,生…

2026/11/3 20:12:26

Vibe Coding:提升开发效率的心流编程方法论

1. 什么是Vibe Coding?第一次听到Vibe Coding这个词是在一个开发者社区,当时看到有人分享用这种方式完成了一个人月的工作量。简单来说,Vibe Coding是一种强调开发节奏和沉浸感的编程方法论,核心在于通过特定的工具链和工作流&…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑