2015-02-08 1 views
2

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

Для присвоения класса , Мне нужно было написать программу для определения количества одновременных процессов, которые могут запускаться пользователем одновременно. Моя программа создает определенное количество процессов до того, как fork() возвращает -1, потому что предел достигнут, а затем завершает эти процессы и заканчивает.

Когда я запускаю как root, он рассчитывает 16 созданных процессов перед их прекращением, что имеет смысл. В Minix 2 man page for fork() указано, что предел задается переменной NR_PROCS в /usr/include/minix/config.h, и это значение равно 32. В root выполняется 16 процессов в дополнение к 14, созданным программой (+2 для оболочки и самой программы), поэтому что составляет в общей сложности 32 процесса.

При запуске как непривилегированного пользователя ast, однако, программа возвращает только 13 (так что это всего лишь 11 процессов, плюс два для оболочки и программы). Я использую su ast для запуска в качестве пользователя ast, но я не знаю, учтен ли этот процесс. UPDATE: Вход в систему как ast заставляет программу запускать 12 процессов, поэтому добавление двух для оболочки и самой программы означает, что ast может иметь только 14 одновременных процессов (пользователь не запускает никаких других).

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

+2

Да, 'su ast' - это один процесс, а затем он разворачивает оболочку для' ast', это другой процесс. Что произойдет, если вы войдете в систему как «ast» и запустите? –

+0

@Blue Moon Я считал это, но логин, поскольку 'ast' отключен (запись в'/etc/passwd' дает '*' в том месте, где будет написан пароль, а это значит, что это неверно). Я дам ему попробовать завтра, когда у меня будет немного времени, чтобы побаловать себя в системе; большая часть сегодняшнего дня состояла в том, что на самом деле была написана программа. – vaindil

+0

@BlueMoon Я включил логин как пользователь 'ast' и запустил программу; он сообщил о 14 процессах. 'ast' выполняет только один другой процесс,' -sh', и это учтено в программе, поэтому похоже, что пользователь 'ast' может на самом деле только порождать 14 процессов одновременно по сравнению с' root''s 32, предполагая мой код правильный. – vaindil

ответ

0

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

Иногда это настройка для каждого пользователя (для защиты других пользователей), а иногда это разделение пользователя/корня (для защиты системы), а иногда и то и другое.