Como izx ha comentado, esto solo debería poder suceder debido a un error del kernel. Por lo tanto, cualquier persona que pueda producir este problema, incluido, y especialmente el póster original de esta pregunta, sería aconsejable informarlo como un error al leer esa página minuciosa y cuidadosamente, y luego ejecutarla ubuntu-bug linux
en la máquina afectada . Esto debería informarse linux
en Ubuntu, y no en un núcleo de línea principal (ascendente), a menos que pueda producirlo en un núcleo de línea principal (debería haber yama
cargado).
El comportamiento esperado en cada versión de Ubuntu que comienza con Ubuntu 10.10 es que el proceso A no puede rastrear un proceso en ejecución B a menos que B sea un hijo directo de A (o A se ejecuta como root
). Esta es una mejora de seguridad, lo que hace que un proceso que ha sido comprometido por un atacante no pueda usar las funciones de depuración proporcionadas por el núcleo para descubrir información de otros procesos. Esto se explica en la sección de alcance de ptrace de la página wiki de la comunidad de Características de seguridad .
Este comportamiento restrictivo es el predeterminado, pero se puede cambiar para permitir que un proceso A rastree cualquier proceso B en ejecución que se ejecute con el mismo ID de usuario que el propio proceso A. Es decir, puede configurar su sistema para permitir que cualquiera de sus procesos se depure entre sí. Esto simplifica la conexión de depuradores a procesos que ya se están ejecutando.
La configuración para esto está expuesta por el /proc/sys/kernel/yama/ptrace_scope
sysctl . 1
denota el comportamiento más restrictivo y 0
el comportamiento menos restrictivo. La configuración se puede leer con:
cat /proc/sys/kernel/yama/ptrace_scope
El comportamiento menos restrictivo (no predeterminado) se puede establecer con:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Y el comportamiento más restrictivo (predeterminado) se puede establecer (o retrasar) con:
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
No solo el póster original de esta pregunta no pudo adjuntar una strace
instancia a un proceso actualmente en ejecución con ptrace-scope
set to 0
, sino que el póster original aún no pudo hacerlo cuando se ejecutó strace
como root
. Es difícil ver cómo esto podría ser algo más que un error: recomiendo informarlo como tal.
Al principio, pensé que podía reproducir el problema donde una ptrace_scope
configuración de 0
se ignora y se trata como si lo fuera 1
. Pero ya no creo que este sea el caso, ya que he vuelto a hacer lo mismo y no puedo reproducir el problema. He probado esto en:
- La máquina física Lubuntu Precise amd64 que uso a diario como mi caja principal.
- Una máquina virtual VirtualBox que ejecuta un CD en vivo Lubuntu Precise i386 (12.04).
- Una máquina virtual VirtualBox idéntica que ejecuta un Quantal i386 (Ubuntu + 1) diariamente en vivo (20120608).
En las tres máquinas, se produce el comportamiento esperado y no puedo reproducir la condición sobre la que pregunta el póster original de esta pregunta. Aquí hay un texto de la Terminal (del sistema en vivo Precise):
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
Seguí produciendo mensajes hasta que lo suspendí, como era de esperar.
Concluyo recomendando nuevamente informar esto como un error. Una búsqueda máximamente inclusiva en https://bugs.launchpad.net (que incluye cualquier error de Ubuntu reportado) para el texto ptrace_scope
produce solo un puñado de resultados, en los que claramente ninguno es un informe de este error . Informar el error ayudaría a otros, puede dar lugar a soluciones o una solución, y es probablemente la única forma significativa de avanzar en el trabajo de este problema (suponiendo que el problema aún esté ocurriendo).
strace /bin/echo test
? ¿Eso da el mismo mensaje de error?