Как прокомментировал izx , это может произойти только из-за ошибки в ядре. Поэтому любому, кто может создать эту проблему в настоящее время, включая, в частности, оригинальный постер этого вопроса, было бы разумно сообщить о ней как об ошибке , внимательно и внимательно прочитав эту страницу, а затем запустив ее ubuntu-bug linux
на зараженном компьютере . Об этом следует сообщать linux
в Ubuntu, а не против основного (восходящего) ядра, если только вы не можете создать его на основном ядре (вы должны были бы yama
загрузить).
Ожидаемое поведение в каждой версии Ubuntu, начиная с Ubuntu 10.10, заключается в том, что процесс A не может отследить запущенный процесс B, если B не является прямым потомком A (или A запускается как root
). Это улучшение безопасности, благодаря которому процесс, скомпрометированный злоумышленником, не может использовать средства отладки, предоставляемые ядром, для обнаружения информации из других процессов. Это объясняется в разделе « Область действия ptrace» вики-страницы сообщества «Функции безопасности» .
Это ограничительное поведение используется по умолчанию, но его можно изменить, чтобы процесс A мог отслеживать любой запущенный процесс 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
. Трудно понять, как это может быть что-то кроме ошибки - я настоятельно рекомендую сообщать об этом как об одном.
Сначала я подумал, что смог воспроизвести проблему, когда ptrace_scope
параметр 0
игнорируется и обрабатывается так, как если бы он был 1
. Но я больше не верю, что это так, потому что я снова сделал все то же самое, и я не могу воспроизвести проблему. Я проверил это на:
- Физическая машина Lubuntu Precise amd64, которую я ежедневно использую в качестве основного блока.
- Виртуальная машина VirtualBox, на которой установлен live-диск Lubuntu Precise i386 (12.04).
- Идентичная виртуальная машина 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
позволяет получить лишь несколько результатов, в которых явно нет отчетов об этой ошибке . Сообщение об ошибке поможет другим, может привести к обходным путям или исправлению и, вероятно, является единственным значимым способом продвинуться вперед в работе над этой проблемой (при условии, что проблема все еще возникает).
strace /bin/echo test
? Это дает то же самое сообщение об ошибке?