Чи слід видалити паролі користувачів, коли я встановив аутентифікацію відкритого ключа для SSH?


19

Найкраще використовувати відкриті ключі для SSH. Так що я sshd_configє PasswordAuthentication no.

Деякі користувачі ніколи не входять у систему, наприклад, sftp-користувач із оболонкою /usr/sbin/nologin. Або системний рахунок.

Тож я можу створити такого користувача без пароля за допомогою adduser gary --shell /usr/sbin/nologin --disabled-password.

Це гарна / погана ідея? Чи є розгалуження, які я не розглядав?


3
Поки це не справжні облікові записи користувачів, або їм не потрібен пароль для sudoдоступу (або через відсутність дозволів sudo, або через дозвіл sudo NOPASSWD), обрана вами відповідь повинна бути придатною. Я подав редагування на цю відповідь, щоб включити проблему з судо, але подумав, що тим часом я вам її подзвоню.
Doktor J

Відповіді:


35

Якщо у вас є кореневий доступ до сервера і ви можете регенерувати ключі ssh для своїх користувачів у разі їх втрати

І

ви впевнені, що користувач (як людина) не матиме декілька облікових записів користувачів, і їм потрібно перемикатися між тими, на яких відбувається сеанс SSH (добре, вони також можуть відкрити кілька сеансів SSH, якщо виникне потреба)

І

їм ніколи не знадобиться "фізичний" (через клавіатуру + монітор або через віддалену консоль для VM) доступ до сервера

І

жоден користувач не має sudoдоступу із закритим паролем (тобто вони взагалі не мають доступу до судо, або мають доступ до судо NOPASSWD)

Я думаю, ти будеш добре.

У нас багато серверів на роботі налаштовано так (лише деяким обліковим записам потрібен доступ до VM через віддалену консоль vmware, інші підключаються лише через SSH з pubkey auth).


9
Я також додаю "ви знаєте, що користувачам ніколи не доведеться отримувати доступ до системи з віддалених систем, у яких відсутні їх приватний ключ SSH". І "Ви готові мати справу з користувачами, які стикаються з ситуацією, про яку ви не думали".
Ендрю Генле

7
Перша умова - ІМО не потрібна. Ваші користувачі повинні створити свої ключі самостійно. Ви просто авторизуєте їхні відкриті ключі, коли вони передають їх вам. Якщо вони втратять ключ, вони просто генерують ще один, і ви заміните старий на сервері.
Крістоф Древет-Дрогует

1
@AndrewHenle Це хороший момент, але якщо у sshd, PasswordAuthentication noто це вже інша проблема (користувач все одно не зможе увійти).
lonix

1
"Ніколи" такий довгий час. Адміністратор може легко додати назад автентифікацію пароля, якщо виникне потреба.
Гайд

2
Ну, питання чітко стосується облікових записів, які напевно не входять (і, мабуть, не повинні) входити в систему, як системні облікові записи, які використовуються певними службами або користувачами, які мають лише sftp. У питанні також зазначено, що у користувачів немає оболонки для входу. Для типів користувачів я думаю, що доцільно відключити вхід через пароль.
Крістіан Гаврон

27

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


Дякую за попередження ... Я редагую питання, щоб ніхто не помилявся!
lonix

Чи застосовується ваше попередження і до випадку, коли я використовую adduser --disabled-passwd- тож якщо якась інша служба дозволяє перевірити автентифікацію пароля, то користувач може ввійти без пароля?
lonix

1
Ні, adduser --disabled-passwordспеціально унеможливлює автентифікацію пароля досягти успіху для цього облікового запису.
TelCom

Оскільки видалення пароля здається настільки невинним, але настільки небезпечним, я пропоную переключити пункт про нього з абзацом про використання, *тому це перше, що читають люди.
Капітан Людина

1
Нічого собі, це неприємний сюрприз, який чекає того, що відбудеться ... і, як завжди, у цьому, мабуть, винні питання сумісності. Він з'явився у passwdвихідному коді у 2008 році. Вам це не подобається, коли щось, що ви колись дізналися і на яке покладаєтесь, виявляється вже не таким?
TelCom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.