背景:
Centos7上需要创建一个用户leojiang,而用户时间不纯在系统上,但是还是报错说用户已经存在。
[root@leo]# useradd -m -d /home/addmunx -s /bin/sh leojiang useradd: user 'leojiang' already exists
[root@leo]# cat /etc/passwd |grep leojiang [root@leo]#
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
并没有返回结果,代表这个用户并不在密码文件中
[root@leo]# getent passwd leojiang leojiang:*:1136335162:1782600513:ADDM account to scan Unix server:/home/leojiang:/bin/bash
可以看到此用户已经存在名称服务(Name Service Switch)库的某个地方。是否注意到输出的第二列中有一些不寻常的地方?用 * 代替 x 清楚地表明用户的密码没有存储在 /etc/shadow 文件中。
先了解什么是sssd:
[root@leo]# cat /etc/nsswitch.conf | grep passwd #passwd: db files nisplus nis passwd: files sss
通过上面提到的 sss ,NSS 库被指示在 LDAP 中搜索用户(sss被配置为 LDAP 客户端)。现在很清楚,LDAP 中存在用户leojiang,这就是您无法在系统中创建相同用户的原因。
现在我们找到了问题的根本原因。现在您可以执行以下操作之一来解决问题:
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