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 linuxna zaatakowanym komputerze . Powinno to zostać zgłoszone linuxw 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 yamazał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 . 1oznacza bardziej restrykcyjne zachowanie i 0mniej 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ć straceinstancji do aktualnie uruchomionego procesu z ptrace-scopeustawionym na 0, ale oryginalny plakat nie był w stanie tego zrobić podczas uruchamiania stracejako 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_scopeustawienie parametru 0jest 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_scopedaje 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?