Почему он не может получить более 4096 макс. Открытых файлов для пользователя без полномочий root?

13

Кажется, я не могу увеличить nofileограничение для пользователей без полномочий root в Ubuntu 14.04, несмотря на то, что следую каждому ответу StackExchange, связанному с этой проблемой. Пока что у меня есть:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

$ cat /proc/sys/fs/file-max
101232

Перезагрузился, залогинился и:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted

Там все еще как-то, кажется, ограничение в 4096 макс для пользователей без полномочий root.

Кофеин Кома
источник
У меня точно такая же проблема на рабочем столе Ubuntu 16.10. Независимо от того, что я пытаюсь, ограничения либо 1024 или
4096.

Ответы:

13

Используя Ubuntu 14.04, я получил жесткое ограничение:

user@notebook:~$ ulimit -Hn 4096  

Я мог бы уменьшить его, используя ulimit, но не увеличивать его, как описывает вопрос. Как описывает руководство ulimit:

только root может увеличить жесткий предел

Поэтому я попытался установить более высокий предел в /etc/security/limits.confследующем виде:

user hard nofile 9999 

и новый логин вроде ssh localhost -l userдал мне новый лимит:

user@notebook:~$ ulimit -Hn 9999

Надеюсь, это работает и для вас.

TomTomTom
источник
Спасибо TomTomTom. У меня уже есть такое изменение в /etc/security/limits.d/custom.conf. Я попытался поместить его непосредственно в /etc/security/limits.conf, как вы предложили, и я все еще получаю «bash: ulimit: открытые файлы: невозможно изменить ограничение: операция не разрешена».
Кофеин Кома
Я - просто угадаю - одна из двух причин, почему это не работает для вас:
TomTomTom
1
Мне потребовалось слишком много времени, чтобы отредактировать неполный комментарий. Вот и все: я - просто думаю - одна из двух причин, почему это не работает для вас: 1. /etc/security/limits*не читается вашим механизмом входа в систему - по неизвестной пока причине. 2. Ваш жесткий предел установлен на 4096 в другом месте, и «только root может увеличиться ...». Вы можете проверить свои профили как .bashrc(в зависимости от вашей оболочки), или вы можете проверить /etcдругие места, где могут быть установлены ограничения, например find /etc | grep -e ulimit -e 4096 -e nofile. Кстати: ты пробовал ssh? И: вы изменили, /etc/ssh/sshd.confчтобы избежать PAM по какой-то причине?
TomTomTom
Да, все вход в систему через SSH. Я отключил UsePAM - несколько руководств рекомендуют это как часть разрешения входа только на основе ssh-ключа. Я попробую включить его временно, просто чтобы увидеть, в этом ли проблема. Благодарность!
Кофеин Кома
Afaik, PAM - это то, что следует читать /etc/security/limits*- вы можете попытаться включить PAM только для проверки этого. Я попробую отключить PAM, чтобы увидеть, какая разница, и сообщу о результатах. --- Да! Это оно! С отключенным PAM мой лимит также составляет 4096, хотя и установлен на 9999 дюйма /etc/security/limits.conf.
TomTomTom
4

Эта статья , я думаю, решает вашу проблему.

В основном вы должны использовать команду ulimit для увеличения доступных ресурсов.

Например:

Используйте следующую команду для отображения максимального числа дескрипторов открытых файлов:

cat /proc/sys/fs/file-max

Чтобы увидеть жесткие и мягкие значения, введите команду следующим образом:

# ulimit -Hn
# ulimit -Sn

Чтобы увидеть жесткие и программные значения для пользователя httpd или oracle, введите следующую команду:

# su - username

Чтобы зафиксировать максимальное количество файлов, вы можете увеличить максимальное количество открытых файлов, установив новое значение в переменной ядра / proc / sys / fs / file-max следующим образом (войдите в систему как root):

# sysctl -w fs.file-max=100000

Выше команды форсирует ограничение до 100000 файлов. Вам нужно отредактировать /etc/sysctl.confфайл и поставить следующую строку, чтобы после перезагрузки настройка оставалась как есть. Для этого добавьте директиву config следующим образом:

fs.file-max = 100000

Сохраните и закройте файл. Чтобы изменения вступили в силу, пользователям необходимо выйти и снова войти в систему или просто введите следующую команду:

# sysctl -p

Проверьте настройки с помощью команды:

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

или:

# sysctl fs.file-max

Вышеуказанная процедура устанавливает ограничения для файловых дескрипторов системы (FD), однако вы можете ограничить httpd(или любых других пользователей) пользователей определенными ограничениями, отредактировав /etc/security/limits.confфайл путем редактирования /etc/security/limits.confи установив ограничения следующим образом:

httpd soft nofile 4096
httpd hard nofile 10240

Затем проверьте их по:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Если у вас есть проблема в других дистрибутивах Linux, проверьте /etc/pam.d/loginи убедитесь, что у вас pam_limits.soвключено, например

session required pam_limits.so
Брук Фогг-Вульф
источник
2
Привет брук К сожалению, я уже попробовал предложения из этой статьи. Хотя «ulimit -Hn» был для меня новым; это печатает 4096, предел, в который я продолжаю натыкаться.
Кофеин Кома
0

Если это услуга, вы можете попытаться установить ограничение в /etc/systemd/system/{ServiceName}.serviceдобавленииLimitNOFILE=65536

Майкон Сантана
источник
Ubuntu 14.04 не использует systemd по умолчанию.
number5
Ubuntu 16.04, Tomcat 8 работал для меня
Арджанг