1

Я разрабатываю демон, который работает, и теперь я не могу создавать какие-либо новые процессы (т.е. Я не могу начать новый процесс, чтобы убить другие мошеннические процессы). Итак, мне нужно иметь возможность убивать процессы с удаленной машины. Как я могу "убить" удаленно без прав администратора? Если я не могу убить свой собственный процесс с удаленной машины как обычный пользователь, то скажите мне, чтобы я мог пометить его как правильный ответ.

3 ответа3

7

Чтобы убить процесс, запущенный на машине, некоторый локальный процесс (или ядро) должен испустить сигнал уничтожения. Таким образом, вам нужен способ заставить этот процесс излучать этот сигнал, и поскольку вы не можете создать новый процесс, вам нужно найти способ, который основан исключительно на уже запущенных процессах.

Там нет стандартного демона, который может помочь вам там. Все они обработают вашу аутентификацию, а затем развернут новый процесс (такой как оболочка), работающий от вашего имени. Так что если у вас нет консольного доступа и нет взаимодействия с машиной, вам не повезло.


Судя по вашим комментариям, у вас все еще есть оболочка на машине. Тогда есть вещи, которые вы можете сделать. Вы не можете запустить какой-либо внешний процесс, такой как ls или ps . Но вы можете запускать встроенные команды, такие как echo , read и kill (kill не встроен во все оболочки, но он один во всех оболочках, которые поддерживают управление заданиями, например, bash и zsh).

С каждым процессом связан каталог в /proc: /proc/12345 где 12345 - это идентификатор процесса. Таким образом, вы можете получить некоторую информацию о существовании, изучив /proc . здесь полезно использовать echo с подстановочными знаками, например, cd /proc; echo [0-9]* показывает идентификаторы всех запущенных процессов. Если оболочкой является zsh, вы можете многое сделать с квалификаторами glob; например, echo /proc/*(u$UID) показывает только процессы, запущенные под вашим идентификатором пользователя.

Способ отображения содержимого файла без разветвления

while read -r line; do
  echo "$line"
done </path/to/file

Вы можете убить много процессов одновременно, передав их всем для kill . Если вы определили процесс, который принадлежит вашему демону, попробуйте убить его группу процессов с помощью kill -9 -PGID где PGID - это идентификатор процесса лидера группы. Вы можете найти идентификатор группы процессов для процесса 123 с помощью параметра </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp . (Та же информация существует в более читаемой форме в /proc/123/ но вы не в хорошем состоянии ее читать.) Вы также можете попробовать отправить сигнал всем вашим процессам (включая исходную оболочку) с помощью

trap : NUM
kill -NUM -1

Выберите значения NUM, отличные от KILL (9), чтобы команда trap заставляла вашу оболочку игнорировать сигнал (KILL не может быть перехвачен).

2

Следующая информация была найдена в http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/

Убить процесс с помощью команды kill в Linux/UNIX

Команда kill работает как в Linux, так и в UNIX/BSD-подобных операционных системах.

Шаг № 1: Во-первых, вам нужно узнать PID процесса (идентификатор процесса)

Используйте команду ps или команду pidof, чтобы узнать идентификатор процесса (PID). Синтаксис: ps aux | grep имя процесса pidof имя процесса

Например, если имя процесса - lighttpd, вы можете использовать любую из следующих команд для получения идентификатора процесса:

ps aux | grep lighttpdOutput

lighttpd  3486  0.0  0.1   4248  1432 ?        S    Jul31   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd  3492  0.0  0.5  13752  3936 ?        Ss   Jul31   0:00 /usr/bin/php5-cg

ИЛИ используйте команду pidof, которая используется для поиска идентификатора процесса работающей программы:

pidof lighttpd

Выход

3486

Шаг № 2: убить процесс, используя PID (идентификатор процесса)

Выше команды говорят вам PID (3486) процесса lighttpd. Теперь убейте процесс, используя этот PID:

# kill 3486

ИЛИ ЖЕ

# kill -9 3486

Где, -9 - специальный сигнал Kill, который убивает процесс.

примеры команд killall

НЕ ИСПОЛЬЗУЙТЕ команду killall в системе UNIX (только для Linux). Вы также можете использовать команду killall. Команда killall уничтожает процессы по имени (не нужно искать PID):

# killall -9 lighttpd

Убить процесс Firefox:

# killall -9 firefox-bin

Как я уже говорил ранее, killall в системе UNIX делает что-то еще. Это убивает весь процесс, а не только конкретный процесс. Не используйте killall в системе UNIX (используйте kill -9).

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .