useradd не позволяет пользователю входить в систему

На LTS Ubuntu 14.04.2 следующая команда:

adduser fu

и затем ввод пароля bar и просто нажав Enter по всем другим вопросам, создает пользователя, который позволяет мне входить в систему и имеет следующие характеристики в /etc/passwd:

fu:x:1002:1002:,,,:/home/fu:/bin/bash

Однако выполнение a:

useradd fu --password bar --groups adm,cdrom,sudo,dip,plugdev,lpadmin --shell /bin/bash --create-home

создает в /etc/passwd

fu:x:1002:1002::/home/fu:/bin/bash

и не позволяет мне входить в систему и добавление --user-group не помогает ни одному...

Поскольку мне нужно useradd (для сценария докера), как я продолжаю двигаться?

P.S. Я взглянул на /usr/sbin/adduser уже, но как это perl это не очевидно для меня который параметры добавить к adduser иметь ту же функциональность как useradd

2
задан 28 April 2015 в 20:55

2 ответа

Проблема № 1:

Запятые в пользовательской записи в /etc/passwd просто разделители полей для получения информации пользователя, такой как "Полное имя", "Номер комнаты", "Рабочий телефон" и "Домашний телефон", таким образом, я предполагаю, что исключение их совпадает с наличием их с пустыми полями;

Проблема № 2:

От надежного человека man страница для useradd:

[...]
       -p, --password PASSWORD
           The encrypted password, as returned by crypt(3). The default is to
           disable the password.

           Note: This option is not recommended because the password (or
           encrypted password) will be visible by users listing the processes.

           You should make sure the password respects the system's password
           policy.
[...]

Это означает что пароль, ожидаемый useradd уже зашифрованный пароль (судящий от моего теста до SHA-512): на самом деле строка передала как аргумент -p опция записана как простой текст в /etc/shadow и чтение паролей отсюда после входа в систему, как ожидают, будет зашифровано.

Таким образом, самое простое решение состоит в том, чтобы установить использование пароля passwd вместо этого:

echo -e 'bar\nbar' | passwd fu

Если Вы не можете использовать passwd, эта команда Python в подоболочке как аргумент -p опция должна сделать:

python -c 'import crypt; print crypt.crypt("bar", "$6$'$(< /dev/urandom tr -dc 'a-zA-Z0-9' | head -c 32)'")'

Разбивка команды:

python -c 'import crypt; print crypt.crypt("<string>", "$<encryption_type>$<encryption_salt>")'

* <строка> = представляет в виде строки для шифрования; <encryption_type> = тип шифрования; <encryption_salt> = соль шифрования

Склепы a <string> использование <encryption type> и <encryption_salt> использование crypt() вызов библиотеки

В этом случае:

  • <string> = bar, пароль для шифрования
  • <encryption_type> = 6, SHA-512
  • <encryption_salt> = < /dev/urandom tr -dc 'a-zA-Z0-9' | head -c 32, случайные 32 символьных строки
2
ответ дан 2 December 2019 в 02:22

Это не могло бы работать, потому что Ваш пароль bar не шифруется. Страница справочника для useradd состояния:

The encrypted password, as returned by crypt(3).

Этот вопрос на Переполнении стека имеет несколько ответов, которые могли бы помочь Вам с Вашим сценарием, поскольку вопрос спрашивает о добавлении пользователя наряду с паролем.

, Поскольку принятый ответ не был обновлен по тому вопросу на основе комментариев пользователей, я воспроизведу решение здесь:

echo -e "bar\nbar\n" | passwd fu

, Что команда изменит пароль для пользователя fu к bar. Пользователь должен быть создан с помощью useradd, конечно.

Другое решение состояло бы в том, чтобы использовать chpasswd, как второй по высоте проголосовавший ответ предполагает:

echo fu:bar | chpasswd

я протестировал оба из этих решений и их обоих работа.

Отредактированный , чтобы удалить adduser информация и указать, какие предложения от связанного вопроса на самом деле работают.

2
ответ дан 2 December 2019 в 02:22

Другие вопросы по тегам:

Похожие вопросы: