Как обойти “Слишком много открытых файлов” в debian

Я думаю, что Вам будет нелегко делать то, что Вы хотите. passwd команда идет на многое для предотвращения просто ситуации, которую Вы описываете, чтобы препятствовать любым схемам подбора пароля и обойти много возможных проблем защиты.

Можно ли использовать useradd команда? Типичный Linux useradd имеет "-p" или "-пароль" опция, которая позволяет Вам установить зашифрованный пароль на некоторое значение. Можно вытащить тот зашифрованный пароль из файла /etc/shadow.

Другая опция обезьяне с файлом /etc/shadow. Это не должно быть слишком твердо к используемому sed или что-то для изменения соленого, зашифрованного пароля root.

8
30.08.2013, 02:15
2 ответа

Важно знать, что существует два вида пределов:

  • Жесткий предел настраивается корнем только. Это - максимально возможное значение (предел) для мягкого предела.
  • Мягкий предел может быть установлен обычным пользователем. Это - фактический предел в действительности.

Решение для единственной сессии

В оболочке устанавливает мягкий предел:

ulimit -Sn 2048

Этот пример повысит фактический предел 2048, но команда успешно выполнится, только если жесткий предел (проверьте: ulimit -Hn) то же или выше. Если Вы нуждаетесь в более высоких значениях, повышаете жесткий предел с помощью одного из методов ниже. Пределы устанавливаются для каждого процесса, и они наследованы недавно порожденными процессами, таким образом, что-либо, Вы бежите за этой командой в той же оболочке, будет иметь новые пределы.

Изменение жесткого предела на единственной сессии

Это не легко, потому что только корень может изменить жесткий предел, и после переключения на корень необходимо переключиться назад на исходного пользователя. Вот решение с sudo:

sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""

Решение в масштабе всей системы

В Debian и многом другом системном использовании pam_limits можно установить пределы в масштабе всей системы в /etc/security/limits.conf и в файлах в /etc/security/limits.d. conf файл содержит описание. Строки в качестве примера:

@webadmins       hard     nofile     16384
@webadmins       soft     nofile      8192

Это установит жесткий предел и мягкий предел по умолчанию для пользователей в группе webadmins после входа в систему.

Другие пределы

Значение жесткого предела ограничено глобальным пределом открытого значения дескрипторов файлов в /proc/sys/fs/file-max который довольно высок по умолчанию в современных дистрибутивах Linux. Это значение ограничено NR_OPEN значение используется во время компиляции ядра.

Разве нет ли лучшего решения?

Возможно, Вы могли проверить если весь *log файлы Вы питаетесь к tail -f действительно активные файлы, которые должны контролироваться. Возможно, что некоторые из них уже закрываются для входа, и можно просто открыть меньшее число файлов.

15
27.01.2020, 20:10
  • 1
    ulimit-Sn 4096 - удар: ulimit: открытые файлы: Kann умирают Grenze nicht ändern: Аргумент Десяти кубометров ist ungültig - означает, что аргументом не является допустимый –  rubo77 04.08.2013, 07:44
  • 2
    @rubo77: Я добавил информацию о жестком пределе, который является по всей вероятности причиной проблемы. –  pabouk 04.08.2013, 07:47
  • 3
    @rubo77: Это также возможно установить жесткий предел на сессии оболочки, но является этим хитрый, как Вы имеете к su базироваться и su назад пользователю: su -c "ulimit -Hn 6000 ; su $USER" –  pabouk 04.08.2013, 07:55
  • 4
    OK, таким образом, для временного изменения предела я буду использовать ulimit -Hn 6000; ulimit -Sn 6000 как базируются затем –  rubo77 04.08.2013, 16:02
  • 5
    @amenthes я предполагаю Вас, означает конфигурационные файлы в /etc/limits.*. Эти пределы применяются каждый раз, когда модуль PAM pam_limits.so назван. Обычно это в начале сессии. Например, в Ubuntu 14.04 это находится в этих инструментах / команды: cron, login (текстовый консольный вход в систему), lightdm (вход в систему GUI), su. Можно ли установить, где pam_limits используемый в /etc/pam.*. Посмотрите, например: faqs.org/docs/securing/chap5sec44.html –  pabouk 23.09.2014, 11:46

У меня было предупреждение PHP в моем журнале ошибок Apache:

failed to open stream: Too many open files in ...

Итак, я узнал, что apache устанавливает это значение индивидуально при запуске (на моем Ubuntu 14.04 ). Он настроен в / etc / apache2 / envvars . Там написано:

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

, поэтому мне пришлось настроить третью строку.

0
27.01.2020, 20:10

Теги

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