Почему strace / gdb не присоединяется к процессу, даже если я root?

  • Я вошел как root, но strace дает мне это:

    root@kyznecov-System:/home/kyznecov# ps -e | grep 111
     3807 pts/2    00:00:00 111
     3810 pts/2    00:00:00 111
    root@kyznecov-System:/home/kyznecov# strace -p 3810
    
    attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
    Could not attach to process.  If your uid matches the uid of the target
    process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
    again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf
    root@kyznecov-System:/home/kyznecov
    
    root@kyznecov-System:/home/kyznecov# cat /proc/sys/kernel/yama/ptrace_scope
    0
  • Затем я попытался использовать gdb для отладки многопроцессорной программы в Eclipse CDT с разветвлением, и он дал мне тот же результат / ошибку:

    enter image description here

Есть идеи?

26
задан 10 June 2012 в 12:38

2 ответа

Одна из причин для получения ошибки:

attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

заключается в том, что процесс уже связан с gdb, strace или подобным. Чтобы проверить, так ли это, запустите:

grep TracerPid /proc/$THE_PID/status

Если он ненулевой, то это pid существующей программы, которая уже выполняет трассировку в этом процессе. ]

0
ответ дан 10 June 2012 в 12:38

Как izx прокомментировал, это должно только смочь произойти из-за ошибки ядра. Таким образом, любому, кто может в настоящее время производить эту проблему - включая и особенно исходный плакат этого вопроса - было бы целесообразно сообщить об этом как об ошибке, читая ту страницу полностью и тщательно, и затем выполнение ubuntu-bug linux на затронутой машине. По этому нужно сообщить linux в Ubuntu, а не против магистрали (восходящее) ядро, если Вы не можете произвести его на ядре магистрали (Вы должны были бы иметь yama загруженный).

Ожидаемое поведение в каждой версии Ubuntu, запускающейся с Ubuntu 10.10, состоит в том, что процесс A не может проследить рабочий процесс B, если B не является прямым ребенком (или выполнения как root). Это - усовершенствование в защите, которое делает его так, чтобы процесс, который был поставлен под угрозу взломщиком, не мог использовать средства отладки, обеспеченные ядром для обнаружения информации от других процессов. Это объяснено в разделе объема ptrace сообщества Средств защиты страницу Wiki.

Это строгое поведение является значением по умолчанию, но может быть изменено, чтобы позволить процессу прослеживать любой рабочий процесс B, который выполняется с тем же идентификатором пользователя как процесс собственный A. Таким образом, можно настроить систему, чтобы позволить любому из процессов отлаживать друг друга. Это упрощает отладчики присоединения до уже рабочих процессов.

Установка для этого выставляется в /proc/sys/kernel/yama/ptrace_scope sysctl. 1 обозначает более строгое поведение и 0 менее строгое поведение. Установка может быть считана с:

cat /proc/sys/kernel/yama/ptrace_scope

Менее строгое поведение (не по умолчанию) может быть установлено с:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

И более строгое поведение (по умолчанию) может быть установлено (или задержано) с:

echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope

Не только был исходный плакат этого вопроса, не могущего присоединить strace экземпляр к в настоящее время рабочему процессу с ptrace-scope набор к 0, но исходный плакат затем все еще не мог сделать так при выполнении strace как root. Трудно видеть, как это могло быть совсем не ошибкой - я настоятельно рекомендую сообщить об этом как один.

Сначала, я думал, что смог воспроизвести проблему где a ptrace_scope установка 0 игнорируется и рассматривается, как будто это 1. Но я больше не верю дело обстоит так, поскольку я сделал весь одинаковый вещи снова, и я не могу воспроизвести проблему. Я протестировал это на:

  • Точная amd64 реальная машина Lubuntu я ежедневно использую в качестве своего основного поля.
  • Виртуальная машина VirtualBox, выполняющая Точный i386 Lubuntu (12.04) живой CD.
  • Идентичная виртуальная машина VirtualBox, выполняющая Quantal i386 (Ubuntu+1), живой ежедневной газетой (20120608).

На всех трех машинах происходит ожидаемое поведение, и я не могу воспроизвести условие, о котором спрашивает исходный плакат этого вопроса. Вот некоторый текст от Терминала (от Точной живой системы):

lubuntu@lubuntu:~$ nano&
[1] 3492
lubuntu@lubuntu:~$ strace -p 3492
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Could not attach to process.  If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf

[1]+  Stopped                 nano
lubuntu@lubuntu:~$ cat /proc/sys/kernel/yama/ptrace_scope
1
lubuntu@lubuntu:~$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
0
lubuntu@lubuntu:~$ strace -p 3492
Process 3492 attached - interrupt to quit
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---
ioctl(1, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig -icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- SIGTTOU (Stopped (tty output)) @ 0 (0) ---

strace продолженные создающие сообщения, пока я не приостановил его, как ожидалось.

Я завершаю, рекомендуя снова сообщить об этом как об ошибке. Максимально содержащий поиск на https://bugs.launchpad.net (то, которое включает любого, сообщило об ошибках Ubuntu) для текста ptrace_scope приводит просто к горстке результатов, в которых ясно ни один не отчеты для этой ошибки. Сообщение об ошибке помогло бы другим, может привести к обходным решениям или фиксации, и является, вероятно, единственным значимым способом продолжиться вперед в работе над этой проблемой (предполагающий, что проблема все еще происходит).

18
ответ дан 10 June 2012 в 12:38

Другие вопросы по тегам:

Похожие вопросы: