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

16677
warren

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

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

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

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

9
Уоррен: Когда-нибудь находили решение для этого? Chris 13 лет назад 0
@Chris - нет ... Ответ @ fianchetto, кажется, единственный путь, и это намного больше работы, чем мне удобно: - | warren 13 лет назад 0
Я собираюсь предпринять этот проект и сообщу обо всем, что я определю. Chris 13 лет назад 0

3 ответа на вопрос

12
uha

According to kernel patch http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201, you can use the hidepid option for the proc filesystem:

hidepid=0 (default) means the old behavior - anybody may read all world-readable /proc/PID/* files.

hidepid=1 means users may not access any /proc// directories, but their own. Sensitive files like cmdline, sched*, status are now protected against other users. As permission checking done in proc_pid_permission() and files' permissions are left untouched, programs expecting specific files' modes are not confused.

hidepid=2 means hidepid=1 plus all /proc/PID/ will be invisible to other users. It doesn't mean that it hides whether a process exists (it can be learned by other means, e.g. by kill -0 $PID), but it hides process' euid and egid. It compicates intruder's task of gathering info about running processes, whether some daemon runs with elevated privileges, whether another user runs some sensitive program, whether other users run any program at all, etc.

gid=XXX defines a group that will be able to gather all processes' info (as in hidepid=0 mode). This group should be used instead of putting nonroot user in sudoers file or something. However, untrusted users (like daemons, etc.) which are not supposed to monitor the tasks in the whole system should not be added to the group.

You are not able to control the visibility on process level however you can ensure that your users can see their own processes only.

In case you have kernel version greater than 3.3 you can make a try with the following command:

  mount /proc -o remount,hidepid=2 

Можете ли вы ограничить функцию `hidepid = 2`, чтобы она влияла только на определенных пользователей (или, таким образом, она вносит в белый список определенных пользователей)? Shule 8 лет назад 0
Работает отлично! Моя проблема заключалась в том, что я подключался к серверу с помощью скрипта cron, и любой пользователь мог видеть учетные данные с помощью «htop» (например). При установке значения «hidepid = 2» пользователи не могут видеть процессы, запущенные другими пользователями, что я и искал. Почему не установлено по умолчанию? lepe 7 лет назад 0
@lepe, вероятно, по наследству. Сломал бы то и это и поэтому не может (пока) использоваться повсеместно. Dodekeract 7 лет назад 0
ОП попросил, чтобы pid был невидимым в целом, а не только для других пользователей ...? Blauhirn 6 лет назад 0
Есть ли способ скрыть процессы, созданные только определенными пользователями? например. `Root`? Avery235 6 лет назад 0
5
fianchetto

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

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

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

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

моя цель здесь - чтобы процессы, порожденные root, не были видны всем пользователям (возможно, связанным с безопасностью демонов или подобных) warren 13 лет назад 0
@flanchetto Итак, вы говорите, если у меня есть программа, которая уже запущена, и она позже запускает команду командной строки с паролем в том же процессе, что пароль будет надежно предоставлен? например, запустить `python myScript.py` и все команды` subprocess.Popen` (которые могут содержать или не содержать пароли) не отображаются, если это один и тот же процесс? Shule 8 лет назад 0
Во всяком случае, это не работает (я просто попробовал и увидел пароль). Итак, я предполагаю, что вы имеете в виду что-то еще. Не стесняйтесь, чтобы уточнить. :) Shule 8 лет назад 0
-2
JamesD

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

Это только что-то скрывает на мой взгляд warren 7 лет назад 0

Похожие вопросы