Czy można „ukryć” proces przed listą „ps” lub „top” w systemie Linux

10

Po pierwsze, zakładam, że jeśli jest to możliwe, należy to zrobić jako root (lub jako użytkownik, który udostępnia identyfikator użytkownika root o wartości 0).

Jak może być uruchomiony proces tak, że nie pojawiają się w sposób ps auxlub ps efczy topwystawianie jeżeli polecenie jest prowadzony przez non-root?

Czy to w ogóle możliwe?

Dystrybucje, które zazwyczaj uruchamiam, to RHEL / CentOS i Ubuntu - więc jeśli jest odpowiedź specyficzna dla dystrybucji, to też jest w porządku.

królikarnia
źródło
warren: Czy kiedykolwiek znalazłeś rozwiązanie tego problemu?
Chris
@Chris - nie ... odpowiedź fianchetto wydaje się być jedyną drogą, a to o wiele więcej pracy, niż się czuję komfortowo: - |
warren
Zamierzam podjąć się tego projektu i przekażę wszystko, co ustalę.
Chris,

Odpowiedzi:

5

Masz tutaj kilka opcji. Najłatwiejszym sposobem byłoby zamienić ps i najlepsze programy ze zmodyfikowanymi wersjami, które ukrywają to, co chcesz ukryć.

Alternatywą byłoby uruchomienie kodu osadzonego w istniejącym procesie lub napisanie wokół niego skryptu o niewinnej nazwie.

W niektórych wersjach PS możesz to zmienić, zmieniając argv [], ale nie jestem pewien, czy to działa na top, i nie jestem pewien, czy działa w systemie Linux (jest to głównie konwencja BSD).

Wszystko zależy od tego, co dokładnie chcesz osiągnąć, robiąc to?

fianchetto
źródło
moim celem jest, aby procesy odradzane przez roota były niewidoczne dla wszystkich użytkowników (być może demony związane z bezpieczeństwem lub podobne)
warren,
@flanchetto Czy mówisz, czy mam już uruchomiony program, który później uruchamia polecenie wiersza polecenia z hasłem w tym samym procesie, w którym hasło zostanie bezpiecznie podane? np. uruchom, python myScript.pya wszystkie subprocess.Popenpolecenia (które mogą, ale nie muszą zawierać hasła) nie są wyświetlane, o ile jest to ten sam proces?
Brōtsyorfuzthrāx
W każdym razie to nie działa (właśnie spróbowałem i zobaczyłem hasło). Zakładam, że masz na myśli coś innego. Nie krępuj się wyjaśnić. :)
Brōtsyorfuzthrāx
13

Zgodnie z łatką jądra http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 , możesz użyć opcji hidepid dla systemu plików proc:

hidepid = 0 (domyślnie) oznacza stare zachowanie - każdy może odczytać wszystkie pliki / proc / PID / * do odczytu na świecie.

hidepid = 1 oznacza, że ​​użytkownicy nie mogą uzyskiwać dostępu do żadnych katalogów / proc //, ale do własnych. Wrażliwe pliki, takie jak cmdline, harmonogram *, status są teraz chronione przed innymi użytkownikami. Ponieważ sprawdzanie uprawnień wykonywane w proc_pid_permission () i uprawnienia plików pozostają nietknięte, programy oczekujące trybów określonych plików nie są mylone.

hidepid = 2 oznacza, że ​​hidepid = 1 plus wszystkie / proc / PID / będą niewidoczne dla innych użytkowników. Nie oznacza to, że ukrywa, czy proces istnieje (można się go nauczyć innymi metodami, np. Przez zabicie -0 $ PID), ale ukrywa identyfikator euid i egid procesu. Komplikuje zadanie intruza polegające na gromadzeniu informacji o uruchomionych procesach, czy jakiś demon działa z podwyższonymi uprawnieniami, czy inny użytkownik uruchamia wrażliwy program, czy inni użytkownicy w ogóle uruchamiają jakiś program itp.

gid = XXX definiuje grupę, która będzie mogła gromadzić informacje o wszystkich procesach (jak w trybie hidepid = 0). Tej grupy należy używać zamiast umieszczania użytkownika innego niż root w pliku sudoers lub coś takiego. Jednak niezaufani użytkownicy (np. Demony itp.), Którzy nie powinni monitorować zadań w całym systemie, nie powinni być dodawani do grupy.

Nie możesz kontrolować widoczności na poziomie procesu, ale możesz zapewnić, że użytkownicy będą widzieć tylko własne procesy.

Jeśli masz wersję jądra większą niż 3.3, możesz spróbować za pomocą następującego polecenia:

 
mount /proc -o remount,hidepid=2

uha
źródło
Czy możesz to ograniczyć hidepid=2, aby miało to wpływ tylko na określonych użytkowników (lub tak, aby umieściło na białej liście niektórych użytkowników)?
Brōtsyorfuzthrāx
Działa świetnie! Mój problem polegał na tym, że łączę się z serwerem za pomocą skryptu cron i każdy użytkownik mógł zobaczyć dane uwierzytelniające za pomocą „htop” (na przykład). Ustawienie „hidepid = 2” użytkownicy nie widzą procesów uruchomionych przez innych użytkowników, czego szukałem. Dlaczego nie jest ustawiony domyślnie?
lepe
@lepe prawdopodobnie ze starszych powodów. Zniszczyłby to i tamto i dlatego nie może (jeszcze) być używany wszędzie.
Florian Wendelborn,
OP poprosił, aby pid był ogólnie niewidoczny, nie tylko dla innych użytkowników ...?
phil294
Czy istnieje sposób na ukrycie procesów utworzonych tylko przez niektórych użytkowników? na przykład. root?
Avery235
-2

użyj polecenia F w poleceniu top in, na przykład, aby skonfigurować to, co chcesz zobaczyć. użyj polecenia W, aby napisać konfigurację, którą chcesz ~ / .toprc - użyć? aby zobaczyć najlepsze polecenia. To może szybko rozwiązać twój problem - zrobiło to dla mnie. Za pomocą F mogę dodawać / usuwać pola, które chcę zobaczyć, podczas gdy w f można użyć s, aby ustawić sortowanie, a następnie q, aby wrócić do wyświetlania. następnie n, aby ustawić liczbę procesów, które chcę zobaczyć, a W, aby zapisać w .toprc

JamesD
źródło
To tylko ukrywa coś moim zdaniem
Warren,