Как я могу запустить приложение с графическим интерфейсом администратора в сеансе пользователя без прав администратора?
Я определил 2 учетные записи пользователей:
- один с правами администратора (с
sudoправильно) => давайте назовем этоadminuser, - второй без каких-либо привилегий => давайте назовем его
normaluser
и я настраиваю автологин на этом 2-м пользователеnormaluser,
Поэтому, когда я открываю normaluser сеанс и хотите запустить приложение с правами администратора,
Я открываю терминал Ctrl + Alt + T и:
su adminuser
sudo anyapplication ...
Работает нормально, не выходя из normaluser сеанс (нет необходимости открывать adminuser сессия).
Но что мне делать, если приложение должно работать с графическим интерфейсом пользователя?
Я хоть об этом
su adminuser
gksu anyapplication ...
но я получаю
** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
12 ответов
терминология
В этом ответе:
normaluserобычный пользователь, который не является администратором и не может запускать команды какrootсsudo,adminэто администратор, который может запускать команды какrootсsudo, (Конечно, любые графические команды должны использовать графический интерфейс, такой какgksu/gksudo, и неsudoнепосредственно.)anyapplicationэто название графического приложенияnormaluserхочет бежать какroot,normaluserзнаетadminпароль и (предположительно) сказали, что он / она может использовать его для этой цели.
Эта проблема
Причина вашей проблемы и причина, по которой большинство других ответов до сих пор не работают (за исключением отличного ответа Marty Fried):
gksuможно настроить на использование либоsudoили жеsuкак его бэкэнд. Поведение по умолчаниюgksuв Ubuntu, чтобы выступить в качестве интерфейса дляsudoне дляsu, То есть по умолчаниюgksuа такжеgksudoвести себя точно так же. Смотрите справочную страницу.normaluserне является администратором и поэтому не может запускать команды какrootсsudo,sudoзапрашивает пароль пользователя, который его запускает, а не пароль пользователя, которым он хочет стать. Неспособность использовать свой пароль для выполнения действий, если вы не являетесь пользователем, это значит не быть администратором.normaluserпри условии, что это не гостевая учетная запись, может запускать команды как другой пользователь сsu, введя пароль другого пользователя. Ноgksuвыступает в качестве интерфейса дляsudoнеsu,normaluserне может напрямую запустить любую команду какroot, так какnormaluserне можете использоватьsudoи никто не может статьrootсsuпотому что нетrootпароль
Решение
Решение требует написания команды, которая выполняет два шага аутентификации:
normaluserдолжен статьadminзапустить графическую команду. Сделать это,normaluserдолжен бежатьgksuс-wфлаг, чтобы он работал в su-mode вместо sudo-mode по умолчанию, и-uфлаг для запуска команды какadminвместоroot,- Команда запускается как
adminдолжен вызватьgksuбез-wфлаг для использованияsudoстановитьсяroot,
Вот команда (да, я проверял это ;-)):
gksu -w -u admin gksu anyapplicationВам будет предложено ввести пароль дважды:
- Во-первых, вы должны ввести
adminпароль, чтобыnormaluserзапустить команду какadminсsuбэкенд. - Во-вторых, вы должны ввести
adminпароль, чтобыadminзапустить команду какrootсsudoбэкенд.
Вот так. Вы входите admin пароль дважды.
Разные заметки:
- При желании вы можете заменить второй
gksuсgksudoчтобы сделать это менее запутанным. В Ubuntu они эквивалентны. (Вы также можете заменить первыйgksuсgksudo, но это было бы крайне нелогичным и запутанным.) -wэто краткая форма--su-mode,-Sэто краткая форма--sudo-modeно ни один из них не должен использоваться, потому что режим sudo используется по умолчанию.- Вы можете сначала проверить это с помощью довольно безобидной команды, чтобы убедиться, что она выполняет то, что вам нужно. (Это произойдет, но вам не нужно верить мне в этом.) Например:
gksu -w -u admin gksu xclockxclockхорошее простое приложение с окном часов
Один из способов, который, вероятно, сработает, - это использовать "sux" вместо "su" при первом переключении на пользователя с правами администратора. sux решает проблему запуска приложений x от поддельного пользователя. Он находится в стандартном репо и может быть установлен путем ввода sudo apt-get install sux в командной строке.
Затем просто используйте "sux" вместо "su", и все должно работать так, как вы ожидаете.
Позволяет повторно использовать пример приложения xclock:
sux admin
gksu xclock
PAM может позаботиться об этом
Это работает для меня в Ubuntu 16.04:
поставить строку:
session optional pam_xauth.so
где-то в:
/etc/pam.d/su
и / или
/etc/pam.d/sudo
и затем, выполняя "su -" или "sudo su -", я могу использовать графические приложения в качестве пользователя root.
pkexec
Существует повсеместная альтернатива kdesudo и gksu - pkexec который из policykit-1 пакет, который требуется много пакетов.
Вы можете использовать
sudoс графическим интерфейсом, используя параметры
-sE, следующим образом:
sudo -sE GUI_CMD
Например, если вы хотите запустить
nemoкак корень:
sudo -sE nemo
В Lubuntu есть инструмент под названием
lxqt-sudo. Это в официальных репозиториях. Оно работает!
lxqt-sudo/groovy, сейчас же
0.15.0-0ubuntu1 amd64, это графический интерфейс Qt для простого
sudo.
Для меня сработало это:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY yourcommand commandoption1 commandoption2
Здесь вам нужно заменить
yourcommand commandoption1 commandoption2 расстаться с реальной командой и ее аргументами
Вместо
су админ ГКСУ любое приложение...
Я предлагаю вам попробовать gksu -u admin anyapplicationгде вы делаете все, используя gksu сама команда Также обратите внимание, что вам необходимо ввести пароль пользователя, указанного в команде, т. Е. В этом случае вы должны ввести пароль администратора.
Я бы обычно использовал следующую логику в своих сценариях, чтобы они всегда сами запрашивали повышение привилегий, используя соответствующий метод:
load_function_library
if [[ ${UID} -eq 0 ]] ; then
# Execute only in the case of elevated privileges:
if hash dialog ; then
if ( dialog --backtitle "$( basename $0 )" --title "${BRAND} tools updater: NOTICE!" --yesno "\nMay I update the ${BRAND} OEM tools on your system now?" 20 80 ) ; then
clear && do_update
else
clear && exit
fi
else
echo -e $YELLOW
echo "Hello $SUDO_USER ... I am going to update the OEM tools now..."
echo "To cancel this, just close the terminal or press "CRTL C"."
echo " "
read -p "Press [ ENTER ] to continue with update"
echo -e $ENDCOLOR
do_update
fi
else
# If privileges are not elevated; then request elevation using the appropriate method:
if echo $(systemctl get-default ) |grep graphical ; then pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $0 ; else ensure_admin ; fi
exit
fi
Вот команда, чтобы выполнить это.
gksu app-name
Запустите его без запуска su первый. Вам нужно только запустить вышеупомянутую команду из обычного сеанса пользователя, и приложение будет запущено от имени пользователя root.
Вы должны использовать:
gksudo AppName
Это сначала вызывает графический запрос пароля (пароль вашего пользователя), а затем запускает GUI-приложение от имени пользователя root (я только что попробовал, это действительно так. Забавная вещь: я пытался gksu AppName сразу после этого, и это сработало так же, как это, вероятно, и предполагается, как предполагает префикс "gk". Так что я не совсем уверен, где может быть ваша проблема).
Существует только один суперпользователь, и это root.
Пользователь 1 является администратором и имеет права sudo.
Пользователь 2 не является администратором и не имеет прав sudo.
Попробуйте войти в систему как пользователь 1, а затем с помощью команды
gksudo app-name
(замена имени приложения на имя приложения)
Надеюсь, это поможет - дайте мне знать.: О)
РЕДАКТИРОВАТЬ: Больше информации по запросу
Если это только ты на компьютере,
затем с помощью пользователя 1 (у которого есть разрешение на использование sudo)
ничем не отличается от использования пользователя 2 (у которого нет разрешения на использование sudo).
Пользователь 1 имеет те же права, что и пользователь 2.
Если пользователь 1 не введет команду с префиксом sudo и / или не предоставит свой пароль, чтобы позволить приложениям запускаться с привилегиями root.
Разница лишь в том, что пользователь 2 не может запускать приложения от имени пользователя root.
Надеюсь, это поможет объяснить это немного для вас.: О)