Назад | Перейти на главную страницу

ulimit -n не меняется - значения limits.conf не действуют

Я пытаюсь поднять максимальный дескриптор открытого файла для всех пользователей на машине ubuntu.

Этот вопрос является своего рода продолжением этого вопроса.

параметр open file descriptor limits.conf не читается ulimit, даже если требуется pam_limits.so

за исключением того, что я добавил необходимые "корневые" записи в limits.conf

Вот записи

*               soft    nofile           100000
*               hard    nofile           100000
root            soft    nofile           100000
root            hard    nofile           100000

Линии, относящиеся к pam_limits.so не прокомментированы во всех соответствующих файлах в /etc/pam.d/ и fs.file-max правильно установлен в /etc/sysctl.conf

Однако я все еще вижу

abc@machine-2:/etc/pam.d$ ulimit -n
1024

после перезагрузки.

В чем может быть проблема?

Моя оболочка по умолчанию - / bin / sh, и я не могу использовать chsh для изменения оболочки по умолчанию, поскольку мой пользователь на машине аутентифицирован с помощью некоторой распределенной схемы аутентификации.

У меня была аналогичная проблема, но только с логинами SSH. Локальные входы (через консоль) соблюдали /etc/security/limits.conf.

Как оказалось, при установке:

UsePrivilegeSeparation yes

в /etc/ssh/sshd_config файл, затем sshd разветвляет непривилегированного ребенка для настройки env учетной записи. Поскольку этот дочерний элемент является непривилегированным, установка верхних пределов pam_limits.so не имеет никакого эффекта.

Как только я установил

UsePrivilegeSeparation no

в /etc/ssh/sshd_config и отказался от службы SSH, тогда файл limits.conf был соблюден с логинами SSH.

На сервере Redhat авторизован как root

/etc/security/limits.conf

user01  -       nofile  2048

команда strace зарегистрирована как root

strace -o loglimit su - user01

с другой оболочкой open loglimit

grep "limit" loglimit
open("/lib64/security/pam_limits.so", O_RDONLY) = 6
 ..........
 ..........
 open("/etc/security/limits.conf", O_RDONLY) = 3
 read(3, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 1823
 open("/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
 setrlimit(RLIMIT_NOFILE, {rlim_cur=2*1024, rlim_max=2*1024}) = 0

Таким образом, я знаю, что pam_limits был загружен и limits.conf был прочитан, если ваш pam_limits был загружен, но вы все еще видите другие значения, используя ulimit -n, проверьте свой профиль оболочки, как сказал @etherfish

Я подозреваю, что ulimit применяется в / etc / profile или ~ / .bashrc. Тот факт, что ваша система имеет сложную память, я подтверждаю, что что-то не так.

Я также подтверждаю, что в /etc/security/limits.d/ нет ошибочного файла, который анализируется, как указано в pam_limits (8).

Я бы добавил параметр отладки в строку pam_limits.conf, необходимую для сеанса, а затем смотрел /var/log/auth.log, когда вы входите в систему.

Если ваш мягкий лимит равен 1024, каков ваш жесткий лимит?

su должен предоставить вам свежий, новый вход в систему с помощью su с аргументом -l.

su -l -s / bin / bash

Удачи.

У меня была такая проблема, вот что я сделал.

Команда strace распечатает все взаимодействия, которые процесс делает с внешними библиотеками, поэтому с ее помощью мы можем видеть, загружена наша конфигурация или нет.

Итак, я делаю, как предложено выше:

root:/etc/pam.d$ strace -o ~/loglimit su - glaudiston
glaudiston:~$ exit
logout
root:/etc/pam.d$ cat ~/loglimit | grep limits.conf

В моей проблеме в журнале strace (strace -o log su - username) нет экземпляра текста ограничений, поэтому файл limits.conf НЕ был загружен.

Сначала я убеждаюсь, что pam_limits.so ищет /etc/security/limits.conf

root:/etc/pam.d$ strings /lib/security/pam_limits.so | grep limits.conf
/etc/security/limits.conf

Итак, я убеждаюсь, что модуль pam_limits.so загружен в операции auth в файлах, расположенных в /etc/pam.d ... например, в /etc/pam.d/su, я добавил:

session   required    pam_limits.so

Теперь я могу отправить своему пользователю «su», и ограничения будут загружены. Вы можете повторить шаг strace, чтобы убедиться в этом.

Мой linux - это LFS, поэтому я виноват в отсутствии pam_limits.so в файлах /etc/pam.d. В других дистрибутивах я не думаю, что это именно та проблема.

Но надеюсь, что это поможет.

В моем случае (Centos 6.10) strace показал, что после того, как предел был установлен с /etc/security/limits.conf позже в процессе входа в систему он был сброшен с /etc/security/limits.d/90-nproc.conf для всех пользователей без полномочий root:

*          soft    nproc     1024
root       soft    nproc     unlimited