很早之前就看过关于Linux安全建议的文章,其中有一条便是:禁用root账户,平时使用普通账号,必要时通过sudo命令获取root权限(或者至少禁用root的ssh登录,登录后再用sudo或者su切换到root)。

之前在Ubuntu上吃过亏,因此我偏向于为root账户设置密码,root账户让我充满着对机器的掌控感。但暴露在公网的服务器,安全毕竟十分重要,因此按照安全建议在部分重要机器上禁止了root账户远程登录,改用普通用户+sudo提权模式。

Linux使用sudo切换root账户
Linux使用sudo切换root账户

使用一段时间后,我发现禁用root账户并没有带来太多安全性提升,反而会导致日常管理十分不便。这也让我反思如何才是禁用root账户的正确方式?

经过一番思考,个人得出禁用root的场景:

  1.  桌面环境使用;例如在个人电脑上安装桌面版的Ubuntu、Debian、Fedora等系统日常使用,推荐不创建root账户;
  2.  多人使用的工作站、服务器环境,并且自己也作为普通用户进行日常使用。

其实上面场景的核心是:平时会以普通用户身份使用Linux,因此禁用root账户是推荐的,不必记住两套密码。

而以下场景则无须禁用root账户,否则scp上传等操作会带来额外的麻烦:

  1. Linux系统只有你一个人用,并且用作服务器,做的都是服务器管理和运维操作;
  2. 多人使用场景下,你是运维/管理员,不会以普通身份使用服务器。

没必要禁用root账户核心点是,服务器的管理/运维人员,不会以普通身份使用服务器。因为维护服务器相对来说使用次数较少,每次使用几乎都要运行特权命令。

当然,无论是否禁用root账户,以下安全操作是推荐的:

  1.  有条件的情况下将服务器隔离,使用跳板机或者VPN登录;
  2.  暴露于公网环境的服务器,修改默认的22端口;
  3.  暴露于公网的服务器,修改为密钥登录或者密码加Google authenticator/短信/token二次授权登录;
  4.  服务器重要数据做好备份。

参考

  1. Does disabling root login enhance security?
  2. Linux系统su和sudo命令的区别
  3. Linux禁止修改密码