Linux security limit conf

How do I change the number of open files limit in Linux? [closed]

When running my application I sometimes get an error about too many files open . Running ulimit -a reports that the limit is 1024. How do I increase the limit above 1024? Edit ulimit -n 2048 results in a permission error.

I just went through this on Centos 7 (same on RHEL) and made a blog post covering it because I had so much trouble even with all these posts: coding-stream-of-consciousness.com/2018/12/21/…. Often along with open files, you need to increase nproc which actually resides in multiple settings files. and if you use systemd/systemctl that has its own separate settings. It’s kind of nuts.

4 Answers 4

You could always try doing a ulimit -n 2048 . This will only reset the limit for your current shell and the number you specify must not exceed the hard limit

Each operating system has a different hard limit setup in a configuration file. For instance, the hard open file limit on Solaris can be set on boot from /etc/system.

set rlim_fd_max = 166384 set rlim_fd_cur = 8192 

On OS X, this same data must be set in /etc/sysctl.conf.

kern.maxfilesperproc=166384 kern.maxfiles=8192 

Under Linux, these settings are often in /etc/security/limits.conf.

There are two kinds of limits:

  • soft limits are simply the currently enforced limits
  • hard limits mark the maximum value which cannot be exceeded by setting a soft limit

Soft limits could be set by any user while hard limits are changeable only by root. Limits are a property of a process. They are inherited when a child process is created so system-wide limits should be set during the system initialization in init scripts and user limits should be set during user login for example by using pam_limits.

There are often defaults set when the machine boots. So, even though you may reset your ulimit in an individual shell, you may find that it resets back to the previous value on reboot. You may want to grep your boot scripts for the existence ulimit commands if you want to change the default.

Источник

Sysadminium

В этой статье мы разбираем лимиты, накладываемые подсистемой PAM, а для настройки этих лимитов будем править конфиг limits.conf.

Подсистема PAM

В Linux есть специальная подсистема — PAM (Pluggable Authentication Modules). Она отвечает за аутентификацию пользователей в системе. PAM используется везде, где требуется аутентификация пользователя или проверка его прав, например при подключении через SSH.

В этом курсе я не буду разбирать PAM, возможно сделаю это в отдельной статье. А в этой статье мы разберём лимиты, которые может наложить подсистема PAM на сеанс пользователя.

Лимиты накладываемые PAM (limits.conf)

При входе в систему (логине), подсистема PAM может наложить определённые лимиты на сеанс пользователя, и эти лимиты настраиваются с помощью конфига /etc/security/limits.conf. Ограничения записывается по подобию:

* soft core 0 root hard core 100000 * hard rss 10000 @student hard nproc 20 @faculty soft nproc 20 @faculty hard nproc 50 ftp hard nproc 0 ftp - chroot /ftp @student - maxlogins 4

Вот описание четырёх столбцов:

  1. Во-первых, указываем кого нужно ограничить:
    • если нужно ограничить всех пользователей, то пишем звёздочку (*);
    • если нужно ограничить определённого пользователя, то пишем имя пользователя (root);
    • а в случае ограничения группы, пишем имя группы начиная с собачки (@student).
  2. Во второй колонке задаётся тип ограничения: soft или hard. Soft — мягкое ограничение, не запрещающее а предупреждающее. Hard — жёсткое, запрещающее ограничение. Приложение умеющее обрабатывать soft должно выдать предупреждение, о том что его процесс приблизился к лимиту. А если приложение не умеет обрабатывать soft, то для такого приложения и soft и hard сработают одинаково, то есть не дадут процессу получить запрашиваемый ресурс.
  3. В третьей колонке пишется параметр, который нужно ограничить, например:
    • core — максимальный размер файла дампа памяти (KB). Такой дамп создаётся при некорректном завершении процесса. Я об этом писал здесь;
    • nofile — максимальное число открытых файлов;
    • rss — максимальный размер потребляемой памяти (КБ);
    • nproc — максимальное количество процессов;
    • maxlogins — максимальное количество входов в систему одним пользователем;
    • maxsyslogins — максимальное количество входов в систему всеми пользователям.
  4. В последней колонке задаются значения ограничивающего параметра.
Читайте также:  Net core linux установка

Получить справку по limits.conf можно здесь, или выполните команду man limits.conf .

Вот пример настройки /etc/security/limits.conf:

# nano /etc/security/limits.conf testuser hard nofile 10000 testuser hard rss 102400 testuser hard nproc 15 testuser - maxlogins 1 * - maxsyslogins 2

Здесь я настроил подсистему PAM следующим образом:

  • Все процессы пользователя testuser не могут открыть более 10000 файлов.
  • Все процессы пользователя testuser не могут занять больше 102400 КБ (100 МБ).
  • Пользователь testuser может запустить не более 15 процессов.
  • Пользователь testuser может быть залогинен в системе только 1 раз (одновременно).
  • Всего в систему могут зайти 2 пользователя (одновременно).

Итог

Если в предыдущей статье мы ограничивали процессы с помощью ядра (конфига sysclt.conf). То в этой статье мы ограничиваем пользователей с помощью подсистемы PAM (конфига limits.conf). При этом ограничить мы можем разные параметры: использование памяти и процессора, число открытых файлов, максимальное число сеансов и другое.

Таким образом вы, например, можете создать службу, которая будет работать под конкретным пользователем, и ограничить этого пользователя доступными ограничениями.

Источник

limits.conf

/etc/security/limits.conf allows setting resource limits for users logged in via PAM. This is a useful way of preventing, for example, fork-bombs from using up all system resources.

Note: The file does not affect system services. For systemd services the files /etc/systemd/system.conf , /etc/systemd/user.conf , and /etc/systemd/system/unit.d/override.conf control the limit. See the systemd-system.conf(5) man page for details.

Syntax

The default file comes well-commented, but extra information can be gleaned by checking the limits.conf(5) man page.

Recommendations

core

Corefiles are useful for debugging, but annoying when normally using your system. You should have a soft limit of 0 and a hard limit of unlimited, and then temporarily raise your limit for the current shell with ulimit -c unlimited when you need corefiles for debugging.

* soft core 0 # Prevent corefiles from being generated by default. * hard core unlimited # Allow corefiles to be temporarily enabled.

nice

You should disallow everyone except for root from having processes of minimal niceness (-20), so that root can fix an unresponsive system.

* hard nice -19 # Prevent non-root users from running a process at minimal niceness. root hard nice -20 # Allows root to run a process at minimal niceness to fix the system when unresponsive.

nofile

This limits the number of file descriptors any process owned by the specified domain can have open at any one time. You may need to increase this value to something as high as 8192 for certain games to work. Some database applications like MongoDB or Apache Kafka recommend setting nofile to 64000 or 128000 [1].

* hard nofile 65535 * soft nofile 8192 # Required for certain games to run.

nproc

Having an nproc limit is important, because this will limit how many times a fork-bomb can replicate. However, having it too low can make your system unstable or even unusable, as new processes will not be able to be created.

Читайте также:  Samsung smart view linux

A value of 300 is too low for even the most minimal of Window-managers to run more than a few desktop applications and daemons, but is often fine for an X-less server (In fact, 300 is the value that the University of Georgia’s Computer Science department used for the undergrad process limit on its Linux servers in 2017.).

Here is an example nproc limit for all users on a system:

* hard nproc 2048 # Prevent fork-bombs from taking out the system.

Note that this value of 2048 is just an example, and you may need to set yours higher. On the flipside, you also may be able to do with it being lower.

Whatever you set your nproc to, make sure to allow your root user to create as many processes as it wants; else, you might make your system inoperable by setting the normal nproc limit too low. Note that this line has to come after the global hardlimit, and that the value below ( 65536 ) is arbitrary.

root hard nproc 65536 # Prevent root from not being able to launch enough processes

priority

The default niceness should generally be 0, but you can set individual users and groups to have different default priorities using this parameter.

* soft priority 0 # Set the default priority to neutral niceness.

Источник

limits.conf и лимиты потребления

limits.conf — файл в Linux системах в котором можно задавать ограничения для системных пользователей, чаще всего на практике оказывается полезным ограничивать количество выделенных ресурсов центрального процессора или оперативной памяти. Файл находится на Debian подобных системах по пути /etc/security/limits.conf

limits.conf и лимиты потребления ресурсов для пользователей в Linux

Прежде всего, как выяснить процессы каких пользователей потребляют больше всего ресурсов CPU оперативной памяти.

Для текущего момента посмотреть процессы можно при помощи утилиты ps

ps aux —sort=%cpu | grep -v ‘root’ | head -n 35

ps aux —sort=%mem | grep -v ‘root’ | head -n 35

Команды выведут сортированные списки процессов в одной из колонок каждого списка будет указано имя пользователя. Процессы, запущенные от имени root показываться не будут и выведутся только 35 самых активных процессов.

Читайте также:  Линукс самые нужные команды

Пример вывода для cpu:

limits.conf

Пример вывода для mem:

лимиты потребления mem для системных пользователей

Подобным образом достоверные данные получить не удастся, например, для веб-сервера с mod_php, процессы всех пользователей при такой конфигурации будут запускаться от имени пользователя с правами которого работает веб-сервер.

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

Ограничения нужны на нагруженных серверах, они существуют, например, у каждого хостинг провайдера.

Лимитировать количество процессов можно используя механизм ядра cgroups — на практике проще всего установить ограничения отредактировав файл /etc/security/limits.conf и перезагрузив сервер.

Изменять /etc/security/limits.conf может только пользователь root или другой пользователь работающий из под sudo

Файл хорошо задокументирован, вся необходимая информация находится в нем в комментариях, правила меняются с помощью любого текстового редактора

В общем виде любое правило выглядит так:

domain — это пользователь или группа, для которых лимитируем ресурсы

type — тип ограничения: soft или hard, ограничение soft может быть переопределено пользователем.

item — ресурс, который ограничиваем — обычно это cpu (в минутах) или as — максимальное количество оперативной памяти (в Кб); также можно задать nice level, который не сможет быть превышен процессами пользователя/группы (минимум 20, максимум -19); здесь же можно задать chroot (только для debian)

item — само численное значение

Для того чтобы изменения вступили в силу нужна перезагрузка.

ulimit в Linux и ограничение ресурсов для пользователя

Soft лимиты пользователь может переопределить используя ulimit

Выполнение команды с аргументом -a выведет актуальные ограничения

ulimit -as 1500000
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14685
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14685
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

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

Дополнительно следует указывать тип ограничения:

Если не указывать ничего лимиты будут заданы жестко. hard здесь можно задать для текущего пользователя даже без прав root, но изменения не сохранятся после перезагрузки и чтобы ограничения были установлены постоянно нужно редактировать файл, который был рассмотрен ранее.

Создадим ограничение по оперативной памяти в 1500 Мб для пользователя

ulimit set soft limit

Выполнив ulimit -Sm или ulimit -a сейчас можно увидеть, что ограничение установлено.

Получить ту же информацию можно просмотрев лимиты для процесса

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

Источник

Оцените статью
Adblock
detector