Как говорит субъект, я пытаюсь добавить нового пользователя. Когда я запускаю команду, он говорит, что пользователь уже существует. Но поиск в / 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:~#
Я также попробовал:
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:~#
Есть мысли?
Попробуйте набрать в терминале следующее
В моем случае, /etc/nsswitch.conf имел это для passwd:
passwd: files winbind
Пользователь был в Active Directory, поэтому winbind видел «существующую» учетную запись пользователя в AD.
Running: # service winbind stop
Затем запуск useradd позволил мне добавить учетную запись пользователя.
Есть ли причина, по которой вы указываете uid, а не позволяете системе выбрать один для вас? Вы можете увидеть, используется ли выбранный вами идентификатор, выполнив grep '10141' /etc/passwd
. Если это так, то сообщение об ошибке, безусловно, немного вводит в заблуждение: /
Также вполне возможно, что ваша система распознает пользователей, которых нет в /etc/passwd
- например, с помощью LDAP. Один быстрый способ проверить это - выполнить id atc
и посмотреть, распознает ли система это. Другим способом будет getent passwd atc
, который также покажет вам пользователей, которых система распознает, а кто нет в /etc/passwd
. Или вы можете еще раз проверить, используется ли uid с getent passwd 10141
. (Вы также можете запустить getent passwd
, чтобы получить полный список записей.) Подробнее о getent .
Чтобы увидеть, откуда могут появиться эти пользователи, вы можете взглянуть на /etc/nsswitch.conf
( man-страница ) - строка, начинающаяся с passwd
, покажет вам, где ваша система ищет пользователей. Общие значения по умолчанию - files
и compat
, хотя более сложные установки могут иметь несколько значений, включая такие, как ldap
, dns
и winbind
. files
означает стандартные файлы, включая /etc/passwd
.
Мне не очень понятно точное значение compat
, но мое чтение справочной страницы nsswitch.conf
предполагает, что это комбинация files
и nis
. nis
- это Сетевая информационная служба , которая в настоящее время в значительной степени заменена, но может повлиять на вашу систему.
Как было предложено в одном из приведенных выше ответов, взгляните на файл вашей библиотеки NSS /etc/nsswitch.conf, чтобы проверить, ищет ли система пользователя в настройках типа LDAP. Если это так, вы можете выполнить одно из следующих действий, чтобы устранить проблему:
Удалить пользователя с сервера ldap.
Удалите ссылку на ldap из файла /etc/nsswitch.conf, чтобы библиотека NSS не искала пользователя на сервере ldap.
Оставьте пользователя в ldap как есть, но создайте того же пользователя в системе с помощью команды luseradd.
luseadd myuser
Посмотрите на эту статью https://www.easyaslinux.com/quick-fix/user-already-exists-error-when-user-doesnt-exist-on-the -system/ для подробных инструкций.