Этот вопрос изначально упоминался, passwd --delete <username>
что небезопасно : при этом поле зашифрованного пароля в /etc/shadow
будет полностью пустым.
username::...
Если вы настроили ваш sshd
отказ от аутентификации по паролю, то это безопасно с SSH ... Но если любая другая служба в вашей системе использует аутентификацию по паролю и не настроена на отклонение пустых паролей, это позволяет получить доступ без пароля! Ты не хочешь этого.
adduser --disabled-passwd
создаст /etc/shadow
запись, где поле зашифрованного пароля будет просто звездочкой, т.е.
username:*:...
Это «зашифрованный пароль, который никогда не может быть успешно введен», то есть это означает, что учетная запись является действительной и технически разрешает вход в систему, но делает невозможной успешную аутентификацию по паролю . Поэтому, если на вашем сервере есть какие-либо другие службы на основе парольной аутентификации, этот пользователь заблокирован от них.
Для этого пользователя будут работать только те методы аутентификации, которые используют что-то отличное от стандартного пароля учетной записи (например, ключи SSH) для любой службы, которая использует файлы системных паролей в этой системе. Когда вам нужен пользователь, который может войти только с ключами SSH, это то, что вам нужно.
Если вам нужно установить существующую учетную запись в это состояние, вы можете использовать эту команду:
echo 'username:*' | chpasswd -e
Существует третье специальное значение для поля зашифрованного пароля: adduser --disabled-login
тогда поле будет содержать только один восклицательный знак.
username:!:...
Как и звездочка, это делает невозможной успешную аутентификацию по паролю, но она также имеет дополнительное значение: она помечает пароль как «заблокированный» для некоторых инструментов администрирования. passwd -l
имеет почти такой же эффект, добавляя префикс существующего хэша пароля с восклицательным знаком, что снова делает невозможным использование аутентификации по паролю.
Но вот ловушка для неосторожных: в 2008 году версия passwd
команды, которая приходит из старого shadow
пакета, была изменена с того, чтобы переопределить ее passwd -l
с «блокировки учетной записи» на «блокировку пароля». Заявленная причина - «для совместимости с другой версией passwd».
Если вы (как и я) узнали это давно, это может стать неприятным сюрпризом. Это не помогает вопросам, которые adduser(8)
, очевидно, еще не знают об этом различии.
Та часть , которая блокирует учетную запись для всех методов аутентификации фактически устанавливая значение даты истечения срока действия 1 за счет: usermod --expiredate 1 <username>
. До 2008 года passwd -l
это происходит из shadow
исходного комплекта, используемого для этого, в дополнение к префиксу пароля с восклицательным знаком - но больше не делает этого.
Список изменений пакета Debian гласит:
- debian / patches / 494_passwd_lock-no_account_lock: восстановить предыдущее поведение passwd -l (которое изменилось в # 389183): блокировать только пароль пользователя, но не его учетную запись. Также четко документируйте различия. Это восстанавливает поведение, общее с предыдущими версиями passwd и другими реализациями. Закрывается: # 492307
Истории ошибок для ошибок Debian 492307 и 389183 могут быть полезны для понимания того, что стоит за этим.
sudo
доступа (либо из-за того, что у них вообще нет разрешений sudo, либо из-за того, что у них есть разрешение sudoNOPASSWD
), выбранный вами ответ должен быть подходящим. Я отправил редактирование этого ответа, чтобы включить вопрос о sudo, но решил, что тем временем я вам его здесь обзвоню.