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

Спасибо!

2 ответа2

1

Как вы имеете в виду "процесс должен быть убит этим пользователем"?

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

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

Или же

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

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

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 в этом отношении) получают только для интерактивных оболочек. Это означает, что пользователю довольно легко выполнить ssh yourhost 'ps auxw' и найти ваш процесс из таблицы процессов, он не будет уничтожен механизмом, представленным выше, потому что с файлами инициализации оболочки не обращаются. Есть способ обойти это, используя ForceCommand в «sshd_config», но это оставлено в качестве упражнения для читателя.

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

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