Я видел этот вопрос, заданный ранее здесь и здесь, но они довольно старые, и я не смог найти какое-либо решение для работы.

По сути, мне нужно запускать скрипт или команду автоматически от имени пользователя root каждый раз, когда SSH пользователя без полномочий root входит на сервер. Сервер работает под управлением Ubuntu 16.04 и использует OpenSSH, если это имеет значение.

РЕДАКТИРОВАТЬ: Чтобы быть более конкретным, я хочу убить процесс, который был создан пользователем A, когда пользователь B входит в систему. Мои соседи по комнате и я пишем криптографию на своем безголовом игровом сервере, и я хотел бы иметь возможность автоматически запускать pkill miner.sh при входе в систему, независимо от того, кто ее запустил. Поскольку было бы безумно небезопасно позволять пользователям убивать процессы друг друга, кажется, что это сложнее, чем ожидалось.

2 ответа2

1

pam_exec указал вам верное направление, но setuid - плохой совет; большинство (все?) современные Linux игнорируют его в сценариях оболочки и уважают только двоичные исполняемые файлы.

Будет ли это проблемой, если сценарий выполнялся (как root) в другое время, кроме входа в систему? Если это нормально для того, чтобы он выполнялся чаще, чем строго требуется, вы можете создать скрипт-обертку, который будет выполняться при каждом входе в систему через ssh с правами пользователя, который использует sudo (без пароля) для выполнения вашего скрипта от имени root. Это, однако, означает, что пользователи также могут запускать его вручную (как пользователь root) так часто, как они этого хотят.

Чтобы настроить это, добавьте эту строку в /etc/pam.d/sshd

account optional pam_exec.so /etc/pam.d/LoginWrapper.sh

Затем создайте файл /etc/pam.d/LoginWrapper.sh с содержимым:

#!/bin/bash if [[ $EUID -ne 0 ]]; then # Execute only when a user other than root logs in /usr/bin/sudo /path/to/your/root_script.sh fi

Обратите внимание, что если ваш sudo находится на другом пути, вы должны обновить его выше.

Теперь в /etc /sudoers добавьте строку:

ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh

0

Решил это, добавив всех пользователей в группу под названием mygroup

sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2

Затем измените /etc/sudoers чтобы разрешить этой группе выполнять sudo pkill без пароля, добавив в sudoers следующее

%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill

Затем я просто добавил команду sudo pkill в конец /etc/profile и это сработало.

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