在Linux以及其他类Unix操作系统里,root账户堪称超级管理员账户。它具备对系统中所有命令与文件的完全读写及执行权限。
此账户拥有强大的功能,能够执行各类系统操作,涵盖创建、修改、访问以及删除其他用户账户,还能进行软件包的安装、卸载和升级等所有关键任务。
鉴于root用户拥有至高无上的权限,其每一项操作都可能对系统产生决定性的影响。一旦操作出现失误,极有可能致使系统运行异常。而账户滥用的情况,无论是出于无心之失、恶意行为,亦或是策略性的忽视,都会带来极为严重的安全隐患。
有鉴于此,在Linux服务器中,建议禁用root账户的直接登录方式,转而创建具备sudo权限的管理员账户,以此来执行特权命令。
重要提示
在禁用root账户之前,请务必预先创建一个具备sudo权限的管理员账户。
创建管理员账户
以下命令用于创建管理员账户,其中 -m 选项用于创建家目录,-c 选项用于添加备注:
# useradd -m -c "系统管理员" admin
# passwd admin
添加管理员组
根据不同的发行版,您需要选择将管理员添加到 wheel 或 sudo 组:
# usermod -aG wheel admin # CentOS/RHEL系列
# usermod -aG sudo admin # Debian/Ubuntu系列
创建完成后,请先切换到该管理员账户,再执行后续操作:
# su admin
方法一:修改root用户的默认shell
通过将root的登录shell更改为 /sbin/nologin 来实现限制:
- 编辑 /etc/passwd 文件:
$ sudo vim /etc/passwd
- 找到root所在行,并将其修改为:
root:x:0:0:root:/root:/sbin/nologin
- 自定义提示信息(可选):
您可以在 /etc/nologin.txt 中添加提示内容。
特点
此方法仅对需要shell交互的登录方式有效,仍允许通过 sudo、ftp 等非shell方式进行访问。登录时会显示“该账户不可用”的提示。
方法二:禁用控制台(TTY)登录
利用 pam_securetty 模块限制root仅能通过安全终端登录:
清空安全终端列表:
$ sudo mv /etc/securetty /etc/securetty.orig
$ sudo touch /etc/securetty
$ sudo chmod 600 /etc/securetty
特点
该方法仅影响 login、gdm/kdm/xdm 等本地登录服务,不影响 su、sudo、ssh 等工具以root身份进行访问,适合用于物理服务器的安全加固。
方法三:禁止SSH的root登录(推荐)
修改SSH服务配置:
- 编辑配置文件:
$ sudo vim /etc/ssh/sshd_config
- 修改参数:
将 PermitRootLogin 设置为 no。 - 重启服务:
$ sudo systemctl restart sshd
# 或
$ sudo service sshd restart
特点
这是最常用的远程管理加固方案,仅影响SSH相关工具(如 ssh、scp、sftp),需要配合其他方法以实现全面防护。
方法四:通过PAM模块限制服务访问
使用pam_listfile.so模块实现精细化控制:
1.编辑PAM配置文件:
$ sudo vim /etc/pam.d/login
# 或
$ sudo vim /etc/pam.d/sshd
2.添加以下内容:
auth required pam_listfile.so onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
3.创建禁止用户列表:
$ sudo vim /etc/ssh/deniedusers
# 添加root
$ sudo chmod 600 /etc/ssh/deniedusers
特点:
- 支持所有PAM认证的服务(如ftp、邮件客户端等)
- 可灵活配置多服务统一策略
- 需要维护独立的用户列表文件
补充说明:
1.企业级环境建议组合使用方法三+方法四
2.所有修改前建议备份配置文件
3.实施后建议通过新会话测试效果
4.可通过man pam_securetty等命令查看详细文档
安全建议:
- 定期审计sudo权限分配
- 为管理员账户配置SSH密钥认证
- 启用系统操作日志审计(如auditd)
- 考虑部署堡垒机进行权限管控
通过以上方法的组合实施,可有效降低因root账户滥用导致的安全风险,同时保持合理的系统管理灵活性。实际部署时应根据具体业务需求选择适当方案。