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
пакет.