Що б ви не робили, не залишайте обліковий запис у залишеному стані passwd -u
, з порожнім полем пароля: це дозволяє входити без введення пароля (за винятком SSH, оскільки SSH відмовляється від цього).
Змініть обліковий запис, щоб не було пароля, але розблокуйте. У облікового запису немає пароля, якщо хеш паролів у базі даних паролів не є хесом жодної строки. Традиційно односимвольний рядок типу*
або !
використовується для цього.
Заблоковані облікові записи також використовують спеціальний маркер у полі пароля, який призводить до того, що рядок не є хешом жодної рядки. Маркер залежить від системи. В Linux passwd
команда відмічає заблоковані паролі, поставивши a!
на початку, і OpenSSH трактує обліковий запис як заблокований, якщо поле починається з!
. Інші варіанти Unix, як правило, використовують подібні, але не однакові механізми, тому будьте уважні, якщо ваша база даних паролів поділяється між неоднорідною мережею.
У Linux ви можете відключити доступ до облікового запису на основі пароля, дозволивши доступ до SSH (за допомогою іншого способу аутентифікації, як правило, пари ключів) за допомогою
usermod -p '*' username
Користувач не зможе змінити обліковий запис назад до пароля, оскільки для цього потрібно ввести дійсний пароль.
Якщо ви хочете, можете замість цього налаштувати SSH для відмови в автентифікації пароля, незалежно від того, чи є в облікового запису пароль. Вам все одно доведеться домовитись про те, щоб SSH не вважав обліковий запис заблокованим, тому, наприклад, в Linux вам потрібно буде видалити поле !
з паролем (але не роблять поле порожнім - встановіть його, *
як пояснено вище ). Щоб вимкнути автентифікацію пароля для SSH, додайте PasswordAuthentication
директиву до /etc/sshd_config
або /etc/ssh/sshd_config
(що б це не було у вашій системі). Використовуйте Match
блок, щоб зробити цю директиву застосованою лише до конкретного користувача; Match
повинні з’явитися блоки
…
Match User username
PasswordAuthentication no