как ограничить пользователя по ресурсам

12
dantess
На сайте с 06.11.2004
Offline
133
4061

Подскажите, пожалуйста, подняли сервер.

Все нормально работает.

Только 1 момент не получается настроить:

Perl запускается от имени пользователя

Пользователь создан реселлерской панелью DirectAdmin

В результате perl скрипт имеет возможность съесть всю оперативку (2Гб) и

весь CPU. Как это ограничить?

OS: CentOS 4.4 (на базе Red Hat)

Lupus
На сайте с 02.11.2002
Offline
241
#1

Надо для пользователя, запускающего скрипт урезать лимиты в /etc/security/limits.conf

Наберите man limits.conf - там написано.

There are two types of people in this world: 1. Those who can extrapolate from incomplete data.
dantess
На сайте с 06.11.2004
Offline
133
#2
Lupus:
Надо для пользователя, запускающего скрипт урезать лимиты в /etc/security/limits.conf
Наберите man limits.conf - там написано.

пробовал уже:

pointmsc hard memlock 10000

pointmsc hard cpu 1

pointmsc - это тот самый пользователь.

не помогает. (кстати, чтобы эти изменения применились какую службу надо перезапустить? А то я так и не додумался - пришлось сервер рестартить. А сейчас рестартить его уже нельзя - теперь на нем сайты есть)

p.s. man говорит, что нет инфы (

Lupus
На сайте с 02.11.2002
Offline
241
#3
dantess:
пробовал уже:
pointmsc hard memlock 10000
pointmsc hard cpu 1

Там есть значительно больше возможностей. Например, можно сделать так:

@users hard data 10000

@users hard memlock 32000

@users hard as 10000

dantess:
p.s. man говорит, что нет инфы (

Гугель поможет:

В файле limits.conf определяются ограничения ресурсов системы для пользователя или группы пользователей. Формат файла такой:

<domain> <type> <item> <value>

Первое поле (domain) может содержать:

1. Имя пользователя
2. Имя группы. Перед именем группы нужно указать символ «@»
3. Символ «*». Данное ограничение будет ограничением по умолчанию.

Второе поле – это тип ограничения: мягкое (soft) или жесткое (hard). Мягкое ограничение определяет число системных ресурсов, которое пользователь все еще может превысить, жесткое ограничение превысить невозможно. При попытке сделать это, пользователь получит сообщение об ошибке.
Элементом ограничения (item) может быть:

1. core – ограничение размера файла core (Кб)
2. data – максимальный размер данных (Кб)
3. fsize – максимальный размер файла (Кб)
4. memlock – максимальное заблокированное адресное пространство (Кб)
5. nofile – максимальное число открытых файлов
6. stack – максимальный размер стека (Кб)
7. cpu – максимальное время процессора (минуты)
8. nproc – максимальное число процессов
9. as – ограничение адресного пространства
10. maxlogins – максимальное число одновременных регистраций в системе
11. locks – максимальное число файлов блокировки

Рассмотрим несколько примеров. Например, нам нужно установить максимальное число процессов для пользователя user. Это можно сделать с помощью таких записей

user soft nproc 50
user hard nproc 60

Первая строка определяет мягкое ограничение (равное 50), а вторая – жесткое.

Допустим, у нас есть группы dialup1 и dialup2. В каждую группу входят 30 пользователей. У нас есть всего 30 входящих линий, поэтому нужно обеспечить одновременную работу не более 15 пользователей из каждой группы. Это делается так:

@dialup1 - maxlogins 14
@dialup2 - maxlogins 14

В первом и втором случае из каждой группы пользователей одновременно работать смогут не более 15 (maxlogins 14 – отсчет начинается с нуля). При регистрации шестнадцатый пользователь увидит сообщение:

Too many logins for 'dialup1'
Lupus
На сайте с 02.11.2002
Offline
241
#4

Можно еще здесь почитать. Там полный список опций.

dantess
На сайте с 06.11.2004
Offline
133
#5
Lupus:
Там есть значительно больше возможностей. Например, можно сделать так:
@users hard data 10000
@users hard memlock 32000
@users hard as 10000

Про то что там больше возможностей - я знаю.

Но почему не работает:

pointmsc hard memlock 10000

pointmsc hard cpu 1

Сейчас попробую предложенный Вами вариант.

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

dantess
На сайте с 06.11.2004
Offline
133
#6
Lupus:
Там есть значительно больше возможностей. Например, можно сделать так:
@users hard data 10000
@users hard memlock 32000
@users hard as 10000

Про то что там больше возможностей - я знаю.

Но почему не работает:

pointmsc hard memlock 10000

pointmsc hard cpu 1

Сейчас попробую предложенный Вами вариант.

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

Lupus
На сайте с 02.11.2002
Offline
241
#7
dantess:
P.S. подскажите какой сервис надо перезагрузить, чтоб применились изменения

Признаюсь честно - в линухах я спец небольшой. Полагаю, что, если скрипт запускается демоном (апачем, кроном и т.п.), то ограничить надо именно юзера, под которым демон запущен, а самого демона рестартовать. Или запускать скрипт через su.

Если скрипт запускается вручную, то рестартовать никого не надо.

Это IMHO. Во фре пришлось бы перестроить базу классов входа.

dantess
На сайте с 06.11.2004
Offline
133
#8
Lupus:
Признаюсь честно - в линухах я спец небольшой. Полагаю, что, если скрипт запускается демоном (апачем, кроном и т.п.), то ограничить надо именно юзера, под которым демон запущен, а самого демона рестартовать. Или запускать скрипт через su.
Если скрипт запускается вручную, то рестартовать никого не надо.

Это IMHO. Во фре пришлось бы перестроить базу классов входа.

perl (который мне и нужно ограничить) запускается от имени пользователя которому пренадлежит файл. То что нужно ограничить этого пользователя - это и так понятно.

K
На сайте с 24.03.2004
Offline
223
#9
dantess:
perl (который мне и нужно ограничить) запускается от имени пользователя которому пренадлежит файл. То что нужно ограничить этого пользователя - это и так понятно.

важно как он запускается, т.к. лимиты из /etc влияют только на процессы после логина... а все остальное, что какими-то иными путями сделалось с uid пользователя, обходит эти лимиты стороной... соответственно если запускалка скриптов вызывает setrlimit, то какие-то лимиты будут проставляться... а если нет, то будут наследоваться от родителя.

ЗЫ. Система в которой лимиты не на login or per process, а на uid range называется Virtuozzo 😂

проверенная ддос защита (http://ddos-protection.ru) -> http://ddos-protection.ru (http://ddos-protection.ru), бесплатный тест, цена от размера атаки не зависит.
Lupus
На сайте с 02.11.2002
Offline
241
#10
kostich:
Система в которой лимиты не на login or per process, а на uid range называется Virtuozzo

Кстати, давно ищу эту "виртуозу". Надо не для коммерции, а для собственных экспериментов. А платить $2500 только для этого как-то неохота. Может есть у кого?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий