当用户不存在时,adduser 表示用户存在

Dav*_* R. 11 users adduser

正如主题所说,我正在尝试添加一个新用户。当我运行命令时,它说用户已经存在。但是查看 /etc/passwd、/etc/group 和 /etc/shadow 显示该用户不存在。

在我的本地机器上运行命令工作正常。我在两者上都运行 Ubuntu 11.10。

这是我的终端命令和输出:

root@ws-prod-www-01:~# useradd -s /sbin/nologin -m -d /var/www/html/atc -g 33 -u 10141 atc
useradd: user 'atc' already exists
root@ws-prod-www-01:~# grep atc /etc/passwd
speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
root@ws-prod-www-01:~# grep atc /etc/shadow
speech-dispatcher:!:15259:0:99999:7:::
root@ws-prod-www-01:~# grep atc /etc/group
root@ws-prod-www-01:~# 
Run Code Online (Sandbox Code Playgroud)

我也试过:

root@ws-prod-www-01:~# adduser --shell /sbin/nologin --home /var/www/html/atc --gid 33 --uid 10141 atc
Warning: The home dir /var/www/html/atc you specified already exists.
adduser: The user `atc' already exists.
root@ws-prod-www-01:~# 
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Ham*_*ner 15

您是否有任何理由指定 uid 而不是让系统为您选择一个?您可以通过执行 来查看您选择的 ID 是否正在使用中grep '10141' /etc/passwd。如果是这种情况,那么错误消息肯定有点误导:/

您的系统也很有可能识别出不在的用户/etc/passwd- 例如通过使用 LDAP。测试它的一种快速方法是执行id atc并查看系统是否识别它。另一种方法是getent passwd atc,它还会向您显示系统识别出的用户不在/etc/passwd. 或者您可以再次检查 uid 是否与getent passwd 10141. (您也可以运行getent passwd以获取条目的完整列表。)有关 getent 的更多信息

要查看这些用户可能来自哪里,您可以查看/etc/nsswitch.conf手册页) - 行开头passwd将显示您的系统正在寻找用户的位置。常见的默认值是filescompat,但更复杂的设置可能有多个值,包括ldapdns和等值winbindfiles表示标准文件,包括/etc/passwd.

我不是的确切含义很清楚compat,但我的阅读nsswitch.conf手册页表明它是一个组合filesnisnis网络信息服务,如今已在很大程度上被取代,但可能会影响您的系统。

  • 我确实 grep 了 UID 的 etc 文件。至于我为什么使用它......我正在从该 UID 拥有的 NFS 挂载文件。因此,添加具有现有 UID 的用户比将所有文件添加到新 UID 更简单。我确实使用 LDAP 身份验证,但我知道 LDAP 中没有 atc 用户。*去试试id和getent命令* (2认同)

小智 7

尝试在终端中输入以下内容

sudo userdel -r atc
Run Code Online (Sandbox Code Playgroud)

这应该删除用户的所有实例