正如主题所说,我正在尝试添加一个新用户。当我运行命令时,它说用户已经存在。但是查看 /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
将显示您的系统正在寻找用户的位置。常见的默认值是files
和compat
,但更复杂的设置可能有多个值,包括ldap
、dns
和等值winbind
。files
表示标准文件,包括/etc/passwd
.
我不是的确切含义很清楚compat
,但我的阅读nsswitch.conf
手册页表明它是一个组合files
和nis
。nis
是网络信息服务,如今已在很大程度上被取代,但可能会影响您的系统。