Страница 1 из 1

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

Добавлено: 12 фев 2021, 16:05
ogankvik
Здравствуйте.
Имеется скрипт .sh запускаемый из systemd. Команды внутри скрипта выполняются с правами суперпользователя. Как сделать чтобы отдельные команды выполнялись с правами обычного пользователя?

Спасибо!

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

Добавлено: 12 фев 2021, 16:23
Chocobo
ogankvik писал(а):
12 фев 2021, 16:05
отдельные команды выполнялись с правами обычного
если не через sudo, то можно так
runuser -l пользователь -c 'команда'

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

Добавлено: 12 фев 2021, 16:31
slant
Whowka писал(а):
12 фев 2021, 16:12
В /etc/sudoers.d создать правило. Можно и в /etc/sudoers прописать, но некоторые не советуют трогать этот файл
Это из другой оперы, и в основном для обратного. (Чтобы обычный юзер мог что-то выполнить с правами root). Но это именно про права как таковые, а не смена текущего пользователя для отдельной команды, что нужно ТС.

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

Добавлено: 13 фев 2021, 01:06
ogankvik
Chocobo писал(а):
12 фев 2021, 16:23
если не через sudo, то можно так
runuser -l пользователь -c 'команда'

Спасибо! Вы очень помогли :)

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

Добавлено: 13 фев 2021, 04:29
madesta
А если в /etc/sudoers прописать, что данный скрипт может выполнять пользователь без запроса пароля через sudo скрипт.sh? У себя таким образом выходил из положения.

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

Добавлено: 13 фев 2021, 09:01
rogoznik
madesta, так все равно будет использоваться sudo и фактический запуск будет от суперпользователя

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

Добавлено: 13 фев 2021, 10:33
Chocobo
Как всегда есть несколько путей решения:
можно в юните указать запуск от юзера

Код: Выделить всё

[Service]
User=юзер
Group=группа
И тогда отдельные адм команды запускать с sudo и разрешать ему это sudo использовать
Можно эти же команды требующие доступа в polkit обернуть

В обратную сторону можно как уже выше указали использовать runuser
или же через sudo -i -u юзер команда, в случае запуска от рута - также выполнит ничего не спрашивая.

Все зависит от задачи)

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

Добавлено: 21 фев 2021, 12:50
ogankvik
Столкнулся с тем, что вывод текста на экран не работает. Когда выполняешь команду в консоле пользователя - всё ок, но когда скрипт выполняется из systemd, никакое изображение не выводится.

Команда такая: zenity --info --text="Текстовый текст"

runuser -l user -c zenity --info --text="Текстовый текст" в этом случае не работает

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

Добавлено: 21 фев 2021, 16:36
Chocobo
ogankvik, это отдельная особенность, иксы то у тебя с сессией запущены не там где выполняется zenity и сам скрипт в целом.
Вывод надо направить в иксовую сессию

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

Добавлено: 22 фев 2021, 09:58
ogankvik
Chocobo писал(а):
21 фев 2021, 16:36
Вывод надо направить в иксовую сессию
Как это сделать? Не смог сформулировать запрос так, чтобы гугл выдал информацию :)

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

Добавлено: 22 фев 2021, 10:00
rogoznik
ogankvik писал(а):
22 фев 2021, 09:58
Не смог сформулировать запрос так, чтобы гугл выдал информацию
В современном мире это очень важный навык - надо его развивать

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

Добавлено: 22 фев 2021, 15:17
Chocobo
Попробуй указать перед командой export DISPLAY=:0.0
Или в environment юниту который стартует скрипт