Centos7系统创建用户时出现“useradd: user ‘xxxx‘ already exists”错误

更新时间:2022-04-26 15:54

Centos7上需要创建一个用户leojiang,而用户时间不纯在系统上,但是还是报错说用户已经存在。

1、假设您正在尝试添加一个名为“leojiang”的用户并且您收到以下错误。

[root@leo]# useradd -m -d /home/addmunx -s /bin/sh leojiang
useradd: user \'leojiang\' already exists

2、调查,先查看系统上是否存在这个用户leojiang

[root@leo]# cat /etc/passwd |grep leojiang
[root@leo]#
  • /etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
  • /etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

并没有返回结果,代表这个用户并不在密码文件中

3、运行getent命令从名称服务切换库(Name Service Switch)中获取

  • getent命令可以用来察看系统的数据库中的相关记录
[root@leo]# getent passwd leojiang
leojiang:*:1136335162:1782600513:ADDM account to scan Unix server:/home/leojiang:/bin/bash

可以看到此用户已经存在名称服务(Name Service Switch)库的某个地方。是否注意到输出的第二列中有一些不寻常的地方?用 * 代替 x 清楚地表明用户的密码没有存储在 /etc/shadow 文件中。

4、来让我们找到它,深入研究名称服务切换库配置文件。

先了解什么是sssd:

  • sssd是一款用以取代ldap和AD的软件,ldap客户端部署sssd,是用来启用ldap认证。
  • /etc/nsswitch.conf 来告诉name service switch需要查找那些地方来给登录的用户服务。
  • files sss 表示先查找/etc/passwd, /etc/group等文件,没有的话再查找sss模块。
[root@leo]# cat /etc/nsswitch.conf | grep passwd
#passwd:    db files nisplus nis
passwd:     files sss

通过上面提到的 sss ,NSS 库被指示在 LDAP 中搜索用户(sss被配置为 LDAP 客户端)。现在很清楚,LDAP 中存在用户leojiang,这就是您无法在系统中创建相同用户的原因。

5、解决方案

现在我们找到了问题的根本原因。现在您可以执行以下操作之一来解决问题:

5.1. 从 ldap 服务器中删除用户。

5.2. 从 /etc/nsswitch.conf 文件中删除 ldap 引用,以便 NSS 库不会在 ldap 服务器中查找用户。

5.3. 将用户原样保留在 ldap 中,但在系统中创建相同的用户!让我解释一下我们是如何做的。

5.4. 关闭sssd ladp客户端服务,之后便可创建用户,创建完成后再启动sssd即可

5.5、使用方法

在某些情况下,即使 ldap 中存在相同的用户名,您仍然需要创建系统用户。是的,我们可以使用 luseradd 命令来完成。

[root@leo]# yum install libuser
[root@leo]# luseradd -m -d /home/addmunx -s /bin/sh leojiang

注意:CentOS/Redhat 默认安装了这个命令。如果找不到,请尝试使用上述命令安装它。

5.6、使用方法

[root@leo]# systemctl status sssd && systemctl stop sssd
# 停止sssd服务后再创建用户即可
[root@leo]# luseradd -m -d /home/addmunx -s /bin/sh leojiang
# 创建完成后再启动sssd服务
[root@leo]# systemctl start sssd

文档下载:Centos7系统创建用户时出现“useradd: user ‘xxxx‘ already exists”错误.doc文档

THE END
喜欢就支持一下吧