Замена gksu

Вопрос или проблема

В старые времена CentOS 5 у меня было приложение, которое запускалось от имени другого пользователя. Я создал .desktop файл, который выполнял команду, выглядящую так:

gksu -u anotheruser someapplication

Когда пользователь нажимал на иконку, появлялось окно с просьбой ввести пароль “anotheruser”. Когда пароль был правильным, запускалось “someapplication”.

Теперь, в современные времена CentOS 7, я не могу найти замену этому поведению. Я попробовал beesu:

beesu -l -P someapplication anotheruser

но он спрашивает пароль root вместо пароля “anotheruser”.

Я также попробовал pkexec:

pkexec --user anotheruser someapplication

с тем же результатом.

Оба метода также имеют проблемы с нахождением правильной переменной дисплея:

Failed to parse arguments: Cannot open display:

Любая помощь будет оценена.

Попробуйте использовать sudo с другим пользователем и паролем root в терминале:

sudo -u USER COMMAND

Если дисплей работает правильно, вы можете настроить sudo (в файле sudoers через visudo), чтобы использовать пароль целевого пользователя:

targetpw Если установлено, sudo будет запрашивать пароль пользователя, указанного в опции -u (по умолчанию root), вместо пароля вызывающего пользователя при выполнении команды или редактировании файла.

Отсюда просто создайте команду для запуска в xterm.

Я только что вспомнил, что кратко использовал gksudo, когда впервые пробовал Ubuntu, может быть, об этом вы думаете?

Ответ или решение

Замена gksu в современных системах, таких как CentOS 7, стала актуальной задачей для тех, кто привык к старым инструментам, используемым для выполнения приложений от имени другого пользователя. В прошлом, с CentOS 5, команда gksu -u anotheruser someapplication запускала приложение от имени другого пользователя, запрашивая его пароль. Однако в CentOS 7 direct аналогов gksu нет, и популярные альтернативы, такие как beesu и pkexec, не предоставляют все те же функциональные возможности.

Авторы вопроса отмечают, что при попытке использования beesu и pkexec система запрашивает пароль root, а не целевого пользователя, и возникают проблемы с переменной дисплея.

Возможное решение с использованием sudo и конфигурация sudoers

  1. Использование sudo:
    Команда sudo -u anotheruser someapplication запускает приложение от имени другого пользователя, однако по умолчанию требует пароль запускающего пользователя. Однако можно изменить это поведение, чтобы требовался пароль целевого пользователя.

  2. Настройка в файле sudoers:
    Для этого можно изменить настройки на машине, так чтобы sudo запрашивал пароль целевого пользователя. Это достигается добавлением следующей строки в файл sudoers через visudo:

    Defaults:anotheruser targetpw

    Таким образом, при выполнении команды от имени anotheruser, система будет просить пароль этого пользователя.

  3. Настройка отображения:
    Убедитесь, что переменная окружения DISPLAY настроена правильно. Это можно сделать, используя команду:

    export DISPLAY=:0

    Эта команда должна быть включена в скрипт запуска вашего приложения.

  4. Запуск через терминал:
    Если всё настроено корректно, создайте скрипт или ярлык, который будет использовать терминал для выполнения этой команды. Например, ярлык на рабочем столе может содержать команду:

    xterm -e "sudo -u anotheruser someapplication"

Итог

Подход, описанный выше, позволит запустить приложение от имени другого пользователя, запрашивая именно его пароль. Такой метод также обходит некоторые проблемы с переменной DISPLAY, которые могут возникнуть при использовании pkexec или beesu без дополнительных настроек.

Заключение

Использование sudo с правильно настроенным sudoers файлом предоставляет более гибкое и безопасное средство для выполнения задач, требующих прав другого пользователя в современных Linux-системах. Это решение полностью соответствует требованиям текущих версий CentOS и гарантирует корректное взаимодействие с графическим интерфейсом.

Оцените материал
Добавить комментарий

Капча загружается...