На 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
Проблема № 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 символьных строки Это не могло бы работать, потому что Ваш пароль 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
информация и указать, какие предложения от связанного вопроса на самом деле работают.