Вопрос или проблема
Что я могу сделать в Ubuntu, чтобы предотвратить вход пользователей во время обслуживания системы?
(Это на сервере, где учетные записи пользователей являются просто локальными учетными записями, а не сетевыми.)
man 5 nologin
сообщает, что мы могли бы создать файл /etc/nologin
, и тогда:
login(1) позволит доступ только root. Другим пользователям будет показано содержимое этого файла, и их вход будет запрещен.
Работает ли это все еще буквально, как описано в Ubuntu (ограничивая входы, позволяя только буквальную учетную запись root – что поставило бы нас в “неудобное” положение, поскольку root обычно отключен в Ubuntu) или, возможно, это было исправлено в Ubuntu, чтобы позволить входить только членам группы sudo
?
Если это не подходящее решение, ограничены ли тогда мои варианты для каждого обычного пользователя выполнением одного из следующих действий (а затем возвратом обратно позже):
sudo chsh -s /usr/sbin/nologin имя_пользователя
sudo passwd -l имя_пользователя
Или есть ли другая техника, которую я мог бы использовать, чтобы временно предотвратить вход обычных пользователей?
Основная функция файла /etc/nologin
– отображать сообщение пользователям, пытающимся войти в систему.
После того как сообщение будет отображено пользователю, процесс входа прекращается, что предотвращает вход пользователя в систему.
Это можно использовать для блокировки входа, вручную создав файл перед началом обслуживания системы, с помощью следующей команды:
sudo nano /etc/nologin
И добавив текст для отображения, например:
Сервер находится на обслуживании. Приносим извинения за неудобства.
После завершения обслуживания файл удаляется, и все остается как прежде.
——-Отредактировано———
Предоставлено: manpages-en_4.21.0-2_all
НАЗВАНИЕ
nologin – предотвращает вход непроивлашенных пользователей
ОПИСАНИЕ
Если файл /etc/nologin существует и доступен для записи, login(1) позволит доступ только root. Любой другой пользователь увидит содержимое этого файла и не сможет войти. Это простой способ предотвратить вход не-root пользователей.
ФАЙЛЫ
/etc/nologin
Ситуация
Пользователи SSH, использующие аутентификацию без пароля (например, аутентификация по открытому ключу), все равно могут войти в систему, несмотря на присутствие файла /etc/nologin.
Решение
Отредактируйте /etc/pam.d/sshd и измените строку
auth requisite pam_nologin.so
на
account requisite pam_nologin.so
Дополнительная информация
Настройка PAM по умолчанию, позволяющая вход в SSH через аутентификацию по открытому ключу, несмотря на наличие /etc/nologin, избегает случайного блокирования удаленных скриптов мониторинга или (не-root) административного персонала, когда просто обычные пользователи, которые в большинстве современных установок все равно входят через удаленный X11 сервер или VNC, не должны входить.
——-Конец——
Как вы уже поняли, Ubuntu не позволит ни одному непроивлашенному пользователю войти после установки файла /etc/nologin
.
Но вы можете использовать что-то вроде этого, чтобы убедиться, что члены группы sudo
все еще могут войти:
Напишите пользовательское правило PAM в файл /etc/pam.d/sshd
или /etc/pam.d/login
следующим образом:
auth required pam_exec.so /path/to/nologin-script.sh
Создайте соответствующий файл сценария:
#!/bin/bash
if [ -f /etc/nologin ] && ! groups $PAM_USER | grep -q sudo ; then
exit 1
fi
exit 0
Не забудьте сделать файл сценария исполняемым!
Поскольку я пишу это по памяти, пожалуйста, протестируйте вышеуказанное на тестовой системе. Не стесняйтесь редактировать мой ответ, чтобы исправить что-либо. Вам также стоит придумать способ удалить пользователей, которые уже вошли в систему!
Ответ или решение
Как предотвратить вход пользователей в систему во время технического обслуживания на Ubuntu
Если вы хотите предотвратить вход обычных пользователей в систему Ubuntu во время технического обслуживания, у вас есть несколько вариантов. Основными методами являются использование файла /etc/nologin
, настройка PAM (Pluggable Authentication Modules) и изменение параметров входа пользователей. Ниже представлены наиболее эффективные подходы.
Использование файла /etc/nologin
Одним из простейших способов запретить вход не привилегированным пользователям является создание файла /etc/nologin
. Когда этот файл существует, любые попытки входа от обычных пользователей будут отвергнуты, и им будет показано содержимое этого файла, которое можно использовать для информирования о проводимых работах.
-
Создание файла
/etc/nologin
:Для создания файла выполните следующую команду:
echo "Сервер проходит техническое обслуживание. Приносим извинения за неудобства." | sudo tee /etc/nologin
-
Удаление файла по окончании обслуживания:
После завершения технического обслуживания вы можете удалить этот файл:
sudo rm /etc/nologin
Важно отметить:
-
Пользователи, использующие SSH с помощью публичных ключей (например,
authorized_keys
), могут продолжать входить, даже если файл/etc/nologin
существует. Это связано с настройками PAM по умолчанию, которые позволяют избежать неожиданной блокировки администраторов системы. -
Чтобы запретить вход по SSH, вам потребуется внести изменение в файл конфигурации PAM. Измените строку в
/etc/pam.d/sshd
следующим образом:auth requisite pam_nologin.so
Это изменит поведение PAM, чтобы блокировать вход в систему даже для SSH, когда файл
/etc/nologin
присутствует.
Идентификация и разрешение входа для группы sudo
Если необходимо, чтобы пользователи из группы sudo
могли продолжать входить в систему, вы можете воспользоваться следующим решением:
-
Создайте скрипт, который проверяет, является ли текущий пользователь членом группы
sudo
:sudo nano /path/to/nologin-script.sh
Вставьте следующий код:
#!/bin/bash if [ -f /etc/nologin ] && ! groups $PAM_USER | grep -q sudo; then exit 1 fi exit 0
Не забудьте сделать скрипт исполняемым:
sudo chmod +x /path/to/nologin-script.sh
-
Добавьте вызов этого скрипта в конфигурацию PAM для
sshd
илиlogin
:В
sshd
:echo "auth required pam_exec.so /path/to/nologin-script.sh" | sudo tee -a /etc/pam.d/sshd
Завершение существующих сеансов
Если в системе уже есть активные пользователи, их можно завершить с помощью команды pkill
или kill
. Чтобы завершить все сеансы обычных пользователей:
sudo pkill -u username
Здесь username
– имя пользователя, чьи сеансы необходимо завершить. Вы можете выполнить этот процесс для каждого пользователя или разом, если необходимо.
Заключение
Выбор метода зависит от сценарию вашего обслуживания и специфики доступа пользователей. Использование файла /etc/nologin
в сочетании с корректировками PAM даст вам наиболее гибкое решение с минимальными усилиями. Планируйте техническое обслуживание заранее и убедитесь, что все важные пользователи проинформированы о времени и причинах работ.