Можно ли «спрятать» процесс из списка `ps` или` top` в Linux


10

Во-первых, я предполагаю, что, если это возможно, это нужно сделать как root (или как пользователь с общим UID root, равным 0).

Как запустить процесс, чтобы он не отображался в списке ps auxили ps efили, topесли команда запускается без полномочий root?

Это вообще возможно?

Обычно я использую дистрибутивы RHEL / CentOS и Ubuntu - так что если есть ответ для конкретного дистрибутива, это тоже нормально.


Уоррен: Когда-нибудь находили решение для этого?
Крис

@Chris - нет ... Ответ @ fianchetto, кажется, единственный путь, и это намного больше работы, чем мне удобно: - |
Уоррен

Я собираюсь предпринять этот проект и сообщу обо всем, что я определю.
Крис

Ответы:


5

Ну, у вас есть несколько вариантов здесь. Самый простой выход - поменять ps и лучшие программы на модифицированные версии, которые скрывают то, что вы хотите скрыть.

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

В некоторых версиях PS вы можете изменить его, изменив argv [], но не уверены, работает ли он для top, и не уверены, работает ли он в linux (в основном это соглашение BSD).

Все зависит от того, что именно вы хотите достичь, делая это?


моя цель здесь - чтобы процессы, порожденные root, не были видны всем пользователям (возможно, связанным с безопасностью демонов или подобным)
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 , вы можете использовать опцию hidepid для файловой системы proc:

hidepid = 0 (по умолчанию) означает старое поведение - любой может прочитать все общедоступные файлы / proc / PID / *.

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

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

gid = XXX определяет группу, которая сможет собирать информацию обо всех процессах (как в режиме hidepid = 0). Эту группу следует использовать вместо помещения пользователя root в файл sudoers или что-то в этом роде. Однако недоверенные пользователи (например, демоны и т. Д.), Которые не должны следить за задачами во всей системе, не должны добавляться в группу.

Вы не можете контролировать видимость на уровне процессов, однако вы можете гарантировать, что ваши пользователи смогут видеть только свои процессы.

Если у вас версия ядра больше 3.3, попробуйте выполнить следующую команду:

 
mount /proc -o remount,hidepid=2


Можете ли вы ограничить эту hidepid=2вещь, чтобы она влияла только на определенных пользователей (или, таким образом, она вносит в белый список определенных пользователей)?
Brōtsyorfuzthrāx

Работает отлично! Моя проблема заключалась в том, что я подключался к серверу, используя скрипт cron, и любой пользователь мог видеть учетные данные, используя "htop" (например). При установке значения «hidepid = 2» пользователи не могут видеть процессы, запущенные другими пользователями, что я и искал. Почему не установлено по умолчанию?
Лепе

@lepe, вероятно, по наследству. Сломал бы это и это и поэтому не может (пока) использоваться везде.
Флориан Вендельборн

ОП попросил, чтобы pid был невидимым в целом, а не только для других пользователей ...?
phil294

Есть ли способ скрыть процессы, созданные только определенными пользователями? например. root?
Avery235

-2

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


Это только что-то скрывает на мой взгляд
Уоррен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.