ri_gilfanov
@ri_gilfanov
Web- and desktop-developer

Как настроить автозапуск графического приложения с правами другого пользователя в linux-дистрибутиве Debian для непривилегированного пользователя?

Собственно, что мне нужно добиться от Debian:
  • есть графическое приложения, которому нужны права для изменения пары системных конфигов в /etc/;
  • есть пользователь reader (по-сути, гостевой пользователь), права которого должны быть максимально ограничены;
  • графическое приложение должно запускаться автоматически при входе пользователя reader.


Запуск графического приложения от root может быть избыточным, но приемлемым.

Запуск от отдельного пользователя и добавление ему прав на редактирование той пары системных конфигов -- кажется более оптимальным.

В любом случае, графическое приложение должно автоматически запускаться для гостевого пользователя по-умолчанию (максимально бесправного), но с правами другого пользователя.

Как это можно реализовать?

Буду рад советам по делу.

UPDATE

Создано два пользователя: reader и defender

Пользователь defender добавлен в группу root, а нужным конфигам изменены групповые права доступа.

Графическое приложение написано на "python gtk3". Как я понимаю, suid для запуска скриптовых файлов .py и .sh не подходит.

Обернул команду на запуск в bash-script:
cd /home/defender/thin-defender/thin_defender
/home/defender/thin-defender/.venv/bin/python3 /home/defender/thin-defender/thin_defender/manage.py run_app --config test


Добавил в sudoers до инклюда следующее правило:
reader  ALL=(ALL:ALL) NOPASSWD:/home/defender/thin-defender/thin_defender/run.sh


Запуск через
sudo -u defender /home/defender/thin-defender/thin_defender/run.sh

...ожидаемо не работает:
No protocol specified
Unable to init server: Could not connect: Connection refused
No protocol specified
Unable to init server: Не удалось подключиться к: Connection refused
Segmentation fault

Запуск через
gksudo -u defender /home/defender/thin-defender/thin_defender/run.sh

Ничего не даёт.

Добавил ключик d, чтобы получить отладочную информацию:
No ask_pass set, using default!
xauth: /tmp/libgksu-4YNi0X/.Xauthority
STARTUP_ID: gksudo/|home|defender|thin-defender|thin_defender|run.sh/3546-0-default_TIME8935278
cmd[0]: /usr/bin/sudo
cmd[1]: -H
cmd[2]: -S
cmd[3]: -p
cmd[4]: GNOME_SUDO_PASS
cmd[5]: -u
cmd[6]: defender
cmd[7]: --
cmd[8]: /home/defender/thin-defender/thin_defender/run.sh
buffer: -No protocol specified-
buffer: -Unable to init server: Could not connect: Connection refused-
buffer: -No protocol specified-
buffer: -Unable to init server: Не удалось подключиться к: Connection refused-
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: -Segmentation fault-
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
buffer: --
brute force GNOME_SUDO_PASS ended...
No password prompt found; we'll assume we don't need a password.
xauth: /tmp/libgksu-4YNi0X/.Xauthority
xauth_env: /home/reader/.Xauthority
dir: /tmp/libgksu-4YNi0X


При использовании gksu с sudo в качестве бэкенда (ключ -S):
gksu -Sdu defender /home/defender/thin-defender/thin_defender/run.sh


Поведение аналогично, в отладке те же ошибки.

А вот gksu в обычном режиме (т.е. su в качестве бэкенда):
gksu -du defender /home/defender/thin-defender/thin_defender/run.sh


Приводит к запрашиванию пароля от пользователя defender, что в моём случае неприемлемо. Хотя приложение после ввода пароля запускается.

Где и какой конфиг править, чтобы сделать беспарольный вызов конкретного скрипта через gksu в обычном режиме (без использования бэкенда в виде sudo) не нагуглил.

Так же пробовал добавлять в bash-скрипт:
run xhost
export DISPLAY=":0.0"
xhost +


Но толку вроде не было.

Собственно, рабочее решения для запуска приложения от другого пользователя без пароля пока так и не нашёл.
  • Вопрос задан
  • 750 просмотров
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
Поизучал этот вопрос:
Достал апельсинку (Orange PI One), залил на нее armbian.
Самый простой способ это взять lightdm а приложение запускать как greeter(никаких автовходов не надо).
В таком варианте нужно установить лишь xorg и lightdm
и выполнить systemctl set-default graphical.target
/etc/lightdm/lightdm.conf
[Seat:*]
greeter-session=my-greeter


/usr/share/xgreeters/my-greeter.desktop
[Desktop Entry]
Name=My GTK+ Greeter
Comment=This runs the My GTK+ greeter, it should only be run from LightDM
Exec=python /home/user/greeter.py
Type=Application
X-Ubuntu-Gettext-Domain=lightdm

приложение при вылете перезапустится, находится в 7 консоли, в остальных консолях будет висеть строка входа.

вобщем любой скрипт можно так запустить под иксами от пользователя lightdm запускается по умолчанию.

а можно просто поискать готовый greeter(программа логина) а RDP запускать уже через скрипт сессии.
получиnm параметры по DHCP можно так
/etc/dhcp/dhclient-exit-hooks.d/myparamscript
setup_add() {
    echo $new_host_name > /etc/hostname
    hostname $new_host_name

    if [ -z "$new_nds_servers" ] ; then
        return
    fi

    echo rdp_server=$new_nds_servers > /tmp/rdp_config
    echo rdp_user=$new_nds_tree_name >> /tmp/rdp_config
    echo rdp_passwd=$new_nds_context >> /tmp/rdp_config
}

case $reason in
    BOUND|RENEW|REBIND|REBOOT)
        setup_add
        ;;
    EXPIRE|FAIL|RELEASE|STOP)
        return
        ;;
esac

на сервере DHCP настраиваются кастомные опции для каждого клиента:
nds_servers
nds_tree_name
nds_context
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Adamos
@Adamos
есть графическое приложения, которому нужны права для изменения пары системных конфигов в /etc/;

Желательно решить именно эту проблему. Какого черта какому бы то ни было "графическому приложению" понадобилось писать в /etc/? Ему тут винда, что ли?
Ответ написан
man suid
Даже в википедии есть: https://ru.wikipedia.org/wiki/Suid

А если скрипт, то:
sudo cat /etc/sudoers
Там все прямо в комментариях написано.

Или в гугл sudoers nopasswd
Ответ написан
Комментировать
@Tabletko
никого не трогаю, починяю примус
Запускать приложение от рута в сессия гостя это конечно сильно. Если очень надо - посмотрите в сторону sudo
Ответ написан
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Никакое "графическое приложение" от пользователя не должно писать в каталоги, отличные от домашки и /tmp. А уж лезть в /etc - это полный адЪ и демоны. Если в действительности надо что-то такое менять в /etc - пишите демона, который будет стартовать от рута и писать в /etc и клиента, который будет слать ему команды. А лучше всего и демона пускать не от рута, а от некоего псевдопользователя, который будет владеть этой парой файлов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект