在 Linux 服务器的安全配置中,有两个互相配合的核心原则:禁止 root 用户直接远程登录,以及遵循最小权限原则分配系统访问能力。它们看似简单,却能有效阻止大量自动化攻击和人为误操作。
1. 为什么要禁止 root 远程登录?
root 是 Linux 中的超级用户,拥有对系统的完全控制权。如果允许 root 通过 SSH 远程登录,攻击者只需要猜解一个用户名(root)和一个密码,就能获得系统的最高权限。而且,已知用户名为 root 会使暴力破解的难度大幅降低。
实用做法:配置 SSH 守护进程(sshd)拒绝 root 的密码登录和密钥登录。
编辑 /etc/ssh/sshd_config,确保以下参数正确设置:
PermitRootLogin no
修改后重启 sshd 服务使其生效:
sudo systemctl restart sshd
此时,任何试图以 root 身份直接登录的尝试都会被拒绝。管理员必须先以普通用户身份登录,然后通过 su 或 sudo 临时提权,留下的审计日志会清晰记录谁在什么时候获得了管理员权限。
2. 最小权限原则:只给必要的权限
最小权限原则要求每个用户或进程只能拥有完成其任务所必需的权限,不多也不少。在日常操作中,这通常体现为:
- 用
sudo代替直接使用 root:普通用户通过sudo执行特定管理命令,而不需要知道 root 密码。通过/etc/sudoers可以精确控制哪些用户能在哪些主机上以哪些身份执行哪些命令。例如,让webadmin用户只能重启 web 服务:
webadmin ALL=(root) /usr/bin/systemctl restart nginx
- 服务进程使用专用低权限账户:安装 Nginx、MySQL 等服务时,包管理器通常会自动创建专用系统账户(如
nginx、mysql),这些账户没有 shell 登录权限,也没有对其他服务文件的写权限,只运行被授权的服务进程。
- 限制文件访问:严格设置目录和文件的权限(
chmod、chown),确保用户只能读写其工作所必需的文件。避免任何“为了方便”而临时将敏感文件设为777(所有人可读可写可执行)的操作。
- 使用防火墙白名单:只开放必要的端口,例如只允许来自特定 IP 段的 SSH 连接,拒绝所有其他入站流量。
3. 组合效果与实际例子
一个典型的安全配置流程如下:
- 创建个人管理账户(例如
yourname),并设置强密码或配置 SSH 密钥认证。 - 将
yourname加入wheel或sudo组,使其能够通过sudo提权。 - 修改
/etc/ssh/sshd_config中PermitRootLogin no,禁止 root 直接远程登录。 - 可选地,设置
PasswordAuthentication no只用密钥登录,进一步减少风险。 - 日常管理时,先用普通用户 SSH 登录,需要用管理员权限时执行
sudo <command>。系统会记录下所有sudo操作,便于审计。
通过禁止 root 远程登录和贯穿始终的最小权限实践,一台标准 Linux 服务器的攻击面会大幅减少。即使攻击者获得了某个服务的控制权,由于该服务运行在受限账户下,也很难横向提权或破坏系统完整性。这正是 Linux 安全模型在现实生产环境中最基础也最有效的构建方式。