Wie izx kommentiert hat, sollte dies nur aufgrund eines Kernel-Fehlers möglich sein. Also jeder, der dieses Problem zur Zeit produzieren kann - auch und vor allem das ursprüngliche Plakat dieser Frage - wäre gut beraten, es als Fehler zu melden , indem die Seite gründlich und sorgfältig, Lesen und dann läuft ubuntu-bug linux
auf der betroffenen Maschine . Dies sollte linux
in Ubuntu und nicht in einem Haupt- (Upstream-) Kernel gemeldet werden , es sei denn, Sie können es auf einem Haupt-Kernel erstellen (Sie müssten ihn yama
geladen haben).
Das erwartete Verhalten in jeder Ubuntu-Version ab Ubuntu 10.10 ist, dass Prozess A einen laufenden Prozess B nicht verfolgen kann, es sei denn, B ist ein direktes Kind von A (oder A wird ausgeführt als root
). Dies ist eine Sicherheitsverbesserung, die dazu führt, dass ein Prozess, der von einem Angreifer kompromittiert wurde, die vom Kernel bereitgestellten Debug-Funktionen nicht zum Ermitteln von Informationen aus anderen Prozessen verwenden kann. Dies wird im Abschnitt ptrace scope auf der Wiki-Seite der Community für Sicherheitsfunktionen erläutert .
Dieses restriktive Verhalten ist die Standardeinstellung, kann jedoch geändert werden, damit ein Prozess A jeden laufenden Prozess B verfolgen kann, der mit derselben Benutzer-ID wie der Prozess A ausgeführt wird. Das heißt, Sie können Ihr System so konfigurieren, dass sich alle Prozesse gegenseitig debuggen können. Dies vereinfacht das Anhängen von Debuggern an bereits laufende Prozesse.
Die Einstellung hierfür wird vom /proc/sys/kernel/yama/ptrace_scope
sysctl eingeblendet . 1
bezeichnet das restriktivere und 0
das weniger restriktive Verhalten. Die Einstellung kann gelesen werden mit:
cat /proc/sys/kernel/yama/ptrace_scope
Das weniger restriktive (nicht standardmäßige) Verhalten kann eingestellt werden mit:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Und das restriktivere (Standard-) Verhalten kann eingestellt (oder zurückgesetzt) werden mit:
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Das Original-Poster dieser Frage war nicht nur nicht in der Lage, eine strace
Instanz an einen derzeit ausgeführten Prozess anzuhängen, der auf ptrace-scope
gesetzt war 0
, sondern das Original-Poster war auch dann nicht in der Lage, dies zu tun, wenn es strace
als ausgeführt wurde root
. Es ist schwer zu erkennen, dass dies alles andere als ein Fehler sein kann. Ich empfehle dringend, ihn als einen Fehler zu melden.
Zuerst hatte ich gedacht, dass ich das Problem reproduzieren kann, bei dem eine ptrace_scope
Einstellung von 0
ignoriert und so behandelt wird, als wäre es 1
. Aber ich glaube nicht mehr, dass dies der Fall ist, da ich wieder die gleichen Dinge getan habe und das Problem nicht reproduzieren kann. Ich habe das getestet auf:
- Die physische Maschine Lubuntu Precise amd64 verwende ich täglich als meine Hauptbox.
- Eine virtuelle VirtualBox-Maschine, auf der eine Live-CD mit Lubuntu Precise i386 (12.04) ausgeführt wird.
- Eine identische virtuelle VirtualBox-Maschine, auf der Quantal i386 (Ubuntu + 1) täglich live (20120608) ausgeführt wird.
Auf allen drei Computern tritt das erwartete Verhalten auf, und ich kann den Zustand nicht reproduzieren, zu dem das ursprüngliche Poster dieser Frage auffordert. Hier ist ein Text aus dem Terminal (aus dem Precise Live-System):
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
produzierte weiterhin Nachrichten, bis ich sie erwartungsgemäß suspendierte.
Abschließend empfehle ich noch einmal, dies als Fehler zu melden. Eine maximal inklusive Suche auf https://bugs.launchpad.net (die alle gemeldeten Ubuntu-Fehler enthält) nach dem Text ptrace_scope
ergibt nur eine Handvoll Ergebnisse, in denen eindeutig keine Berichte für diesen Fehler vorliegen . Das Melden des Fehlers würde anderen helfen, kann zu Problemumgehungen oder einer Fehlerbehebung führen und ist wahrscheinlich die einzige sinnvolle Möglichkeit, dieses Problem zu beheben (vorausgesetzt, das Problem tritt weiterhin auf).
strace /bin/echo test
? Gibt das die gleiche Fehlermeldung aus?