ulimit -n не змінюється - значення limit.conf не впливає


13

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

Це питання є дещо наслідком цього питання.

Налаштування відкритого дескриптора файлу limit.conf не читається ulimit, навіть коли потрібно пам`яти.Замін

за винятком того, що я додав необхідні записи "root" у limit.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, щоб змінити оболонку за замовчуванням, оскільки мій користувач на машині перевіряється автентифікацією за допомогою деякої розподіленої схеми аутентифікації.


strace -o loglimit su - abc і після цього egrep "(limit | open)" loglimit, можливо, ваша конфігурація пам є неправильною
c4f4t0r

@ c4f4t0r, опція - su викликає новий логін лише тоді, коли це останній аргумент. Я це знаю лише тому, що я просто читав сторінку чоловіка. Крім того, звичайно, звичайний користувач не може прокласти бінарний корінний код.
etherfish

як root потрібно використовувати команду strace -o loglimit su - abc
c4f4t0r

вибачте за спам, але у мене є такий випуск unix.stackexchange.com/questions/200310/…
урядли

Відповіді:


5

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

Як виявилося, коли ви встановили:

UsePrivilegeSeparation yes

у /etc/ssh/sshd_configфайлі, а потім sshd розсилає непривілейовану дитину, щоб налаштувати оточення облікового запису. Оскільки ця дитина не є привілейованою, то встановлення верхніх меж pam_limits.so не вплинуло.

Як тільки я встановив

UsePrivilegeSeparation no

у /etc/ssh/sshd_configслужбі SSH та відмовився від неї, тоді файл limit.conf дотримувався входів із SSH.


2
У моєму випадку я змінив sshd-config на UsePAM yes. (+1 за вказівку на sshd-config)
Рандалл Вітман

4

Я підозрюю, що прошивку застосовують / 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

Щасти.


мій жорсткий ліміт - 4096, тобтоulimit -Hn
Неррв,

4

На сервері Redhat увійшов як root

/etc/security/limits.conf

user01  -       nofile  2048

Команда strace записана як root

strace -o loglimit su - user01

з іншою оболонкою відкритий логміт

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

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


3

Я був із таким питанням, ось що я зробив.

Команда 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 - ім'я користувача) немає жодного примірника тексту обмежень, тому файл limit.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 завантажується в режимі аутентифікації у файлах, розташованих у /etc/pam.d ... наприклад, у /etc/pam.d/su я додав:

session   required    pam_limits.so

Тепер я можу зробити «су» своєму користувачеві, і обмеження будуть завантажені. Ви можете повторити крок страйку, щоб переконатися в цьому.

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

Але сподівання це допомагає.


1

У моєму випадку (Centos 6.10) пробіг показав, що після встановлення ліміту з /etc/security/limits.conf пізніше в процесі входу він був скинутий з /etc/security/limits.d/90-nproc.conf для всіх не Користувачі:

*          soft    nproc     1024
root       soft    nproc     unlimited
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.