Чи можливо "приховати" процес від переліку "ps" або "top" в Linux


10

По-перше, я припускаю, що якщо це можливо, це потрібно зробити як root (або як користувач, який поділяє UID root 0).

Як можна запустити процес так, щоб він не відображався в ps auxабо ps efабо в topсписку, якщо команда виконується не-root?

Це навіть можливо?

Дистрибутиви, якими я зазвичай керую, є RHEL / CentOS та Ubuntu - тому, якщо є відповідь, що стосується дистрибутиву, це теж нормально.


warren: Ви коли-небудь знайшли рішення для цього?
Кріс

@Chris - nope ... @ fianchetto, здається, відповідь є єдиним маршрутом, і це набагато більше роботи, ніж мені зручно: - |
warren

Я збираюся взяти цей проект і звіту про все, що я вирішу.
Кріс

Відповіді:


5

Ну, у вас тут є пара варіантів. Простим виходом було б замінити PS та топ-програми модифікованими версіями, які приховують те, що саме ви хочете приховати.

Альтернативою може бути запуск коду, вбудованого в існуючий процес, або написання обгорткового сценарію навколо коду з нешкідливим іменем.

У деяких версіях PS ви можете змінити його, змінивши argv [], але не впевнений, чи працює це для верху, і не впевнений, чи працює він у Linux (це в основному конвенція BSD).

Все залежить від того, чого саме ви прагнете досягти, роблячи це?


моя мета тут полягає в тому, щоб процеси, породжені коренем, не були видимими для всіх користувачів (можливо, демони, пов’язані з безпекою або подібні)
warren

@flanchetto Отже, ви хочете сказати, якщо у мене вже запущена програма, і вона пізніше запускає командний рядок із паролем у ній у тому ж процесі, що пароль буде надійно вказаний? наприклад, запустіть, python myScript.pyі всі subprocess.Popenкоманди (які можуть містити або не містять паролі) не відображаються, якщо це той самий процес?
Brōtsyorfuzthrāx

У всякому разі, це не працює (я просто спробував це і побачив пароль). Отже, я припускаю, що ви маєте на увазі щось інше. Сміливо уточнюйте. :)
Brōtsyorfuzthrāx

13

Відповідно до патчу ядра http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 , ви можете використовувати опцію скрипок для файлової системи proc:

hidpid = 0 (за замовчуванням) означає стару поведінку - будь-хто може читати всі файли, що читаються / proc / PID / *, які читаються у всьому світі.

hidpid = 1 означає, що користувачі можуть не мати доступу до жодних каталогів / proc //, але до власних. Чутливі файли, такі як cmdline, sched *, status, тепер захищені від інших користувачів. Оскільки перевірка дозволів, зроблена в proc_pid_permission () та дозволи файлів, залишається недоторканою, програми, які очікують певних режимів файлів, не плутаються.

hidpid = 2 означає hidpid = 1 плюс усі / proc / PID / буде невидимим для інших користувачів. Це не означає, що він приховує, чи існує процес (його можна дізнатися іншими способами, наприклад, вбити -0 $ PID), але він приховує euid і egid процесу. Він ускладнює завдання зловмиснику збирати інформацію про запущені процеси, чи працює якийсь демон з підвищеними привілеями, чи інший користувач виконує якусь чутливу програму, чи інші користувачі запускають будь-яку програму і т.д.

gid = XXX визначає групу, яка зможе збирати інформацію про всі процеси (як у режимі skpid = 0). Цю групу слід використовувати замість того, щоб не вводити не-кореневого користувача у файл sudoers чи щось. Однак ненадійних користувачів (як демон тощо), які не повинні контролювати завдання у всій системі, не слід додавати до групи.

Ви не можете контролювати видимість на рівні процесу, проте ви можете гарантувати, що ваші користувачі можуть бачити лише свої власні процеси.

Якщо у вас версія ядра більше 3,3, ви можете спробувати виконати наступну команду:

 
mount /proc -o remount,hidepid=2


Чи можете ви обмежити цю hidepid=2річ, щоб вона торкнулася лише конкретних користувачів (або, таким чином, вона містить список певних користувачів)?
Brōtsyorfuzthrāx

Чудово працює! Моя проблема полягала в тому, що я підключаюсь до сервера за допомогою cron script, і будь-який користувач міг бачити облікові дані за допомогою "htop" (наприклад). Якщо встановити параметр "hidpid = 2", користувачі не можуть бачити процеси, запущені іншими користувачами, і це те, що я шукав. Чому не встановлено за замовчуванням?
lepe

@lepe, мабуть, із застарілих причин. Буде порушено це і те, і тому не можна (поки) використовувати всюди.
Флоріан Вендельборн

ОП попросили, щоб під був непомітним загалом, а не лише для інших користувачів ...?
phil294

Чи є спосіб приховати процеси, створені лише певними користувачами? напр. root?
Avery235

-2

використовуйте команду F вгорі та n команду, наприклад, щоб налаштувати те, що ви хочете бачити. за допомогою команди W написати конфігурацію, яку ви хочете ~ / .toprc - використовувати? щоб побачити верхні команди. Це може швидко вирішити вашу проблему - це зробило для мене. За допомогою F я можу додати / видалити поля, які я хочу бачити, тоді як у f можна використовувати s для встановлення сортування, а потім q повернутися до відображення. потім n, щоб встановити, скільки процесів я хочу побачити, і W зберегти в .toprc


Це лише щось приховує в моєму погляді
warren
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.