Zalogowałem się jako root, ale
strace
daje mi to:root @ kyznecov-System: / home / kyznecov # ps -e | grep 111 3807 pkt / 2 00:00:00 111 3810 pkt / 2 00:00:00 111 root @ kyznecov-System: / home / kyznecov # strace -p 3810 attach: ptrace (PTRACE_ATTACH, ...): Operacja niedozwolona Nie można dołączyć do procesu. Jeśli Twój identyfikator użytkownika jest zgodny z identyfikatorem użytkownika celu sprawdź proces / proc / sys / kernel / yama / ptrace_scope lub spróbuj ponownie jako użytkownik root. Aby uzyskać więcej informacji, zobacz /etc/sysctl.d/10-ptrace.conf root @ kyznecov-System: / home / kyznecov root @ kyznecov-System: / home / kyznecov # cat / proc / sys / kernel / yama / ptrace_scope 0
Następnie próbowałem użyć
gdb
do debugowania programu wieloprocesowego w Eclipse CDT z rozwidleniem, co dało mi ten sam wynik / błąd:
Jakieś pomysły?
strace /bin/echo test
? Czy to daje ten sam komunikat o błędzie?Odpowiedzi:
Jednym z powodów, dla których pojawia się błąd:
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Jest tak, ponieważ proces został już dołączony do z
gdb
,strace
lub podobny. Aby sprawdzić, czy tak jest, uruchom:grep TracerPid /proc/$THE_PID/status
Jeśli jest niezerowy, oznacza to pid istniejącego programu, który już uruchamia śledzenie tego procesu.
źródło
Jak skomentował izx , powinno to być możliwe tylko z powodu błędu jądra. Tak więc każdemu, kto może obecnie wytworzyć ten problem - w tym zwłaszcza oryginalny plakat z tym pytaniem - dobrze byłoby zgłosić go jako błąd , dokładnie i uważnie czytając tę stronę, a następnie uruchamiając
ubuntu-bug linux
na zaatakowanym komputerze . Powinno to zostać zgłoszonelinux
w Ubuntu, a nie w stosunku do jądra głównego (w górę), chyba że można go wytworzyć w jądrze głównym (trzeba by byłoyama
załadować).Oczekiwanym zachowaniem w każdej wersji Ubuntu rozpoczynającej się od Ubuntu 10.10 jest to, że proces A nie może śledzić działającego procesu B, chyba że B jest bezpośrednim dzieckiem A (lub A działa jako
root
). Jest to ulepszenie bezpieczeństwa, które sprawia, że proces, który został zaatakowany przez osobę atakującą, nie może korzystać z funkcji debugowania udostępnianych przez jądro do wykrywania informacji z innych procesów. Wyjaśniono to w sekcji zakresu ptrace na stronie wiki społeczności Funkcje zabezpieczeń .To restrykcyjne zachowanie jest domyślne, ale można je zmienić, aby umożliwić procesowi A śledzenie dowolnego uruchomionego procesu B, który jest uruchamiany z tym samym identyfikatorem użytkownika, co własny proces A. Oznacza to, że możesz skonfigurować swój system, aby umożliwić dowolnemu procesowi wzajemne debugowanie. Upraszcza to dołączanie debugerów do już działających procesów.
Ustawienie tego jest widoczne w
/proc/sys/kernel/yama/ptrace_scope
sysctl .1
oznacza bardziej restrykcyjne zachowanie i0
mniej restrykcyjne zachowanie. Ustawienie można odczytać za pomocą:Mniej restrykcyjne (inne niż domyślne) zachowanie można ustawić za pomocą:
Bardziej restrykcyjne (domyślne) zachowanie można ustawić (lub cofnąć) za pomocą:
Oryginalny plakat tego pytania nie tylko nie był w stanie dołączyć
strace
instancji do aktualnie uruchomionego procesu zptrace-scope
ustawionym na0
, ale oryginalny plakat nie był w stanie tego zrobić podczas uruchamianiastrace
jakoroot
. Trudno zrozumieć, jak może to być coś innego niż błąd - zdecydowanie polecam zgłoszenie go jako jednego.Na początku myślałem, że jestem w stanie odtworzyć problem, w którym
ptrace_scope
ustawienie parametru0
jest ignorowane i traktowane tak, jakby było1
. Ale już nie wierzę, że tak jest, ponieważ ponownie zrobiłem te same rzeczy i nie mogę odtworzyć problemu. Przetestowałem to na:Na wszystkich trzech komputerach występuje oczekiwane zachowanie i nie mogę odtworzyć stanu, o jaki pyta oryginalny plakat tego pytania. Oto tekst z terminala (z systemu Precise Live):
strace
kontynuowałem produkcję wiadomości, dopóki nie zawiesiłem, zgodnie z oczekiwaniami.Kończę, zalecając ponownie, aby zgłosić to jako błąd. Maksymalnie wyczerpujące wyszukiwanie tekstu na https://bugs.launchpad.net (które obejmuje wszelkie zgłoszone błędy Ubuntu) dla tekstu
ptrace_scope
daje tylko garść wyników, w których wyraźnie nie ma raportów o tym błędzie . Zgłoszenie błędu pomogłoby innym, może prowadzić do obejścia lub naprawy i jest prawdopodobnie jedynym znaczącym sposobem na kontynuowanie pracy nad tym problemem (zakładając, że problem nadal występuje).źródło