![Выполнить скрипт как root, когда в систему входит не root-пользователь](https://rvso.com/image/1568338/%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%BA%D0%B0%D0%BA%20root%2C%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B2%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%83%20%D0%B2%D1%85%D0%BE%D0%B4%D0%B8%D1%82%20%D0%BD%D0%B5%20root-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C.png)
Я уже видел этот вопрос.здесьиздесьно они довольно старые, и мне не удалось найти работающее решение.
По сути, мне нужно автоматически запускать скрипт или команду как root каждый раз, когда не root-пользователь подключается по SSH к серверу. На сервере установлена Ubuntu 16.04 и используется OpenSSH, если это имеет значение.
EDIT: Если говорить точнее, я хочу завершить процесс, созданный пользователем A, когда пользователь B входит в систему. Мои соседи по комнате и я майним криптовалюту на моем безголовом игровом сервере, и я хотел бы иметь возможность запускаться pkill miner.sh
автоматически, когда кто-то входит в систему, независимо от того, кто его начал. Поскольку было бы безумно небезопасно позволять пользователям завершать процессы друг друга, похоже, это сложнее, чем ожидалось.
решение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
решение2
Решил эту проблему, добавив всех пользователей в группу под названием 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
и это сработало как по маслу.