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