云计算百科
云计算领域专业知识百科平台

Ubuntu服务器安全加固完全指南

Ubuntu 服务器安全加固完全指南:从小白到入门

本文适合 Linux 新手,手把手教你完成服务器安全加固。每个步骤都有详细说明,包括命令、作用和预期结果。

写在前面

如果你刚买了一台云服务器,装上了宝塔面板或者其他管理工具,可能会收到一些安全警告。这些警告看起来很专业,但其实都是在提醒你:你的服务器有安全漏洞,需要修复。

本文会带你一步步解决这些问题。不需要深厚的 Linux 基础,只要会复制粘贴命令就行。

重要提醒:

  • 修改配置前一定要备份
  • 不要关闭当前 SSH 窗口,先开新窗口测试
  • 如果出错,可以用备份恢复

目录

  • 问题一:重复 UID(高危)
  • 问题二:SSH 安全配置(高危)
    • SSH 超时设置
    • SSH 登录警告
    • 禁用危险选项
  • 问题三:网络安全参数配置(中危)
    • ICMP 防护
    • 路由和转发防护
    • TCP 防护
  • 系统安全加固(中危)
    • 禁止空密码 sudo
    • 限制核心转储
    • Shell 超时退出
    • /tmp 目录安全
    • SUID/SGID 文件检查
  • 总结与建议
  • 常见问题解答

  • 问题一:重复 UID(高危)

    什么是 UID?

    UID(User ID)是 Linux 系统中每个用户的唯一标识符。其中 UID 0 是 root 用户的专属 ID,拥有系统最高权限。

    为什么重复 UID 0 很危险?

    如果有其他用户(比如 apache2)也有 UID 0,那它就等同于 root,可以做任何事情。这就像给了小偷一把你家的钥匙。作者亲身经历服务器被植入了挖矿程序,攻击者就是通过apache2来操作的

    重复UID警告示例

    检查和修复

    步骤 1:检查哪些用户的 UID 为 0

    grep ":0:" /etc/passwd

    预期结果:正常情况下应该只有一行:

    root:x:0:0:root:/root:/bin/bash

    如果看到其他用户(如 apache2),说明有问题。


    步骤 2:检查是否有进程在使用这个用户

    ps aux | grep apache2 | head -n 5

    如果没有输出,说明没有进程在使用,可以安全删除。


    步骤 3:备份并删除异常用户

    # 备份原文件(重要!)
    sudo cp /etc/passwd /etc/passwd.backup
    sudo cp /etc/shadow /etc/shadow.backup

    # 删除 apache2 用户
    sudo sed -i '/^apache2:/d' /etc/passwd
    sudo sed -i '/^apache2:/d' /etc/shadow

    解释:

    • sed -i 表示直接修改文件
    • /^apache2:/d 表示删除以 apache2 开头的行

    步骤 4:验证修复结果

    grep ":0:" /etc/passwd

    预期结果:应该只剩下 root 用户。


    问题二:SSH 安全配置(高危)

    SSH 是你远程登录服务器的通道,如果配置不当,就像给黑客留了一扇敞开的门。

    SSH安全警告示例

    2.1 SSH 超时设置

    为什么要设置超时?

    想象这样的场景:你 SSH 登录服务器后去喝咖啡,忘记退出。如果有人接触到你的电脑,就能直接操作你的服务器。设置超时可以自动断开空闲连接。


    步骤 1:备份配置文件

    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

    作用:万一改错了,可以用这个备份恢复。


    步骤 2:编辑 SSH 配置

    sudo nano /etc/ssh/sshd_config

    找到以下几行(大约在第 39 和 104 行附近),修改为:

    # 原始内容(被注释掉的):
    #LoginGraceTime 2m
    #ClientAliveInterval 0
    #ClientAliveCountMax 3

    # 修改为:
    LoginGraceTime 30
    ClientAliveInterval 300
    ClientAliveCountMax 2
    MaxAuthTries 3

    参数说明:

    参数含义实际效果
    LoginGraceTime 30 登录过程最多 30 秒 输入密码超过 30 秒自动断开
    ClientAliveInterval 300 每 300 秒检查一次客户端 每 5 分钟发送一次"保活"消息
    ClientAliveCountMax 2 客户端 2 次不响应就断开 10 分钟无操作自动断开(300×2)
    MaxAuthTries 3 密码最多尝试 3 次 防止暴力破解

    保存退出(Ctrl+X → Y → Enter)。


    步骤 3:测试配置语法

    sudo sshd -t

    预期结果:如果没有输出,说明配置正确。如果有错误提示,检查刚才的修改。


    步骤 4:重启 SSH 服务

    sudo systemctl restart sshd

    重要:不要关闭当前窗口!先开一个新窗口测试能否正常登录。


    步骤 5:验证服务状态

    sudo systemctl status sshd

    预期结果:应该看到 Active: active (running)。


    2.2 设置 SSH 登录警告

    为什么要设置登录警告?

    登录警告有两个作用:

  • 法律保护:明确告知这是私人系统,未授权访问违法
  • 威慑作用:让潜在攻击者知道他们的行为会被记录

  • 步骤 1:创建警告文件

    sudo nano /etc/ssh/sshd_banner

    粘贴以下内容(可根据需要修改):

    ***************************************************************************
    警告 / WARNING
    ***************************************************************************
    本系统仅供授权用户使用。未经授权的访问或使用将被记录并可能受到法律追究。
    继续登录即表示您同意接受监控。

    This system is for authorized users only. Unauthorized access or use
    will be logged and may result in legal action. By continuing to log in,
    you agree to be monitored.
    ***************************************************************************

    保存退出。


    步骤 2:配置 SSH 使用这个警告文件

    sudo nano /etc/ssh/sshd_config

    找到 #Banner none 这一行,修改为:

    Banner /etc/ssh/sshd_banner

    注意:如果文件中有多个 Banner 配置,删除或注释掉其他的,只保留这一行。


    2.3 禁用危险选项

    在同一个 sshd_config 文件中,找到 #PermitUserEnvironment,修改为:

    PermitUserEnvironment no

    作用:防止用户通过 SSH 设置环境变量,这可能被利用来提权。

    保存退出。


    步骤 3:重启 SSH 服务

    sudo systemctl restart sshd


    步骤 4:验证配置

    grep -E "Banner|PermitUserEnvironment" /etc/ssh/sshd_config | grep -v "^#"

    预期结果:

    Banner /etc/ssh/sshd_banner
    PermitUserEnvironment no


    问题三:网络安全参数配置(中危)

    什么是 sysctl?

    sysctl 是 Linux 内核参数配置工具,可以控制网络、内存、文件系统等底层行为。我们要修改的是网络安全相关参数。

    网络安全警告示例

    为什么要配置这些参数?

    网络攻击有很多种,比如:

    • Smurf 攻击:攻击者用你的 IP 广播 ping,让大量主机回复淹没你
    • ICMP 重定向攻击:攻击者伪装成路由器,把你的流量导向恶意服务器
    • SYN 洪水攻击:攻击者发送大量 SYN 包但不完成握手,耗尽服务器连接资源

    这些参数就是用来防御这些攻击的。


    配置步骤

    步骤 1:创建安全配置文件

    sudo nano /etc/sysctl.d/99-security.conf


    步骤 2:添加配置内容

    将以下内容复制粘贴到文件中:

    #===== ICMP 防护配置 =====

    # 忽略广播 ping 请求(防止 Smurf 攻击)
    net.ipv4.icmp_echo_ignore_broadcasts = 1

    # 拒绝 IPv4 ICMP 重定向消息(防止中间人攻击)
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0

    # 拒绝 IPv6 ICMP 重定向消息
    net.ipv6.conf.all.accept_redirects = 0
    net.ipv6.conf.default.accept_redirects = 0

    # 拒绝安全 ICMP 重定向(即使来自网关也不接受)
    net.ipv4.conf.all.secure_redirects = 0
    net.ipv4.conf.default.secure_redirects = 0

    # 忽略伪造的 ICMP 错误响应
    net.ipv4.icmp_ignore_bogus_error_responses = 1

    # 记录可疑的数据包到日志
    net.ipv4.conf.all.log_martians = 1
    net.ipv4.conf.default.log_martians = 1

    #===== 路由和转发防护 =====

    # 禁用 IPv6 数据包转发
    net.ipv6.conf.all.forwarding = 0

    # 禁止发送 IPv4 重定向消息(防止你的服务器被用来攻击别人)
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0

    # 拒绝 IPv4 源路由数据包(防止攻击者指定数据包路径)
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0

    # 拒绝 IPv6 源路由数据包
    net.ipv6.conf.all.accept_source_route = 0
    net.ipv6.conf.default.accept_source_route = 0

    # 禁用 IPv6 路由器通告(防止伪造的路由器欺骗)
    net.ipv6.conf.all.accept_ra = 0
    net.ipv6.conf.default.accept_ra = 0

    #===== TCP 防护 =====

    # 启用 TCP SYN Cookie 保护(防止 SYN 洪水攻击)
    net.ipv4.tcp_syncookies = 1

    # 启用反向路径过滤(防止 IP 欺骗)
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1

    保存退出。


    关于 IPv4 转发的说明:

    如果你的服务器没有安装 Docker 或不需要做路由器,可以添加这一行:

    net.ipv4.ip_forward = 0

    但如果你安装了 Docker,不要添加这一行,否则 Docker 容器无法联网。


    步骤 3:应用配置

    sudo sysctl -p /etc/sysctl.d/99-security.conf

    预期结果:会输出所有配置项和它们的值,表示配置已生效。


    配置项详解

    为了帮助你理解这些配置的作用,这里列出几个重要的:

    配置项作用防护什么
    icmp_echo_ignore_broadcasts = 1 忽略广播 ping 防止 Smurf 攻击(攻击者用你的 IP 广播 ping,让大量主机回复淹没你)
    accept_redirects = 0 拒绝 ICMP 重定向 防止攻击者伪装成路由器,把你的流量导向恶意服务器
    tcp_syncookies = 1 启用 SYN Cookie 防止 SYN 洪水攻击(攻击者发送大量 SYN 包但不完成握手,耗尽服务器连接资源)
    rp_filter = 1 反向路径过滤 检查数据包的源 IP 是否合法,防止攻击者伪造源 IP 地址
    accept_source_route = 0 拒绝源路由包 源路由允许发送者指定数据包路径,攻击者可以用来绕过防火墙

    系统安全加固(中危)

    4.1 禁止空密码 sudo

    为什么要检查这个?

    如果系统允许用户不输入密码就能使用 sudo,那就等于给了他们免费的 root 权限。这是非常危险的。


    步骤 1:检查当前配置

    sudo grep -r "NOPASSWD" /etc/sudoers /etc/sudoers.d/

    预期结果:

    • 如果没有输出,说明配置安全 ✅
    • 如果有输出,需要根据具体情况处理

    特殊情况:如果看到类似这样的输出:

    /etc/sudoers.d/90-cloud-init-users:root ALL=(ALL) NOPASSWD:ALL

    这是 root 用户的配置,是安全的。因为 root 本身就是最高权限,不需要密码是合理的。

    真正的风险是普通用户(如你的登录用户)能无密码 sudo。


    步骤 2:如果发现普通用户有 NOPASSWD

    sudo visudo

    找到包含 NOPASSWD 的行,删除或注释掉(在行首加 #)。

    保存退出(Ctrl+X → Y → Enter)。


    4.2 限制核心转储

    什么是核心转储?

    当程序崩溃时,系统会把程序的内存内容保存到一个文件(core dump),方便开发者调试。

    为什么要禁用?

    核心转储文件可能包含敏感信息:

    • 用户密码
    • API 密钥
    • 数据库连接字符串
    • 用户的个人数据

    如果攻击者获取到这些文件,就能分析出程序的内存内容,窃取敏感信息。

    实际场景:

    假设你的网站程序崩溃了,生成了一个 core dump 文件。如果这个文件被攻击者下载,他可能从中提取出数据库密码,然后直接访问你的数据库。


    配置步骤

    步骤 1:限制所有用户的核心转储大小为 0

    echo "* hard core 0" | sudo tee -a /etc/security/limits.conf

    解释:

    • * hard core 0:所有用户(*)的核心转储大小硬限制(hard)为 0
    • tee -a:追加到文件末尾

    步骤 2:禁用 SUID 程序的核心转储

    echo "fs.suid_dumpable = 0" | sudo tee -a /etc/sysctl.d/99-security.conf
    sudo sysctl -p /etc/sysctl.d/99-security.conf

    解释:

    • SUID 程序权限高,更危险,必须禁止它们生成核心转储
    • sysctl -p 立即应用配置

    步骤 3:验证配置

    # 查看 limits.conf 中的配置
    tail -5 /etc/security/limits.conf

    # 查看 sysctl 配置
    sysctl fs.suid_dumpable

    预期结果:

    • limits.conf 末尾应该有 * hard core 0
    • sysctl 应该显示 fs.suid_dumpable = 0

    4.3 Shell 无操作超时退出

    为什么要设置这个?

    想象这样的场景:你 SSH 登录服务器后去开会,忘记退出。如果有人接触到你的电脑(或者你在咖啡厅用公共 WiFi),他们就能直接操作你的服务器。

    设置超时可以自动断开空闲会话,减少会话劫持风险。


    配置步骤

    方法一:使用单行命令(推荐)

    echo -e "TMOUT=900\\nreadonly TMOUT\\nexport TMOUT" | sudo tee /etc/profile.d/timeout.sh > /dev/null && sudo chmod 644 /etc/profile.d/timeout.sh


    方法二:手动创建文件

    sudo nano /etc/profile.d/timeout.sh

    粘贴以下内容:

    TMOUT=900
    readonly TMOUT
    export TMOUT

    保存退出,然后设置权限:

    sudo chmod 644 /etc/profile.d/timeout.sh


    参数说明:

    参数含义
    TMOUT=900 设置超时时间为 900 秒(15 分钟)
    readonly TMOUT 防止用户修改这个变量
    export TMOUT 使变量对所有子进程生效

    验证配置

    cat /etc/profile.d/timeout.sh

    预期结果:应该显示刚才添加的三行内容。

    注意:这个设置不会影响后台运行的程序(如 screen、tmux、systemd 服务)。


    4.4 禁止在 /tmp 中创建 SUID 文件

    什么是 SUID?

    SUID(Set User ID)是一种特殊权限,允许普通用户以文件所有者的权限执行程序。

    例如:/usr/bin/passwd 命令有 SUID 权限,普通用户执行时会以 root 权限运行,才能修改密码文件。


    为什么要在 /tmp 禁用 SUID?

    /tmp 是所有用户都可写的目录,攻击者可能在这里放置恶意的 SUID 程序。如果这个程序属于 root,执行时就能获得 root 权限。这是常见的提权攻击手段。

    实际场景:

    攻击者通过某个漏洞上传了一个恶意程序到 /tmp 目录,并设置了 SUID 权限。当你或其他用户执行这个程序时,它就能以 root 权限运行,窃取数据或植入后门。


    配置步骤

    步骤 1:检查当前 /tmp 的挂载状态

    mount | grep /tmp

    如果没有输出,说明 /tmp 没有单独挂载,需要配置。


    步骤 2:创建 systemd 配置目录

    sudo mkdir -p /etc/systemd/system/tmp.mount.d


    步骤 3:创建安全选项配置

    echo -e "[Mount]\\nOptions=mode=1777,strictatime,nosuid,nodev" | sudo tee /etc/systemd/system/tmp.mount.d/options.conf


    步骤 4:创建 tmp.mount 单元文件

    sudo nano /etc/systemd/system/tmp.mount

    粘贴以下内容:

    [Unit]
    Description=Temporary Directory /tmp
    ConditionPathIsSymbolicLink=!/tmp
    DefaultDependencies=no
    Conflicts=umount.target
    Before=local-fs.target umount.target

    [Mount]
    What=tmpfs
    Where=/tmp
    Type=tmpfs
    Options=mode=1777,strictatime,nosuid,nodev

    [Install]
    WantedBy=local-fs.target

    保存退出。


    步骤 5:重新加载 systemd 配置

    sudo systemctl daemon-reload


    步骤 6:启用并启动 tmp.mount

    sudo systemctl enable tmp.mount
    sudo systemctl start tmp.mount


    步骤 7:验证挂载状态

    mount | grep /tmp

    预期结果:应该看到类似这样的输出:

    tmpfs on /tmp type tmpfs (rw,nosuid,nodev,…)

    选项说明:

    选项作用
    nosuid 忽略 SUID/SGID 权限(核心安全选项)
    nodev 不允许设备文件
    mode=1777 所有用户可读写,但只能删除自己的文件

    4.5 检查系统中的 SUID/SGID 文件

    什么是 SUID/SGID 文件?

    • SUID:程序以文件所有者权限运行(通常是 root)
    • SGID:程序以文件所属组权限运行

    合法示例:/usr/bin/passwd、/usr/bin/sudo 等系统工具需要 SUID 权限才能正常工作。


    为什么要定期检查?

    攻击者可能在系统中植入恶意的 SUID 程序,用于提权攻击。定期检查可以发现异常文件。


    检查步骤

    sudo find / -type f \\( -perm -4000 -o -perm -2000 \\) -ls 2>/dev/null | head -20

    参数说明:

    • -perm -4000:查找 SUID 文件
    • -perm -2000:查找 SGID 文件
    • 2>/dev/null:忽略错误信息
    • head -20:只显示前 20 个结果

    如何判断是否正常?

    正常的 SUID 工具(需要 root 权限才能工作):

    • /usr/bin/mount、/usr/bin/umount – 挂载/卸载文件系统
    • /usr/bin/passwd、/usr/bin/chfn – 修改密码和用户信息
    • /usr/bin/sudo – sudo 命令
    • /usr/lib/openssh/ssh-keysign – SSH 密钥签名

    正常的 SGID 工具(需要特定组权限):

    • /usr/bin/crontab – 定时任务管理
    • /usr/sbin/unix_chkpwd – 密码验证

    警惕这些情况:

  • 不认识的文件:如果发现不熟悉的 SUID 文件,需要调查
  • 不在标准路径:如果在 /tmp、/home 等目录发现 SUID 文件,高度可疑
  • 最近修改的文件:如果发现最近才创建的 SUID 文件,需要警惕
  • 建议:每月运行一次这个检查命令,记录结果,对比是否有新增的可疑文件。


    总结与建议

    配置完成检查清单

    完成上述所有配置后,你的服务器安全性已经大幅提升。让我们回顾一下都做了什么:

    高危问题(已解决):

    • ✅ 删除了重复的 UID 0 用户
    • ✅ 配置了 SSH 超时机制(10 分钟无操作自动断开)
    • ✅ 设置了 SSH 登录警告
    • ✅ 禁用了 SSH 危险选项

    中危问题(已解决):

    • ✅ 配置了网络安全参数(防止 ICMP 攻击、SYN 洪水等)
    • ✅ 禁止了空密码 sudo
    • ✅ 限制了核心转储
    • ✅ 设置了 Shell 超时退出(15 分钟)
    • ✅ 禁止了 /tmp 中的 SUID 文件
    • ✅ 检查了系统中的 SUID/SGID 文件

    后续维护建议

    1. 定期检查(每月一次)

    # 检查 SUID/SGID 文件
    sudo find / -type f \\( -perm -4000 -o -perm -2000 \\) -ls 2>/dev/null > /root/suid_check_$(date +%Y%m%d).txt

    # 检查最近修改的系统文件
    sudo find /etc /usr/bin /usr/sbin -type f -mtime -30 -ls 2>/dev/null

    2. 查看系统日志

    # 查看 SSH 登录日志
    sudo tail -100 /var/log/auth.log | grep sshd

    # 查看可疑的网络数据包日志
    sudo dmesg | grep martian

    3. 保持系统更新

    # 更新软件包列表
    sudo apt update

    # 升级所有软件包
    sudo apt upgrade -y

    # 清理旧的软件包
    sudo apt autoremove -y

    4. 备份重要配置

    建议定期备份以下文件:

    • /etc/ssh/sshd_config
    • /etc/sysctl.d/99-security.conf
    • /etc/security/limits.conf
    • /etc/sudoers

    安全加固的局限性

    虽然我们做了很多配置,但需要明白:

  • 这不是万能的:安全加固只是降低风险,不能完全消除风险
  • 应用层安全同样重要:网站代码的漏洞(如 SQL 注入、XSS)需要单独处理
  • 防火墙很重要:建议配置防火墙(如 ufw 或 iptables),只开放必要的端口
  • 密码强度:使用强密码或密钥认证,禁用密码登录更安全

  • 进一步提升安全性

    如果你想进一步提升安全性,可以考虑:

    1. 使用 SSH 密钥认证

    # 在本地生成密钥对
    ssh-keygen -t ed25519 -C "your_email@example.com"

    # 将公钥复制到服务器
    ssh-copy-id user@your_server_ip

    # 然后在服务器上禁用密码登录
    sudo nano /etc/ssh/sshd_config
    # 设置:PasswordAuthentication no

    2. 安装 Fail2Ban

    Fail2Ban 可以自动封禁多次登录失败的 IP:

    sudo apt install fail2ban -y
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban

    3. 配置防火墙

    # 安装 ufw
    sudo apt install ufw -y

    # 允许 SSH
    sudo ufw allow 22/tcp

    # 允许 HTTP 和 HTTPS
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp

    # 启用防火墙
    sudo ufw enable

    4. 定期审计

    使用工具如 Lynis 进行安全审计:

    sudo apt install lynis -y
    sudo lynis audit system


    常见问题解答

    Q1: 修改配置后无法登录怎么办?

    A: 这就是为什么我们强调"不要关闭当前 SSH 窗口"。

    解决方法:

  • 在原来的窗口中恢复备份:
  • sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
    sudo systemctl restart sshd

  • 如果完全无法登录,需要通过云服务商的控制台(VNC)登录,然后恢复配置。

  • Q2: Docker 容器无法联网了怎么办?

    A: 这是因为禁用了 IPv4 转发。

    解决方法:

    # 编辑 sysctl 配置
    sudo nano /etc/sysctl.d/99-security.conf

    # 删除或注释掉这一行:
    # net.ipv4.ip_forward = 0

    # 或者改为:
    net.ipv4.ip_forward = 1

    # 应用配置
    sudo sysctl -p /etc/sysctl.d/99-security.conf

    # 重启 Docker
    sudo systemctl restart docker


    Q3: Shell 超时太短,经常被断开怎么办?

    A: 可以调整超时时间。

    解决方法:

    sudo nano /etc/profile.d/timeout.sh

    # 修改 TMOUT 的值(单位:秒)
    # 例如改为 30 分钟:
    TMOUT=1800
    readonly TMOUT
    export TMOUT


    Q4: 如何查看哪些 IP 在尝试登录我的服务器?

    A: 查看 SSH 登录日志。

    # 查看所有登录尝试
    sudo grep "Failed password" /var/log/auth.log | tail -20

    # 统计失败次数最多的 IP
    sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10


    Q5: 配置完成后,宝塔面板还是显示警告怎么办?

    A: 可能需要重启服务器或重新扫描。

    解决方法:

  • 在宝塔面板中点击"重新检测"
  • 如果还是显示警告,尝试重启服务器:
  • sudo reboot


    Q6: 这些配置会影响网站性能吗?

    A: 几乎不会。

    这些配置主要是:

    • 限制超时时间(不影响正常使用)
    • 禁用不安全的功能(本来就不应该用)
    • 记录可疑行为(日志开销很小)

    对网站性能的影响可以忽略不计。


    Q7: 我需要定期重复这些配置吗?

    A: 不需要。

    这些配置是一次性的,配置完成后会一直生效。你只需要:

    • 定期检查 SUID 文件(每月一次)
    • 保持系统更新
    • 查看日志,发现异常及时处理

    Q8: 如何验证配置是否真的生效了?

    A: 可以用以下命令验证:

    # 验证 SSH 配置
    grep -E "ClientAliveInterval|ClientAliveCountMax|LoginGraceTime" /etc/ssh/sshd_config | grep -v "^#"

    # 验证网络安全参数
    sysctl net.ipv4.tcp_syncookies
    sysctl net.ipv4.icmp_echo_ignore_broadcasts

    # 验证核心转储限制
    sysctl fs.suid_dumpable
    tail -5 /etc/security/limits.conf

    # 验证 Shell 超时
    cat /etc/profile.d/timeout.sh

    # 验证 /tmp 挂载选项
    mount | grep /tmp


    Q9: 我的服务器被攻击了,这些配置能防住吗?

    A: 这些配置可以降低风险,但不能保证 100% 安全。

    如果发现被攻击:

  • 立即断开网络连接
  • 检查系统日志,找出入侵途径
  • 修改所有密码
  • 检查是否有后门程序
  • 必要时重装系统
  • 预防措施:

    • 使用强密码或密钥认证
    • 安装 Fail2Ban
    • 配置防火墙
    • 定期备份数据

    Q10: 我可以在生产环境直接使用这些配置吗?

    A: 可以,但建议先在测试环境验证。

    注意事项:

  • 如果有 Docker,不要禁用 IPv4 转发
  • 如果有特殊需求(如需要 ICMP),相应调整配置
  • 修改前做好备份
  • 分步骤执行,每一步都验证

  • 结语

    服务器安全是一个持续的过程,不是一劳永逸的。完成这些配置后,你的服务器已经比默认配置安全很多了。

    但记住:

    • 定期更新系统
    • 关注安全公告
    • 定期检查日志
    • 做好数据备份

    安全无小事,希望这篇文章能帮到你!


    参考资料:

    • CIS Ubuntu 20.04 Benchmark
    • Linux Security Hardening Guide
    • SSH Security Best Practices

    最后更新:2026-01-31

    如果觉得有帮助,欢迎点赞收藏!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Ubuntu服务器安全加固完全指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!