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

服务器安全加固基础措施

前言

服务器安全加固它们的核心目的都是为了增加攻击者的成本,并减少被自动化脚本攻破的概率

  • 禁用 Root 用户登录

    • 增加暴力破解的难度(最主要原因)
    • 权限审计与责任追溯(区分团队用户)
    • 防止误操作(最小权限原则)
  • 修改 SSH 默认端口 (Port 22)

    • 规避自动化扫描脚本(主要作用)
    • 保持/var/log/secure日志干净

第一步:创建一个拥有sudo权限的普通用户

在禁用Root登录之前,你必须确保有一个普通用户可以登录并执行管理员命令(sudo)。

  • 创建新用户 (假设用户名为 adminuser):
  • useradd -m adminuser

  • 设置密码:
  • passwd adminuser
    # 输入两次新密码

    使用 SSH 密钥对登录(最强推荐)

    目前最主流的SSH验证方式。在你的电脑生成一对密钥(公钥和私钥),把公钥放到服务器上。

    • 配置: 在 /etc/ssh/sshd_config 中设置:

    PubkeyAuthentication yes # 开启密钥登录
    PasswordAuthentication no # 彻底关闭密码登录(!)

    • 注意:在关闭密码登录前,务必确认密钥登录已经配置成功。
  • 授予 sudo 权限:

  • CentOS / RHEL / Fedora:
  • usermod -aG wheel adminuser

  • Ubuntu / Debian:
  • usermod -aG sudo adminuser

  • 关闭 sudo 密码: (可选-取消 sudo 密码虽然方便,但降低了安全性)

  • visudo

    • 这会打开 /etc/sudoers 文件。
    • 默认编辑器可能是 nano(下方有快捷键提示)或 vi/vim

    你需要找到合适的位置(通常在文件末尾添加即可),根据你的需求选择以下 一种 方式:

    方式 A:只针对特定用户(推荐)

    假设你的用户名是 adminuser,在文件最后一行添加:

    adminuser ALL=(ALL:ALL) NOPASSWD: ALL

    • 请将 adminuser 替换为你实际的用户名。
    • NOPASSWD: 是关键指令(注意冒号和空格)。
    方式 B:针对整个用户组(例如 wheel 或 sudo 组)

    如果你希望所有拥有管理员权限的用户都不需要密码:

    找到类似下面这一行(以 % 开头表示组):

    • CentOS / RHEL (通常是 %wheel):

    ## 找到这一行
    %wheel ALL=(ALL) ALL

    ## 修改为:
    %wheel ALL=(ALL) NOPASSWD: ALL

    • Ubuntu/ Debian (通常是 %sudo):

    ## 找到这一行
    %sudo ALL=(ALL:ALL) ALL

    ## 修改为:
    %sudo ALL=(ALL:ALL) NOPASSWD: ALL

    保存并退出
    • 如果你是在 nano 编辑器中 (屏幕下方有 ^O Write Out 等提示):

      • 按 Ctrl + O,然后按 Enter(回车)保存。
      • 按 Ctrl + X 退出。
    • 如果你是在 vi 或 vim 编辑器中:

      • 按 Esc 键退出编辑模式。
      • 输入 :wq 并按回车(保存并退出)。
    验证

    无需重启服务,立即生效。可以输入一个 sudo 命令测试:

    sudo ls /root

    如果直接列出了文件而没有提示输入密码,说明配置成功。


    第二步:修改用户密码

    如果你需要修改当前用户(包括root)或其他用户的密码。

    • 修改当前登录用户的密码:

    passwd

    • 修改特定用户的密码 (需要root权限) :

    passwd 用户名
    # 例如: passwd root 或 passwd adminuser


    第三步:修改SSH配置文件 (端口与Root登录)

    SSH的主配置文件通常位于 /etc/ssh/sshd_config。

  • 备份配置文件 (养成好习惯):
  • cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

  • 编辑配置文件: 使用你熟悉的编辑器(如 vi, vim, 或 nano):
  • vim /etc/ssh/sshd_config

  • 修改 SSH ****端口: 找到 #Port 22 这一行。

  • 去掉前面的 # 注释符号。
  • 将 22 修改为你想要的端口号(建议在 1024-65535 之间,避免冲突,例如 2222)。
  • 修改前: #Port 22
  • 修改后: Port 2222
  • 禁用 Root 登录: 找到 PermitRootLogin 这一行。

  • 如果它是 yes,改为 no。
  • 修改后: PermitRootLogin no
  • 保存并退出:

  • 如果是 vim: 按 Esc,输入 :wq,回车。
  • 如果是 nano: 按 Ctrl+O 保存,Ctrl+X 退出。
  • 开启 SSH 空闲超时自动登出(常搭配使用-可选)

    防止你离开电脑时,已经连接的SSH窗口被他人恶意操作。

    • 做法:修改 /etc/ssh/sshd_config: (或者配置 TMOUT 环境变量 )

    ClientAliveInterval 300 # 服务端每300秒向客户端发送一次心跳
    ClientAliveCountMax 0 # 如果客户端没响应(或空闲),允许尝试0次后断开

    • 作用:如果你去上厕所或下班忘记关终端,5分钟无操作后,连接会自动断开。
    安装防暴力破解神器:Fail2Ban(可选)

    Fail2Ban 是一个自动化保护工具,它会监控系统日志。

    • 原理:如果检测到某个IP在短时间内连续输错密码 N 次(例如5次),它会立即修改防火墙规则,将这个IP封禁(Ban掉)一段时间(例如1小时或永久)。

    • 安装:

      • Ubuntu/Debian: sudo apt install fail2ban
      • CentOS: sudo yum install fail2ban
    • 作用:它是修改SSH端口的最佳搭档。即使你没改端口,有了Fail2Ban,暴力破解脚本试几次就被拉黑了,无法继续尝试

    启用双因子认证 (可选)

    给SSH登录加一把“动态锁”。

    • 做法:在服务器安装 google-authenticator 模块。登录时,除了输入密码(或密钥),还需要输入手机 App(如 Google Authenticator 或 Microsoft Authenticator)上每30秒变化的 6 位数字验证码。

    第四步:配置防火墙 (至关重要)

    在 重启 SSH 服务之前,必须放行新 端口 ,否则你会被锁在外面!

    根据你的操作系统选择对应的防火墙命令:

    情况 A: 如果你是 CentOS 7/8/9 / RHEL (使用 firewalld)
  • 放行新 端口 (例如 2222):
  • firewall-cmd –permanent –add-port=2222/tcp

  • 重新加载防火墙:
  • firewall-cmd –reload

  • SELinux 设置 (如果是 CentOS / RHEL 且开启了SELinux) : 如果修改了端口,SELinux可能会阻止SSH在非标准端口运行。
  • # 安装管理工具 (如果没有)
    yum install -y policycoreutils-python-utils # CentOS 8/Stream
    # 或 yum install -y policycoreutils-python # CentOS 7

    # 允许SSH使用新端口
    semanage port -a -t ssh_port_t -p tcp 2222

    情况 B: 如果你是 Ubuntu / Debian (使用 ufw)
  • 放行新 端口:
  • ufw allow 2222/tcp

  • (注意:如果你还要保留 22端口 作为备用,可以暂时不删,确认无误后再删)
  • 重新加载防火墙:
  • ufw reload

    情况 C: 如果使用的是云服务器 (AWS, 阿里云, 腾讯云等)
    • 务必去云服务商的控制台(网页端) ,找到“安全组”或“防火墙”设置。
    • 添加一条入站规则:协议 TCP,端口 2222,源IP 0.0.0.0/0 (或指定你的IP)。
    • 如果不做这一步,即使系统内部防火墙开了,外部也被云厂商拦截了。

    第五步:重启 SSH 服务并验证

  • 重启 服务:
  • # CentOS / RHEL / Ubuntu / Debian 通用
    systemctl restart sshd

  • 验证 (关键步骤) :

  • 绝对不要关闭当前的 SSH 窗口!
  • 打开一个新的终端窗口(或在你的SSH客户端如PuTTY/Xshell中新建连接)。
  • 尝试使用新用户和新 端口登录:
  • ssh -p 2222 adminuser@你的服务器IP

  • 结果测试:

  • 如果能登录成功 -> 恭喜,配置完成。
  • 尝试用 root 登录 -> 应该提示 “Permission denied”(被拒绝)。
  • 如果新窗口连接不上 -> 回到原来的(未关闭的)窗口检查配置文件和防火墙,把端口改回22,重启服务以恢复访问。
  • 历史命令记录优化(可选)

    防止敏感信息泄露。

    • 背景:你在终端输入的命令会被记录在 ~/.bash_history 中。如果你在命令里带了密码(比如 mysql -u root -p123456),这非常危险。
    • 做法: 在 /etc/profile 或 ~/.bashrc 中设置:

    export HISTTIMEFORMAT="%F %T " # 给历史记录加时间戳,方便审计
    export HISTCONTROL=ignoreboth # 忽略空格开头的命令

    • 技巧:如果你要输入敏感命令,在命令最前面加一个空格,这条命令就不会被记录到历史文件中。

    总结:一套标准的加固方案

    对于大多数生产环境服务器,做到以下 4 点通常就能阻挡绝大部分的攻击:

  • 非 Root + Sudo
  • SSH 改 端口 + 密钥登录 + 禁用密码
  • Fail2Ban 自动封禁
  • 防火墙只开必要 端口
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 服务器安全加固基础措施
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!