2016-01-03 2 views
0

man для int kill(pid_t pid, int sig); говорит:правильно убить шаблон использования системных вызовов Linux

Если PID равен -1, то сиг посылается каждому процессу, для которого вызывающий процесс имеет разрешение на передачу сигналов для процесса 1 за исключением (init), но см. ниже.

Означает ли это, что если моя программа запускается с корневыми правами и случайно (из-за повреждение памяти или хак) обеспечивает -1 в качестве аргумента pid - это вызовет полный отказ в обслуживании для всей системы?

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

+2

Зачем нужна ваша программа с правами root? –

+0

@ FrédéricHamidi как это относится к вопросу? Очевидно, существуют программы, которые должны выполняться как root. Предположим, мы говорим о них. –

+2

@John, тогда эти программы должны проявлять максимальную осторожность при работе в * любой * ситуации, а не только при вызове 'kill()'. Есть несколько способов прикрепить вашу систему, если вы слегка пробиваетесь с помощью системных вызовов, будучи «root», а 'kill()' не является особенным в этом отношении - 'write()' на самом деле хуже. Теперь мы должны дважды проверить, что 'write()' не касается MBR только в случае повреждения памяти или взлома *? –

ответ

0

Означает ли это, что если моя программа запускается с корневыми правами и случайно (из-за повреждения памяти или хак) обеспечивает -1, как Pid аргумент - это приведет к тому полная DoS для всей системы?

Да, такой сценарий возможен. Но шансов на это очень мало. Потому что никакая программа, которая запускается с правами root, не сделает этого. Если вредоносный пользователь/двоичный код каким-то образом получил привилегии root, тогда отправка сигналов является лишь одной из проблем.

Если да, рекомендуется ли всегда выполнять двойную проверку значения аргумента pid перед вызовом этого потенциально катастрофического вызова?

Это просто параноидальное мышление. Есть тысячи способов сделать катастрофическое activities.You могло бы также беспокоиться о:

Что делать, если есть не злой демон бежал при запуске системы, делает:

kill(-1, SIGKILL); 

Как вы знаете, если функция вам библиотеку make не звонит reboot(2) и перезагружает вашу систему?

и т.д.

Кроме того, ИДП не только при условии, пользовательские значения, которые необходимо продезинфицировать. PID - это в основном значения, полученные в рамках программы с использованием системных вызовов или вызовов библиотеки. Таким образом, вероятность «случайного» использования -1 равна нулю. В принципе, у вас/у кого-то есть привилегия root и решили ввернуть вашу систему, тогда вы не можете многое сделать.

Смежные вопросы