Максимальное количество открытых файлов на процесс -ядро ​​Linux

Изучив справочную страницу sshd_config(5), я нашел несколько ключевых слов конфигурации, которые можно было бы каким-то образом использовать для достижения этой цели.:

  1. Использовать модифицированныйAuthenticationMethodsс блокомMatch
  2. ИспользуйтеAuthorizedKeysCommandдля запуска сценария при каждом входе в систему, который решает, требуется ли пароль
  3. ИспользуйтеForceCommandдля выполнения пользовательской команды для проверки необходимого пароля после успешного входа в систему.

Подробно:

  1. Используйте модифицированныйAuthenticationMethodsс блокомMatch:с этим вы можете запретить аутентификацию с открытым ключом или дополнительно требовать аутентификацию по паролю для определенных пользователей:
Match User john
        AuthenticationMethods publickey,password publickey,keyboard-interactive

При этом пользователь johnдолжен ввести пароль после успешной аутентификации с открытым ключом. Но периодически менять , какие пользователи должны вводить свой пароль, немного сложно. Одним из способов может быть пользовательский сценарий для изменения sshd_configдля добавления/удаления пользователей и подачи сигнала sshdдля перезагрузки его конфигурации -, что является довольно неприятным хаком.

Единственный способ, которым я вижу Matchдинамически, этоGroup:

Match Group need-passwd
        AuthenticationMethods publickey,password publickey,keyboard-interactive

При этом вам не нужно изменять sshd_config, а только добавлять/удалять пользователей в системную группу need-passwdсоответственно. Затем sshdпроверит, входит ли пользователь в эту группу, и если да, то дополнительно потребует пароль.

  1. ИспользуйтеAuthorizedKeysCommandдля запуска сценария при каждом входе в систему, который решает, требуется ли пароль
# ignore existing authorized_keys files by default
AuthorizedKeysFile /dev/null
# instead load allowed authorized_keys using external command
AuthorizedKeysCommand /path/to/external_script.sh
# root is required to be able to read users ~/.ssh/authorized_keys files
AuthorizedKeysCommandUser root

Вместо sshdпрямого просмотра ~/.ssh/authorized_keysбудут использоваться только ключи, предоставленные external_script.sh, где вы можете реализовать свою пользовательскую логику, например. *поиск последнего успешного удаленного входа пользователя в систему *если это было более 24 часов назад, не возвращайте авторизованные ключи,эффективное отключение аутентификации с открытым ключом *если это было в течение последних 24 часов, просто верните содержимое~/.ssh/authorized_keys

Последнее является причиной того, что external_script.shтребуется rootдоступ для чтения файлов в домашней папке пользователей.

Недостаток этого подхода по сравнению с 1. и 3. заключается в том, что вам придется фактически снизить уровень безопасности, разрешив вход только с паролем -.

  1. ИспользуйтеForceCommandдля выполнения пользовательской команды для проверки необходимого пароля после успешного входа в систему.

Вместо выполнения команды, предоставленной клиенту sshпользователем, ForceCommandбудет выполняться после успешного входа в систему (с открытым ключом ). В этой команде вы можете реализовать свою пользовательскую логику (, см. выше ), и сначала запросить пароль для входа, если это необходимо, или просто выполнить предоставленную командную строку.

Недостатком здесь является то, что это довольно сложно сделать правильно :*поскольку команда выполняется только после успешного входа в систему пользователь уже будет в системе -, что означает, что запрошенный порт/X11/ssh -переадресация агента может быть уже активна до того, как пароль вводится *правильная обработка предоставленной командной строки -если таковая имеется -может потребоваться внимательное экранирование всех строк

Кроме того, поскольку пароль/логин запрашивается пользовательским скриптом, он не будет поддерживаться/обрабатываться клиентами ssh, но требует работающего tty.

Вы можете комбинировать подход 2. и 3. вместо того, чтобы возвращать неавторизованные ключи, добавляйте к строкам префикс с опциями restrictполный доступ и выполняйте только принудительный пользовательский command, см. АВТОРИЗОВАННЫЕ _КЛЮЧИ _ФАЙЛ _ФОРМАТ .

1
20.01.2021, 14:27
2 ответа
cat /proc/sys/fs/nr_open

Вы можете изменить его, записав в этот файл, он не зашит жестко.

Фактический верхний предел, который вы можете установить, намного больше .

1
18.03.2021, 22:35

Это не так жестко запрограммировано, как вы утверждаете. Максимальное число для вашей системы

.
 cat /proc/sys/fs/file-max 

Для меня это будет 3257198. Если вы любите (изменять параметры ядра на лету, мммммм ), вы можете изменить это число.

Абсолютный максимум дается тем фактом, что это longцелое число в C, и, следовательно, максимум будет 2147483647.

Для каждого процесса максимум

cat /proc/sys/fs/nr_open

(в моей системе также ваш 1048576 ).

Технически это unsigned long (см. fs.h; найдите unsigned long max_files;в struct files_stat_struct. Но количество открытых файлов на процесс должно быть ниже максимального системного -, поэтому оно должно быть ниже 2147483647 или ниже вашего cat /proc/sys/fs/file-maxзначения.

1
18.03.2021, 22:35

Теги

Похожие вопросы