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łoszone linux
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ło yama
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 i 0
mniej restrykcyjne zachowanie. Ustawienie można odczytać za pomocą:
cat /proc/sys/kernel/yama/ptrace_scope
Mniej restrykcyjne (inne niż domyślne) zachowanie można ustawić za pomocą:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Bardziej restrykcyjne (domyślne) zachowanie można ustawić (lub cofnąć) za pomocą:
echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Oryginalny plakat tego pytania nie tylko nie był w stanie dołączyć strace
instancji do aktualnie uruchomionego procesu z ptrace-scope
ustawionym na 0
, ale oryginalny plakat nie był w stanie tego zrobić podczas uruchamiania strace
jako root
. 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 parametru 0
jest ignorowane i traktowane tak, jakby było 1
. Ale już nie wierzę, że tak jest, ponieważ ponownie zrobiłem te same rzeczy i nie mogę odtworzyć problemu. Przetestowałem to na:
- Fizyczna maszyna Lubuntu Amd64, której używam codziennie jako głównego urządzenia.
- Maszyna wirtualna VirtualBox z uruchomionym CD Live Lubuntu Precise i386 (12.04).
- Identyczna maszyna wirtualna VirtualBox z systemem Quantal i386 (Ubuntu + 1) codziennie na żywo (20120608).
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):
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
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).
strace /bin/echo test
? Czy to daje ten sam komunikat o błędzie?