useradd не шифрует пароли в /etc/shadow

Я наткнулся на эту проблему, пытаясь создать новых пользователей FTP для vsftpd. После создания нового пользователя с помощью следующей команды и попытки входа в систему с помощью FileZilla я получаю сообщение об ошибке "неверный пароль".

useradd f -p pass -d /home/f -s /bin/false

После этого / etc / shadow содержит

f:pass:1111:0:99:2:::

Как только я запускаю следующую команду и предоставляю тот же проход

passwd f

/ etc / shadow содержит

f:$1$U1c5vVwg$x5TVDDDmhi0a7RWFer6Jn1:1111:0:99:2:::

Похоже, что шифрование происходит, когда я запускаю passwd, но не при использовании useradd

Важно отметить, что после этого я могу войти на FTP с теми же учетными данными.

Я использую CentOS 5.11, vsftpd для FTP и FileZilla для доступа по FTP

/var/log/secure содержит:

Dec 17 useradd[644]: new group: name=f, GID=511
Dec 17 useradd[644]: new user: name=f, UID=511, GID=511, home=/home/f, shell=/bin/false

Почему это не работает, когда я прохожу -p pass использовать radd? Что мне нужно сделать, чтобы это работало?

3 ответа

Решение

Это работает как задумано. Если вы хотите установить пароль с помощью useradd команда, вы должны дать хешированную версию пароля useradd,

Строка pass удовлетворяет критериям формата для поля хешированного пароля в /etc/shadow, но нет фактического хэша пароля к этой строке. В результате для всех намерений и целей эта учетная запись будет вести себя как пароль, но любой пароль, который вы пытаетесь использовать для доступа к нему, будет отклонен как неверный пароль.

Увидеть man useradd или документация useradd:

-p, --password ПАРОЛЬ

Зашифрованный пароль, возвращаемый crypt (3). По умолчанию пароль отключен.

Примечание. Этот параметр не рекомендуется, поскольку пароль (или зашифрованный пароль) будет виден пользователям, перечисляющим процессы.

Вы должны убедиться, что пароль соответствует политике паролей системы.

man useradd:

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

Вы должны передать ему хешированный пароль.
Не открытый пароль.

useradd ожидает, что вы передадите ему хэш пароля, а не сам пароль. Вы можете использовать следующую вариацию вашей команды, чтобы предоставить хешированный пароль useradd команда:

useradd f -p "$(mkpasswd --method=sha-512 'pass')" -d /home/f -s /bin/false

Чтобы узнать доступные методы, используйте:

mkpasswd --method=help

Чтобы избежать передачи пароля в командной строке, поместите пароль в файл (используя редактор и не используя echo или аналогичный) и сделать это:

useradd f -p "$(mkpasswd --method=sha-512 --password-fd=0 < filename)" -d /home/f -s /bin/false

Это передаст хешированный пароль в командной строке, но не открытый текст.

mkpasswd поставляется с expect пакет.

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