
У меня Fedora VPS с пользователем root, у которого нет пароля. Я вхожу с помощью ключей SSH.
У меня была другая, менее привилегированная учетная запись на этом сервере, используемая для веб-администрирования. Теперь я удалил и ее пароль.
Если на сервере нет пользователей с паролями, что конкретно произойдет, если я потеряю свой SSH-ключ, например? Станет ли сервер навсегда недоступным, так как нет возможности войти на него?
И еще, как sudo
ведет себя программа, когда ни у пользователя root, ни у вызывающего пользователя нет паролей? Я попробовал, и она даже не спросила у меня пароль: она просто заработала, так как у меня есть эта user ALL=(ALL) ALL
строка в файле sudoers (нужно ли мне ее изменить?)
решение1
Если вы удалите 2-е поле файла /etc/passwd
, то пользователи смогут войти без каких-либо проблем. Простая попытка входа позволит им войти. Так что что-то вроде этого, вероятно, не то, что вы хотели бы сделать.
root:$1$iM/2lekk$rXUAcF5fY8ddLL.B1bkH63:12242:0:99999:7:::
/etc/passwd пример
- Имя пользователя: используется при входе пользователя в систему. Длина имени должна быть от 1 до 32 символов.
- Пароль: Символ x указывает, что зашифрованный пароль хранится в файле /etc/shadow.
- Идентификатор пользователя (UID): Каждому пользователю должен быть назначен идентификатор пользователя (UID). UID 0 (ноль) зарезервирован для root, а UID 1-99 зарезервированы для других предопределенных учетных записей. Дальнейшие UID 100-999 зарезервированы системой для административных и системных учетных записей/групп.
- Идентификатор группы (GID): основной идентификатор группы (хранится в файле /etc/group)
- Информация об идентификаторе пользователя: Поле комментария. Позволяет добавлять дополнительную информацию о пользователях, такую как полное имя пользователя, номер телефона и т. д. Это поле используется с помощью команды finger.
- Домашний каталог: абсолютный путь к каталогу, в котором будет находиться пользователь при входе в систему. Если этот каталог не существует, то каталог пользователя становится /
- Команда/оболочка: Абсолютный путь к команде или оболочке (/bin/bash). Обычно это оболочка. Обратите внимание, что это не обязательно должна быть оболочка.
заимствовано изПонимание формата файла /etc/passwd
отключение входа по паролю
Есть тонкое различие между этим полем, которое пусто и содержит x ( :x:
), и a :!:
в /etc/shadow
файле. Это означает, что учетная запись намеренно настроена так, чтобы ей не разрешалось входить в систему, что, вероятно, больше всего вам нужно.
/etc/тень
root:!:15669:0:99999:7:::
То же самое можно сделать для любой учетной записи, и, вероятно, именно так я бы вам и посоветовал поступить, если вы действительно хотите разрешить ssh
вход только с использованием открытого/закрытого ключа.
Другие вопросы
Если на сервере нет пользователей с паролями, что конкретно произойдет, если я потеряю свой SSH-ключ, например? Станет ли сервер навсегда недоступным, так как нет возможности войти на него?
Нет, пока у вас есть физический доступ к серверу, вы всегда можете получить доступ к системе. Потребуется перезагрузка и может быть немного сложно с использованием VPS, но это должно быть возможно.
Обычно вы загружаете систему в однопользовательском режиме, после чего можете редактировать /etc/passwd
файлы /etc/shadow
по мере необходимости.
Кроме того, как ведет себя программа sudo, когда ни у пользователя root, ни у вызывающего пользователя нет паролей? Я попробовал, и она даже не спросила у меня пароль: она просто заработала, так как у меня есть строка user ALL=(ALL) ALL в моем файле sudoers (нужно ли мне ее изменить?)
Да, без паролей использование sudo
становится более сложным. Существуют методы использования других источников при работе с sudo
. См. этот вопрос и ответ U&L под названием:Установите пароль sudo, отличный от пароля для входа.
решение2
Помните, что есть несколько вещей, которые можно назвать «удалением пароля». В Linux:
passwd -d USER
настраивает учетную запись на разрешение входа без пароля. (Некоторые службы, в частности ssh, как правило, настроены на блокировку входа в этом случае.)passwd -l USER
блокирует пароль учетной записи: никакой пароль не будет принят. По-прежнему возможен вход другими способами, такими как ключи ssh или sudo.`usermod -e 1 USER
блокирует учетную запись (устанавливая срок действия пароля на прошедшую дату): становится невозможным войти в эту учетную запись через любой сервис.
Я предполагаю, что вы имеете в виду второе значение: вы сделали эти учетные записи недоступными для входа с помощью пароля, но доступ к ним по-прежнему возможен через ssh с помощью ключа или с помощью sudo.
Если вы отключили пароль для своей учетной записи, вы больше не сможете использовать sudo.У вас есть льготный период, в течение которого sudo не будет снова запрашивать ваш пароль. После этого, если вы не изменили конфигурацию по умолчанию необычным образом, sudo запросит у вас ваш пароль, который вы не сможете ввести, поскольку пароля больше нет. Это не относится к правилам sudoers с тегом NOPASSWD
.
Удаление паролей не делает систему более безопасной, чем выбор надежных паролей. Если ваш VPS предлагает способ входа в систему на виртуальной консоли, то сгенерируйте длинный случайный пароль для учетной записи root, проверьте, что он работает, распечатайте его и положите листок бумаги в сейф. Таким образом, у вас будет способ восстановить доступ к вашей системе, если что-то пойдет не так (например, «ой, я заблокировал себя из ssh» или «ой, я заблокировал себя из sudo»). Для своей учетной записи выберите более короткий пароль, который вы сможете запомнить, отключите пароли для входа по SSH (необязательно) и введите свой пароль, чтобы sudo
стать root. Наличие дополнительного уровня аутентификации от вашей обычной учетной записи до root полезно, потому что гораздо сложнее внедрить необнаруженный троян в учетную запись без прав root.
решение3
В большинстве случаев отсутствие пароля вполне приемлемо.
Да, если вы разрешаете только аутентификацию через ключ ssh и теряете свой ключ ssh, вы больше не сможете войти. В этом случае вы можете, например, загрузить какой-нибудь live CD, смонтировать исходную систему и добавить пароль root. (Если у вас нет такой возможности, возможно, лучше иметь пароль root, на всякий случай.)
Sudo можно настроить так, чтобы он не запрашивал пароль. Есть NOPASSWD:
возможность активировать это. (См man sudoers
. .)
Имейте в виду, что существует множество других способов аутентификации. Вы можете активировать их, настроив свойПАМсистема.