Вопрос или проблема
После редактирования файла /etc/security/limits.conf
для установки параметра nofile
на неограниченный, сервер завис. Не получается войти через ssh. Попытался получить доступ через консоль, возникли проблемы с консолью. Решит ли перезагрузка ВМ проблему входа?
Запуск ulimit -n unlimited
от имени суперпользователя в Linux возвращает: Operation not permitted
. Вам нужно загрузиться в однопользовательский режим и исправить limits.conf
, задав разумное значение, потому что Linux запрещает неограниченный NOFILE.
Если у вас есть активная сессия и вы являетесь пользователем группы wheel, вы можете использовать systemd-run
для устранения проблем с созданием новых сессий, которые вызваны недействительной конфигурацией или чрезмерными лимитами на количество открытых файлов.
Это сработало для меня, даже когда pkexec su --session-command
и многие другие попытки не помогли.
Например:
systemd-run sh -c "cat fixed.conf > /etc/security/limits.conf"
.
Ответ или решение
Редактирование файла /etc/security/limits.conf
с целью установки параметра nofile
на значение unlimited
может привести к проблемам с доступом к серверу. Основная причина этого заключается в том, что Linux не позволяет устанавливать неограниченные значения для максимального количества открытых файловых дескрипторов (NOFILE
). Из-за этого, после изменения конфигурации, сервер может начать вести себя нестабильно и, как было отмечено в вашем случае, может зависнуть, что нарушает возможность подключения по SSH и даже через консоль.
Если сервер находится в таком состоянии, перезагрузка виртуальной машины может помочь временно решить проблему с зависанием, однако она вряд ли решит проблему с конфигурацией. Чтобы полностью устранить проблему, необходимо внести изменения в файл limits.conf
, установив значение nofile
на разумную величину, например, 65535, которая обычно используется в продакшн-системах.
Шаги для восстановления доступа и внесения изменений в конфигурацию:
-
Загрузка в однопользовательский режим:
- Перезагрузите виртуальную машину и войдите в GRUB-меню загрузки. Чтобы это сделать, следуйте инструкции вашей системы для входа в расширенные параметры загрузки.
- На этапе GRUB выберите ядро для загрузки, затем нажмите
e
, чтобы отредактировать его параметры. - Добавьте в конец строки, начинающейся с
linux
, параметрsingle
, что позволит загрузиться в однопользовательский режим. - Нажмите
Ctrl + X
, чтобы продолжить загрузку.
-
Редактирование файла
limits.conf
:- Когда система загрузится в однопользовательском режиме, откройте файл
/etc/security/limits.conf
с помощью текстового редактора (например,vi
). - Найдите строку, которая устанавливает значение
nofile
вunlimited
, и измените его на приемлемое число, например,65535
. - Сохраните изменения и закройте редактор.
- Когда система загрузится в однопользовательском режиме, откройте файл
-
Перезагрузка системы:
- Перезагрузите систему для применения изменений, введя команду
reboot
.
- Перезагрузите систему для применения изменений, введя команду
Использование systemd для обхода проблем с открытием сессий:
Если у вас была открыта сессия и вы принадлежите к группе wheel, вы можете использовать systemd-run
, чтобы исправить проблемы, связанные с созданием новых сессий. Команда, приведенная ниже, позволяет обновить файл конфигурации без перезагрузки системы на работающем сервере:
systemd-run sh -c "cat fixed.conf > /etc/security/limits.conf"
Это временное решение может оказаться полезным для предотвращения временного отключения доступа, однако измененные данные в подгруженном файле конфигурации все равно должны быть проверены более тщательно и перенастроены после перезагрузки системы.
Помните, что вся система зависит от правильных системных настроек ресурсов. Неправильные конфигурации могут привести не только к проблемам с доступом, но и к компрометации стабильности и безопасности вашей инфраструктуры.