NFsec Logo

reptyr – gdy screen nie został odpalony

10/04/2012 w Administracja Brak komentarzy.  (artykuł nr 341, ilość słów: 341)

R

eptyr jest narzędziem, które potrafi przenieść istniejący proces na inny terminal. Jeśli uruchomiliśmy przez „czyste” SSH dowolny proces, który okazał się bardzo czasochłonny, a nie możemy go przerwać – wystarczy w nowym terminalu uruchomić screen i użyć reptyr do jego przeniesienia na terminal z odpalonym screen-em.

Użycie:

reptyr $PID

reptyr złapie PID procesu i przypiszę go do aktualnego pseudoterminala, z którego został uruchomiony:

agresor@darkstar:~$ reptyr 2926
[+] Allocated scratch page: b7790000
[+] Looking up fds for tty in child.
[+] Resolved child tty: 8801
[+] Found an alias for the tty: 0
[+] Found an alias for the tty: 1
[+] Found an alias for the tty: 2
[+] Found an alias for the tty: 3
[+] Opened the new tty in the child: 5
[+] Target is not a session leader, attempting to setsid.
[+] Forked a child: 2936
[+] Change pgid for pid 2926
[+] Did setsid()
[+] Set the controlling tty

Proces do nowego terminala zostanie załączony razem wejściem i wyjściem – włączając w to możliwość użycia kombinacji Ctrl+C oraz Ctrl+Z (niestety jeśli przełączymy proces do pracy w tle – poleceń „bg” oraz „fg” będziemy musieli nadal używać w starym terminalu – dlatego lepiej użyć programu screen do zawieszenia przechwyconego procesu). Ze względu na wykorzystywanie systemowego wywołania ptrace w Ubuntu od wersji 10.10 i wyższej – musimy wyłączyć mechanizm bezpieczeństwa zapobiegający przyłączania ptrace() do innych procesów:

echo 0 > /proc/sys/kernel/yama/ptrace_scope

W przeciwnym wypadku przy próbie użycia reptyr otrzymamy komunikat:

Unable to attach to pid 2756: Operation not permitted
The kernel denied permission while attaching. If your uid matches
the target's, check the value of /proc/sys/kernel/yama/ptrace_scope.
For more information, see /etc/sysctl.d/10-ptrace.conf

Zanim Nelson Elhage ponownie odkrył i napisał reptyr – podobną funkcjonalność zapewniał skrypt Timo Lindfors’a napisany w 2004 roku – screenify wykorzystujący The GNU Project Debugger.

Więcej informacji: Reparent a running program to a new terminal

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , , , , , ,

Zostaw odpowiedź.

Musisz być zalogowany by móc komentować.