技术知识库

帮助中心 >  产品文档 >  云服务器 >  在Linux中禁用root帐户的4种方法


root帐户是Linux和其他类Unix操作系统的终极帐户。 此帐户可以访问具有完全读取,写入和执行权限的系统上的所有命令和文件。 它用于在系统上执行任何类型的任务; 创建/更新/访问/删除其他用户的帐户 , 安装/删除/升级软件包等等。


由于root用户具有绝对权限,因此他/她执行的任何操作对系统都至关重要。 在这方面, root用户的任何错误都可能对系统的正常操作产生巨大影响。 此外,这个帐户也可能通过不正当或不恰当地使用它而被滥用,无论是意外,恶意还是通过人为的无知策略。


因此,建议在Linux服务器中禁用root访问权限,而应创建一个管理帐户,该帐户应配置为使用sudo命令获得root用户权限,以在服务器上执行关键任务。


在本文中,我们将解释在Linux中禁用root用户帐户登录的四种方法。


注意 :在阻止对root帐户的访问之前,请确保已使用useradd命令创建了一个管理帐户,该帐户能够使用sudo命令获取root用户权限,并为该用户帐户提供强密码。 标志-m表示创建用户的主目录, -c表示注释:


# useradd -m -c "Admin User" admin

# passwd admin

接下来,使用usermod命令将此用户添加到适当的系统管理员组,其中开关-a表示附加用户帐户, -G指定用于添加用户的组(wheel或sudo,具体取决于您的Linux发行版):


# usermod -aG wheel admin    #CentOS/RHEL

# usermod -aG sudo admin     #Debian/Ubuntu 

创建具有管理权限的用户后,请切换到该帐户以阻止root访问。


# su admin

1.更改root用户的Shell

禁用root用户登录的最简单方法是将其shell从/bin/bash或/bin/bash (或允许用户登录的任何其他shell)更改为/ etc / passwd文件中的/ /sbin/nologin ,您可以使用您喜欢的任何命令行编辑器打开进行编辑,如图所示。


  

$ sudo vim /etc/passwd

换行:


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

to

root:x:0:0:root:/root:/sbin/nologin

更改root用户Shell


保存文件并关闭它。


从现在开始,当root用户登录时,他/她将收到消息“ 此帐户当前不可用。 “这是默认消息,但是,您可以更改它并在文件/etc/nologin.txt中设置自定义消息。


此方法仅对需要用于用户登录的shell的程序有效,否则, sudo , ftp和email客户端可以访问root帐户。


2.通过控制台设备(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帐户。


3.禁用SSH Root登录

访问远程服务器或VPS的最常用方法是通过SSH并阻止其下的root用户登录,您需要编辑/ etc / ssh / sshd_config文件。


$ sudo vim /etc/ssh/sshd_config

然后取消注释(如果它被注释)指令PermitRootLogin并将其值设置为no ,如屏幕截图所示。


在SSh中禁用Root登录

在SSh中禁用Root登录


完成后,保存并关闭文件。 然后重新启动sshd服务以应用最近的配置更改。


$ sudo systemctl restart sshd 

OR

$ sudo service sshd restart 

您可能已经知道,此方法仅影响openssh工具集,ssh,scp,sftp等程序将被阻止访问root帐户。


4.通过PAM限制root访问服务

可插拔认证模块 (简称PAM )是Linux系统上集中,可插拔,模块化和灵活的认证方法。 PAM通过/lib/security/pam_listfile.so模块,可以极大地灵活地限制特定帐户的权限。


上述模块可用于引用不允许通过某些目标服务(如login,ssh和任何PAM感知程序)登录的用户列表。


在这种情况下,我们希望通过限制对login和sshd服务的访问来禁用对系统的root用户访问。 首先在/etc/pam.d/目录中打开并编辑目标服务的文件,如图所示。


$ sudo vim /etc/pam.d/login

OR

$ sudo vim /etc/pam.d/login

接下来,在两个文件中添加以下配置。


auth    required       pam_listfile.so \

        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

完成后,保存并关闭每个文件。 然后创建普通文件/ etc / ssh / deniedusers ,每行应包含一个项目,而不是世界可读的。


在其中添加名称root,然后保存并关闭它。


$ sudo vim /etc/ssh/deniedusers

还要为此设置所需的权限。


$ sudo chmod 600 /etc/ssh/deniedusers

此方法仅影响支持PAM的程序和服务。 您可以通过ftp和电子邮件客户端等阻止对系统的root访问。


有关更多信息,请参阅相关手册页。


$ man pam_securetty

$ man sshd_config

$ man pam


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: