В FreeBSD 9.0 появился новый механизм управления доступом к ресурсам системы — демон racctd. Для управления существует утилита rctl. По умолчанию механизм выключен, для активации необходимо добавить в конфигурационный файл ядра следующие стрроки:

options RACCT
options RCTL

После пересборки и загрузки с новым ядром запускается демон racctd. Управляющая им утилита rctl позволяет просмотреть список правил (все или с фильтрами)., очистить правила, добавить новое правило. Синтаксис правила имеет вид:

subject:subject-id:resource:action=amount/per

subject — субъект правила, может быть:

  • process,
  • user,
  • loginclass,
  • jail.

subject-id — идентификатор субъекта:

  • имя пользователя либо его ID в системе,
  • имя класса,
  • имя jail.

resource — тип контролируемого ресурса, может быть:

  • cputime —  время CPU в секундах (толку от этого ресурса мягко говоря не много, поскольку доступен только для чтения, например, в контексте «добавить в лог запись, если пользователь занял более 2 секунд процессорного времени),
  • datasize — используемые данные, в байтах, причем какие именно данные известно одному разработчику,
  • stacksize — размер стека в байтах, как правило равен 0
  • coredumpsize — размер файла дампа в байтах, если установка в 1 байт реально запрещает приложениям создавать дампы, то это замечательно, но стоило ли ради этого писать целый racctd,
  • memoryuse — количество используемой памяти в байтах, это более-менее соответствует истине,
  • memorylocked — количество блокируемой памяти в  байтах, как правило для пользовательских процессов равно 0,
  • maxproc- количество процессов — единственный полезный ресурс, ограничение реально работает
  • openfiles — размер таблицы файловых дескрипторов, кстати тоже преимущественно 0, отдаленно напоминает ужасные квоты, но там оно хотя бы работало,
  • vmemoryuse — количество виртуальной памяти в байтах, сомнительно, что имеет смысл ограничивать,
  • pseudoterminals количество псевдотерминалов PTYs, что является терминалом в контексте автора непонятно, обычные логины в консолях псевдотерминалами с точки зрения racctd не являются,
  • swapuse — размер файла подкачки в байтах, тоже сомнительный ресурс, даже несмотря на тот факт, что при исчерпании резервированного файла подкачки FreeBSD становиться неуправляемой,
  • nthr — количество потоков, как правило совпадает в количеством процессов,
  • msgqqueued — количество очередей SysV сообщений,
  • msgqsize — размер сообщения SysV в очереди в байтах,
  • nmsgq — количество сообщений SysV в очереди ,
  • nsem — количество SysV семафоров,
  • nsemop — количество SysV семафоров semaphores, преобразуемых в один semop вызов
  • nshm — количество SysV общих сегментов памяти
  • shmsize — размер SysV общего сегмента памяти в байтах,
  • wallclock в секундах.

action — определячет действие при выполнения условия правила, может быть:

  • deny  - запрет выделения ресурса, неприменимо для ресурсов cpu и wallclock,
  • log — вывод сообщения в консоль (и в файл лога по умолчанию),
  • devctl — отправка сообщения для devd,
  • sig* или sigterm —  послать сигнал  превысившему ограничение процессу.

Указывать /per  можно при описании класса пользователей, например:

loginclass:customrs:memoryuse:deny=200m/user

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

user:joe: maxproc:deny=25

Если нужно только фиксировать превышение, необходимо действие log

user:joe: datasize:log=26m

Тогда при превышении лимита в файле лога появится сообщение вида

Jan 16 12:22:59 test kernel: rctl: rule "user:1001:datasize:log=27262976" matched by pid 1770 (ubench), uid 1001, jail 0

При одновременном наличии правил log и deny первым срабатывает запрет и запись в логе не появляется, хотя при просмотре правил логирование раньше

# rctl -h
user:joe:maxproc:log=25
user:joe:maxproc:deny=25

Полный отчет по ресурсам можно посмотреть так:

# rctl -hu user:joe
cputime=853
datasize=24M
stacksize=0
coredumpsize=0
memoryuse=54M
memorylocked=0
maxproc=14
openfiles=0
vmemoryuse=562M
pseudoterminals=0
swapuse=0
nthr=14
msgqqueued=0
msgqsize=0
nmsgq=0
nsem=0
nsemop=0
nshm=0
shmsize=0
wallclock=81k

 

 

 

Милые модницы, вы можете купить по низким ценам .