Root是Linux和其他类Unix操作系统上的终极账户。这个账户可以访问系统上的全部命令和文件,具有完全的读写和执行权限。用于系统上执行任何类型任务,创建/更新/访问/删除其他用户账号、安装/删除/升级软件包等。因为root用户具有绝对权限,所以其对任何操作系统而言都非常重要。root用户的任何错误都可能对系统正常运行产生巨大影响,如账户可能出现滥用等。禁用root用户可以一定程度上保护服务器的使用,下文是华纳云总结的常用方法。
在阻止root账户访问权限前,要保证您有useradd命令创建一个管理账户,该管理账户支持sudo命令获取root用户权限,且为该用户账户指定了一个强密码。这个方法仅对需要 shell 供用户登录的程序有效,否则sudo、ftp和电子邮件客户端可以访问 root 帐户。这个标志标识创建用户主目录且支持注释:-m-c:
# useradd -m -c "Admin User" admin
# passwd admin
在使用suermod命令把次用户添加到适当的系统管理组,其中-a表示附加用户账户,-G表示添加用户的组:
# usermod -aG wheel admin #CentOS/RHEL
# usermod -aG sudo admin #Debian/Ubuntu
创建具有管理权限的用户后,切换到该账户来阻止根访问:
# su admin
更改root用户shell,从/bin/bash/bin/bash(或任何允许用户登录的其他 shell)更改为/sbin/nologin,在/etc/passwd文件中,可以使用任何您喜欢的命令行编辑器打开该文件进行编辑:
$ sudo vim /etc/passwd
更改此行:
root:x:0:0:root:/root:/bin/bash
到
root:x:0:0:root:/root: /sbin/nologin
保存文件并关闭。现在开始用root用户登录时,将会出现:此账户当前不可用默认提示,可以更改这句提示语,在文件/etc/nologin.txt中设置自定义消息。
还可以通过禁用控制台设备TTY的root登陆。这种方法使用名是pam_securetty的PAM模块,该模块仅当用户登录到“安全” TTY时才允许 root 访问,如/etc/securetty中的列表所定义。上述文件允许指定root用户能登录到哪些TTY设备,清空此文件来阻止root登录到连接计算机系统的任何设备。要创建一个空文件,请运行:
$ sudo mv /etc/securetty /etc/securetty.orig
$ sudo touch /etc/securetty
$ sudo chmod 600 /etc/securetty
此方法有一些限制,它仅影响登录、显示管理器(即gdm、kdm和xdm )等程序以及启动 TTY 的其他网络服务。 su、sudo、ssh 和其他相关 openssh 工具等程序将有权访问 root 帐户。
禁用SSH Root登录,需编辑/etc/ssh/sshd_config文件:
$ sudo vim /etc/ssh/sshd_config
然后取消注释(如果注释了)指令PermitRootLogin,并将其值设置为no。完成后,保存并关闭文件,再重新启动sshd服务以应用最近的配置更改。
$ sudo systemctl restart sshd
或
$ sudo service sshd restart
此方法仅影响 openssh 工具集,ssh、scp、sftp 等程序将被阻止访问 root 帐户。