2015-03-11 3 views
0

Я новичок в strace, и я хочу спрятать раздвоенный ребенок. Поскольку я хочу делать это в качестве обычного пользователя, процесс, который я хочу привязать с помощью pid, должен быть дочерним элементом процесса трассировки (strace), поэтому мне нужно разворачивать дважды. В Баш:Спрячьте pid, включенные дочерние процессы

((sleep 1; echo "I'm echoed from a child of strace")& exec strace -p $!) 
#the sleep is for giving strace time to attach itself 

Это все работает, но я хочу, чтобы отслеживать детей отслеживаемой процесс слишком и, как только я добавить -f переключатель в Трассирование, я получаю сообщение об ошибке:

((sleep 1; echo "I'm echoed from a child of strace")& exec strace -fp $!) 
#=> strace: attach: ptrace(PTRACE_ATTACH, ...): No such process 

Любые консультации ?

ответ

0

Вы можете отслеживать все процессы своего пользователя, а не только детей strace.

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

strace -f bash -c 'sleep 1; echo "Im echoed from a child of strace"'

+0

Не на ubuntu я не могу. Для этого у них есть политика безопасности. То, что вы делаете, это создание дочернего элемента strace, запустив его аргумент команды. У меня нет аргумента команды для того, что я хочу контролировать. Я хочу контролировать ветку в более крупном пакете. Я могу перейти к этой ветке с помощью нереста с параметром, но это снова пройдет через все установочные коды. Вот почему я предпочитаю разветвлять и трассировать pid, но мне также необходимо ограничить процессы, вызываемые веткой (используйте ключ -f), а не только ветвь. Код bash - это просто демонстрация проблемы в простых выражениях. – PSkocik

+0

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

+0

Это может быть отключено, хотя - см. Здесь: https://wiki.ubuntu.com/Security/Features#ptrace – pdw

0

Проблема заключается в том, что вам не нужно exec, пример здесь:

((sleep 3; sleep 10 & sleep 20 & sleep 30)& strace -fp $!) 

Вы увидите, что вы получаете страты всех детей:

... 
[pid 166] wait4(-1, <unfinished ...> 
[pid 174] <... nanosleep resumed> NULL) = 0 
[pid 174] close(1)     = 0 
[pid 174] close(2)     = 0 
[pid 174] exit_group(0)    = ? 
[pid 174] +++ exited with 0 +++ 
[pid 166] <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 174 
[pid 166] wait4(-1, <unfinished ...> 
[pid 175] <... nanosleep resumed> NULL) = 0 
[pid 175] close(1)     = 0 
[pid 175] close(2)     = 0 
... 

ps axf выхода (с различной PIDs):

202 ?  S  0:00   \_ bash 
    203 ?  S  0:00   | \_ bash 
    210 ?  S  0:00   | | \_ sleep 10 
    211 ?  S  0:00   | | \_ sleep 20 
    212 ?  S  0:00   | | \_ sleep 30 
    204 ?  S  0:00   | \_ strace -fp 203 

Проверен на Ubuntu 14.04, на пользователь без каких-либо специальных разрешений, а также с проверкой ptrace области видимости включена.

+0

При запуске без exec '((sleep 3; sleep 10 & sleep 20 & sleep 30) & strace -fp $!) strace: attach: ptrace (PTRACE_ATTACH, ...): операция не разрешена Не удалось подключиться обработать. Если ваш uid соответствует uid целевого процесса , проверьте настройку/proc/sys/kernel/yama/ptrace_scope или попробуйте снова как пользователь root. Для получения дополнительной информации см./Etc/sysctl.d/10-ptrace.conf' У моего '/ etc/sysctl.d/10-ptrace.conf' есть' kernel.yama.ptrace_scope = 1' (изменение этого не является опция). – PSkocik

+0

Странно, у меня есть 'kernel.yama.ptrace_scope = 1' тоже, и я создал тестового пользователя только для этого без каких-либо специальных разрешений. Я получаю то же сообщение, что и вы, используя 'exec', потому что он вилки по-другому. Можете ли вы рассказать мне свою точную версию Ubuntu, чтобы я мог переключить свою виртуальную машину на нее и повторить попытку? –

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