Ich habe
strace
mich als root angemeldet, aber dies gibt mir:root @ kyznecov-System: / home / kyznecov # ps -e | grep 111 3807 Punkte / 2 00:00:00 111 3810 Punkte / 2 00:00:00 111 root @ kyznecov-System: / home / kyznecov # strace -p 3810 attach: ptrace (PTRACE_ATTACH, ...): Operation nicht erlaubt Konnte nicht an den Prozess anhängen. Wenn Ihre UID mit der UID des Ziels übereinstimmt Überprüfen Sie die Einstellung von / proc / sys / kernel / yama / ptrace_scope oder versuchen Sie es wieder als root-benutzer. Weitere Informationen finden Sie unter /etc/sysctl.d/10-ptrace.conf root @ kyznecov-System: / home / kyznecov root @ kyznecov-System: / home / kyznecov # cat / proc / sys / kernel / yama / ptrace_scope 0
Ich habe dann versucht,
gdb
ein Mehrprozessprogramm in Eclipse CDT mit Forking zu debuggen, und es gab mir das gleiche Ergebnis / den gleichen Fehler:
Irgendwelche Ideen?
strace /bin/echo test
? Gibt das die gleiche Fehlermeldung aus?Antworten:
Ein Grund für den Fehler:
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Denn hat der Prozess bereits mit angebracht wurde
gdb
,strace
oder ähnliches. Um zu überprüfen, ob dies der Fall ist, führen Sie Folgendes aus:grep TracerPid /proc/$THE_PID/status
Wenn es nicht Null ist, ist dies die PID eines vorhandenen Programms, in dem bereits eine Ablaufverfolgung für diesen Prozess ausgeführt wird.
quelle
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 solltelinux
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 ihnyama
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 und0
das weniger restriktive Verhalten. Die Einstellung kann gelesen werden mit:Das weniger restriktive (nicht standardmäßige) Verhalten kann eingestellt werden mit:
Und das restriktivere (Standard-) Verhalten kann eingestellt (oder zurückgesetzt) werden mit:
Das Original-Poster dieser Frage war nicht nur nicht in der Lage, eine
strace
Instanz an einen derzeit ausgeführten Prozess anzuhängen, der aufptrace-scope
gesetzt war0
, sondern das Original-Poster war auch dann nicht in der Lage, dies zu tun, wenn esstrace
als ausgeführt wurderoot
. 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 von0
ignoriert und so behandelt wird, als wäre es1
. 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: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):
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).quelle