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

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот

Автор темы
ogankvik
Сообщения: 83
Зарегистрирован: 22 ноя 2019, 16:12
Благодарил (а): 38 раз
Поблагодарили: 7 раз

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

Сообщение ogankvik » 12 фев 2021, 13:05

Здравствуйте.
Имеется скрипт .sh запускаемый из systemd. Команды внутри скрипта выполняются с правами суперпользователя. Как сделать чтобы отдельные команды выполнялись с правами обычного пользователя?

Спасибо!

Аватара пользователя

Chocobo
Сообщения: 9708
Зарегистрирован: 27 авг 2016, 19:57
Решено: 210
Откуда: НН
Благодарил (а): 746 раз
Поблагодарили: 2861 раз

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

Сообщение Chocobo » 12 фев 2021, 13:23

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

Аватара пользователя

slant
Сообщения: 3249
Зарегистрирован: 21 июн 2017, 15:09
Решено: 58
Благодарил (а): 39 раз
Поблагодарили: 1368 раз

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

Сообщение slant » 12 фев 2021, 13:31

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


Автор темы
ogankvik
Сообщения: 83
Зарегистрирован: 22 ноя 2019, 16:12
Благодарил (а): 38 раз
Поблагодарили: 7 раз

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

Сообщение ogankvik » 12 фев 2021, 22:06

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

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

Аватара пользователя

madesta
Сообщения: 1069
Зарегистрирован: 11 июн 2017, 18:47
Решено: 12
Благодарил (а): 43 раза
Поблагодарили: 254 раза

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

Сообщение madesta » 13 фев 2021, 01:29

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

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

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

Сообщение rogoznik » 13 фев 2021, 06:01

madesta, так все равно будет использоваться sudo и фактический запуск будет от суперпользователя
ИзображениеИзображение

Аватара пользователя

Chocobo
Сообщения: 9708
Зарегистрирован: 27 авг 2016, 19:57
Решено: 210
Откуда: НН
Благодарил (а): 746 раз
Поблагодарили: 2861 раз

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

Сообщение Chocobo » 13 фев 2021, 07:33

Как всегда есть несколько путей решения:
можно в юните указать запуск от юзера

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

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

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

Все зависит от задачи)
Изображение
   
Изображение


Автор темы
ogankvik
Сообщения: 83
Зарегистрирован: 22 ноя 2019, 16:12
Благодарил (а): 38 раз
Поблагодарили: 7 раз

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

Сообщение ogankvik » 21 фев 2021, 09:50

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

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

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

Аватара пользователя

Chocobo
Сообщения: 9708
Зарегистрирован: 27 авг 2016, 19:57
Решено: 210
Откуда: НН
Благодарил (а): 746 раз
Поблагодарили: 2861 раз

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

Сообщение Chocobo » 21 фев 2021, 13:36

ogankvik, это отдельная особенность, иксы то у тебя с сессией запущены не там где выполняется zenity и сам скрипт в целом.
Вывод надо направить в иксовую сессию
Изображение
   
Изображение


Автор темы
ogankvik
Сообщения: 83
Зарегистрирован: 22 ноя 2019, 16:12
Благодарил (а): 38 раз
Поблагодарили: 7 раз

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

Сообщение ogankvik » 22 фев 2021, 06:58

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

Аватара пользователя

rogoznik
Сообщения: 8478
Зарегистрирован: 27 июн 2017, 10:36
Решено: 93
Откуда: Нижний Тагил
Благодарил (а): 550 раз
Поблагодарили: 1543 раза

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

Сообщение rogoznik » 22 фев 2021, 07:00

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

Аватара пользователя

Chocobo
Сообщения: 9708
Зарегистрирован: 27 авг 2016, 19:57
Решено: 210
Откуда: НН
Благодарил (а): 746 раз
Поблагодарили: 2861 раз

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

Сообщение Chocobo » 22 фев 2021, 12:17

Попробуй указать перед командой export DISPLAY=:0.0
Или в environment юниту который стартует скрипт
Изображение
   
Изображение

Вернуться в «Программирование, скриптинг, виртуализация»