У цьому питанні спочатку згадувалося, 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 bug 492307 та помилка 389183 може бути корисною для розуміння мислення, що стоїть за цим.
sudo
доступу (або через відсутність дозволів sudo, або через дозвіл sudoNOPASSWD
), обрана вами відповідь повинна бути придатною. Я подав редагування на цю відповідь, щоб включити проблему з судо, але подумав, що тим часом я вам її подзвоню.