Вопрос или проблема
В старые времена 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
-
Использование sudo:
Командаsudo -u anotheruser someapplication
запускает приложение от имени другого пользователя, однако по умолчанию требует пароль запускающего пользователя. Однако можно изменить это поведение, чтобы требовался пароль целевого пользователя. -
Настройка в файле sudoers:
Для этого можно изменить настройки на машине, так чтобы sudo запрашивал пароль целевого пользователя. Это достигается добавлением следующей строки в файлsudoers
черезvisudo
:Defaults:anotheruser targetpw
Таким образом, при выполнении команды от имени
anotheruser
, система будет просить пароль этого пользователя. -
Настройка отображения:
Убедитесь, что переменная окружения DISPLAY настроена правильно. Это можно сделать, используя команду:export DISPLAY=:0
Эта команда должна быть включена в скрипт запуска вашего приложения.
-
Запуск через терминал:
Если всё настроено корректно, создайте скрипт или ярлык, который будет использовать терминал для выполнения этой команды. Например, ярлык на рабочем столе может содержать команду:xterm -e "sudo -u anotheruser someapplication"
Итог
Подход, описанный выше, позволит запустить приложение от имени другого пользователя, запрашивая именно его пароль. Такой метод также обходит некоторые проблемы с переменной DISPLAY, которые могут возникнуть при использовании pkexec или beesu без дополнительных настроек.
Заключение
Использование sudo
с правильно настроенным sudoers
файлом предоставляет более гибкое и безопасное средство для выполнения задач, требующих прав другого пользователя в современных Linux-системах. Это решение полностью соответствует требованиям текущих версий CentOS и гарантирует корректное взаимодействие с графическим интерфейсом.