Как сделать процесс невидимым для других пользователей?

Как другие указали, программы, установленные через диспетчер пакетов, рассеиваются по нескольким каталогам. В то время как двоичный файл обычно находится /usr/bin, конфигурационные файлы в масштабе всей системы находятся в /etc, и так далее.

Если приложение не установлено через диспетчер пакетов, файлы должны быть установлены в месте, где они не вмешиваются в диспетчер пакетов. Это место /usr/local.

Если бы Вас просят относительно пути установки, наиболее распространенный выбор был бы /usr/local/appname

19
21.07.2011, 23:44
6 ответов

top команда считывает данные с proc, который обеспечивается непосредственно от ядра. Для сокрытия процессов необходимо было бы использовать код в ядре, чтобы сделать маскирование.

Кроме использования концепции безопасности как SELinux и grsecurity (упомянутый в других ответах), код стиля руткита является Вашей единственной остающейся опцией. Я говорю "стиль", потому что "руткит" отдельно не плох, это - как он используется. Существуют совершенно законные причины позади сокрытия процессов от других пользователей, который является, почему эта возможность существует в концепциях безопасности.

Основной маршрут, за которым необходимо было бы следовать, чтобы заставить это работать, должен сцепиться в (или налет, в зависимости от того, как Вы смотрите на него), функция (функции) в ядре Linux, которые раздают /proc/pid/ данные. Я демонстрирую один метод сцепления в функции ядра Linux в модуле безопасности, который я записал:

https://github.com/cormander/tpe-lkm

Код "высокого уровня" для этого находится в hijack_syscalls() метод в security.c, и devil-in-the-details волшебство позади него находится в hijacks.c файл.

Вы, вероятно, найдете функцию (функции), в которую Вы захотите сцепиться в fs/proc/ каталог исходного кода ядра Linux. Следует иметь в виду, что Linux не обеспечивает стабильный ABI, таким образом, Ваш код должен будет измениться несколько для получения его работающий в различных версиях ядра Linux. Кроме того, имейте в виду необходимость в полном корневом доступе к машине, чтобы смочь ввести этот код.

ОБНОВЛЕНИЕ:

Если Вы переноситесь pid_getattr символ ядра с некоторым дополнительным кодом к он очень легок сделать это. Я недавно добавил что-то, что скрывает процессы к вышеупомянутому модулю ядра:

https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3

Вы могли сделать что-то подобное путем создания процессов определенного пользователя или группы не видимыми любым кроме корня и того пользователя. Выполнение его именем процесса немного более сложно, но возможно. Взгляните на exe_from_mm() функция. Обратите внимание, что могут быть последствия производительности использования его в pid_getattr.

11
27.01.2020, 19:45

Это кажется двумя основными опциями.

  • Selinux работает путем помещения различных людей в различные домены защиты, и в некотором смысле играя в песочнице их так они не видят, что каждые-другие наполняют. Это покрыто этим вопросом. Так как selinux быстро становится фактической концепцией безопасности в мире Linux, это - вероятно, направление, необходимо посмотреть.

  • Другой grsecurity, как упомянуто marioosh и, как спросили в этом вопросе. Некоторые дистрибутивы имеют альтернативные пакеты ядра с примененными патчами grsecurity. Если Ваш имеет это, Вы могли бы изучить использование их.

Если по некоторым причинам Вы хотите сделать это без добавления концепции безопасности как selinux или grsecurity, объясните, как то, что Вы делаете, не пишет руткит.

4
27.01.2020, 19:45

Это не настолько просто на стандартном поле Linux. Посмотрите на grsecurity, но он требует ядра исправления и т.д.

1
27.01.2020, 19:45
  • 1
    я думаю, что это прибывает стандарт с selinux ядром. –  user606723 21.07.2011, 23:27

Вы могли переопределить свой argv [0] с другим именем..., но разговор strictely, Вы ищете некоторый руткит. это может выручить Вас: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html

1
27.01.2020, 19:45

Вы могли записать эквивалентную команду, которая работает точно так же, как top, но не отображает процессы, соответствующие собственному имени. Кроме того, можно получить исходный код top управляйте и измените его соответственно. Можно затем заменить top команда в /usr/sbin (или везде, где это) с Вашей версией.

0
27.01.2020, 19:45
  • 1
    Замена 'вершины' не мешает пользователю делать то, что делает вершина. –  Tim Post♦ 22.07.2011, 04:13
  • 2
    Нет, но вопрос спросил, как сделать процессы невидимыми для top команда. –  LawrenceC 22.07.2011, 04:16

Ядро Linux с тех пор 3.3 содержит поддержку сокрытия процессов другим пользователям.

Это сделано hidepid= и gid= смонтируйте опции для/proc, как описано в соответствующей фиксации и Documentation/filesystems/proc.txt.

Debian, Хрипящий также, включает эту функцию.

14
27.01.2020, 19:45

Теги

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