Есть ли способ создать процесс, который может быть завершен кем угодно в Linux?

Есть ли способ создать процесс, который может быть завершен кем угодно в Linux?

Например, я хотел бы запустить процесс в фоновом режиме СЕКРЕТНО на сервере Ubuntu, но всякий раз, когда кто-либо, кроме меня, входит на сервер, процесс должен быть завершен этим пользователем. Возможно ли создать такой процесс? (У меня есть учетная запись, sudoи я могу изменять /etc/bash.bashrc)

Спасибо!

решение1

Обратите внимание, что последующие действия могут поставить под угрозу безопасность вашей системы различными способами.

Создайте скрипт, который позаботится об остановке вашего процесса (назовем его процессом P). Затем дайте всем пользователям разрешение на запуск этого скрипта в sudoers. Наконец, добавьте подходящий вызов для этого скрипта с sudo в /etc/bashrc.

Давайте для примера предположим, что вы знаете, с чего начался ваш процесс, /usr/local/sbin/myprocи что вы хотите завершить все эти процессы сразу же после того, как кто-то войдет в систему. Поэтому вы будете использовать простую стратегию grep и kill для их завершения.

Итак, сначала поместите следующее в /usr/local/sbin/killmyprocs:

#!/bin/sh

ps auxw|grep [m]yproc|awk '{ print $2 }'|xargs kill -TERM > /dev/null 2>&1

# end of file.

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

Во-вторых, дайте всем пользователям разрешение на запуск этого скрипта, /etc/sudoersдобавив в него:

ALL ALL = (root) NOPASSWD: /usr/local/sbin/killmyprocs

Третий и последний шаг — добавить вызов sudo в ваш скрипт /etc/bashrc:

[ "`id -n -u`" != "<my_username>" ] && sudo /usr/local/sbin/killmyprocs

Замените на свою собственную учетную запись, чтобы избежать завершения ваших «секретных» процессов при входе в систему.

Подводя итог: 1) создайте скрипт, который не выводит никаких данных, но завершает процессы, которые вы хотите завершить, 2) добавьте соответствующую запись для /etc/sudoersкаждого пользователя в вашей системе, чтобы иметь возможность выполнить этот скрипт от имени пользователя root, 3) добавьте вызов вашего скрипта через sudo в /etc/bashrc(или /etc/profile).

Предостережение: /etc/bashrc(или /etc/profileесли на то пошло) get sourced только для интерактивных оболочек. Это означает, что пользователю довольно легко выполнить ssh yourhost 'ps auxw' и найти ваш процесс в таблице процессов, он не будет убит с помощью механизма, представленного выше, поскольку файлы инициализации оболочки не просматриваются. Есть способ обойти это, используя ForceCommand´sshd_config`, но это оставлено в качестве упражнения для читателя.

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

решение2

Что вы имеете в виду, «процесс должен быть завершен этим пользователем»?

А) Вы хотите, чтобы пользователь завершил ваш процесс, которым он/она не владеет?

Создайте скрипт для завершения процесса, а затем установите setuid chmod u+s(это может стать серьезной дырой в безопасности, если вы не знаете, что делаете).

Или

Б) Вы хотите, чтобы процесс заметил вход пользователя в систему и завершил себя?

Ну, это то, что вы бы сделали.

Связанный контент