Выполнять скрипт как root, когда пользователь не root входит в систему

409
jamzsabb

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

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

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

0
Упомянутый во втором вопросе `pam_exec` также является тем, что я попробую Необходимо немного почитать о PAM. dirkt 5 лет назад 0
@dirkt Да, я видел это, но я получил ошибки разрешения, когда я попробовал это. Я посмотрю больше на это, я действительно не знаю PAM, так что это может быть проблемой jamzsabb 5 лет назад 0
Вы можете получить лучший ответ, если объясните, что вы на самом деле хотите сделать при входе в систему (возможно, есть лучший способ, чем выполнить скрипт от имени пользователя root). Omnipresence 5 лет назад 0

2 ответа на вопрос

1
Omnipresence

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

Спасибо за помощь @Omnipresence, но я все еще получаю `pkill: killing pid 2629 fail: Операция не разрешена`, когда я пытаюсь ее запустить. Мой root_script.sh в основном просто `pkill miner.sh` jamzsabb 5 лет назад 0
Я обновил свой вопрос, добавив больше информации, я не собираюсь делать это каким-то конкретным способом, это просто простая вещь, которую я хотел сделать для удобства, которая заставила меня углубиться в пользовательские разрешения Linux. На данный момент я хочу сделать это просто, чтобы доказать, что это может быть сделано! jamzsabb 5 лет назад 0
0
jamzsabb

Решил это, добавив всех пользователей в группу под названием 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и это сработало.