Треба визнати, що мені подобаються сервери без паролів у деяких випадках. Типовий сервер вразливий для всіх, хто має фізичний доступ до нього. Тож у деяких випадках це практично можливо фізично заблокувати і з тих пір довіряти будь-якому фізичному доступу.
Основні поняття
Теоретично, коли я фізично дістаюсь до такого сервера, я повинен мати можливість виконувати завдання адміністрування без пароля, просто ввівши root
логін, і мені не потрібно запитувати пароль. Те саме може стосуватися облікових записів користувачів, але фізично не можна отримати доступ до них. Тому не потрібні системні паролі для (випадкового) локального доступу.
Під час віддаленого доступу до сервера, або для адміністрації, або для облікового запису користувача, я сподіваюся завжди використовувати приватний ключ SSH. Налаштувати ключ SSH для щойно створеного облікового запису дуже просто, і тому системні паролі не потрібні для (звичайного) віддаленого доступу.
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
Висновок полягає в тому, що теоретично ми не потребували жодних системних паролів для таких випадків використання. Отже, питання полягає в тому, як нам налаштувати систему та облікові записи користувачів, щоб це відбулося послідовно та безпечно.
Інформація про місцевий доступ
Як ми можемо забезпечити доступ до кореневого облікового запису локально без пароля? Я не думаю, що ми можемо використовувати, passwd -d
оскільки це зробить доступ до коренів занадто дозвільним, і непривілейований користувач може перейти на root безкоштовно, що неправильно. Ми не можемо використовувати, passwd -l
оскільки це заважає нам увійти.
Зауважте, що локальний доступ стосується виключно доступу через локальну клавіатуру. Отже, чинне рішення не повинно дозволяти комутації користувачів (незалежно від використання su
чи sudo
).
Деталі віддаленого доступу
Донедавна вищезгадане рішення діяло б, але тепер SSH почав перевіряти наявність заблокованих облікових записів користувачів. Напевно, ми не можемо використовувати passwd -d
з тих же причин. Ми не можемо використовувати, passwd -u
оскільки він просто скаржиться, що це призведе до того, що passwd -d
робить.
Для цієї частини є вирішення проблеми з підробленим паролем.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
Можливо, також можна повністю вимкнути перевірку заблокованих облікових записів у SSH, але було б приємніше зберігати підтримку заблокованих облікових записів і просто мати можливість їх розблокувати.
Підсумкові ноти
Що мене цікавить - це рішення, яке дозволить вам увійти до кореневого облікового запису локально та всіх облікових записів, включаючи root, віддалено, без паролів. З іншого боку, рішення не повинно впливати на безпеку, за винятком чітко описаних способів, особливо не дозволяючи віддаленим користувачам отримати доступ до кореневого або іншого облікового запису користувачів. Рішення повинно бути достатньо надійним, щоб воно не викликало проблем безпеки опосередковано.
Прийнята та нагороджена відповідь може або не може описувати детальну конфігурацію окремих інструментів, але повинна містити ключові моменти для досягнення зазначених цілей. Зверніть увагу , що це , ймовірно , не може бути вирішена з допомогою звичайного використання таких інструментів , як passwd
, ssh
, su
, sudo
тощо.
Більше ідей після прочитання перших відповідей
Просто ідея - локальний доступ до кореня можна досягти, запустивши кореневі оболонки замість процесів входу. Але ще потрібно заблокувати лише автентифікацію пароля, а не автентифікацію відкритих ключів.