Как я могу назначить исходный пароль / пароль по умолчанию для пользователя в Linux?

10

Я нашел руководство, которое объясняет, как установить пароль пользователя . Я пытаюсь автоматизировать его и отправить электронное письмо пользователю, например:

userid created with password XYZ.
request to change the initial password.

Согласно приведенному выше документу, необходимо создать зашифрованный пароль с помощью Python и передать его usermodкоманде следующим образом:

 usermod -p "<encrypted-password>" <username>

Есть ли другие простые способы сделать это? Я не хочу загружать какую-либо специальную утилиту для этого; оно должно быть максимально обобщено.


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

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.
Munish
источник
Вот еще одна ссылка, которую я нашел, но, похоже, проблема безопасности также связана с использованием опции -p, usermodкогда кто-то использует, psчтобы увидеть процесс, показывающий, что пароль виден
munish

Ответы:

13

Вы можете использовать chpasswdдля этого, как это:

echo "username:newpassword" | chpasswd

Вы можете подключиться к chpasswdдругим программам echo, если это удобно, но это поможет.

Редактировать: чтобы сгенерировать пароль в сценарии оболочки и затем установить его, вы можете сделать что-то вроде этого:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

Для получения дополнительной информации chpasswdсм. Http://linux.die.net/man/8/chpasswd.

(Команда для создания пароля была взята с http://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html )

Доминик Пасторе
источник
спасибо @Dominick хм, chpasswd, возможно, в AIX ... я не использовал его. и каждый раз я должен написать пароль ... он не может быть сгенерирован скриптом, как в ссылке на вопросы ... к сожалению, даже это не сработало для меня
munish
@munish Я не совсем уверен, что вы подразумеваете под генерацией в скрипте, но я обновил свой ответ, чтобы, надеюсь, быть более полезным.
Доминик Пасторе
Не работает. «Ошибка манипуляции токеном аутентификации»
Cerin
@Cerin Вы случайно не делаете что-то подобное sudo echo "username:newpass" | chpasswd? Поскольку повышенные разрешения от sudoне проходят через канал, поэтому chpasswdбудет работать как обычный пользователь. Это можно исправить перемещением sudo, как в echo "username:newpass" | sudo chpasswd. Есть и другие проблемы, которые могут вызвать это сообщение об ошибке, но ошибки разрешений, подобные этой, являются, вероятно, наиболее распространенными.
Доминик Пасторе
1
Пароли в командной строке могут быть видны другим зарегистрированным пользователям на той же машине, используя w, ps или другие команды, которые показывают информацию о других процессах. Пароли, установленные таким образом, должны быть изменены пользователем как можно скорее.
Mnebuerquo
3

Вы можете использовать OpenSSL для генерации случайного пароля (в данном случае 16 символов):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

Затем введите хешированный пароль useraddилиusermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

Кредит при необходимости: генерация пароля адаптирована из аналогичного метода, который использует /dev/urandomвместо openssl.

Джеймс Снерингер
источник
2

useradd должен работать (я сделал это на Ubuntu). Возможно, проверьте, что все ваши аргументы верны (группы существуют, путь к bash правильный). Вы можете запустить команду, используя только пароль и пользователя, а затем использовать userdel для удаления, а затем повторить попытку с другими параметрами, чтобы увидеть, что вызывает проблему (метод грубой силы).

Также есть newusers (см. Man-страницу), по крайней мере, в Ubuntu, где вы даете ему файл с паролем, например, info, включая пароли в виде простого текста, и он создает этих пользователей. Хороший способ сделать много пользователей одновременно.

РСМ
источник
+1 за упоминание newusersкоманды для Ubuntu
Левон
1

Самый простой способ, который я нашел:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here
MelBurslan
источник
Вы даже проверяли это? passwd: unrecognized option '--stdin'
Церин
Да, я использовал это много раз, но, как и почти любая другая команда, это не является де-факто решением проблемы. Некоторые варианты двоичного файла passwd не поддерживают ключ --stdin.
MelBurslan