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

27

Я определил 2 учетных записи пользователей:

  • один с правами администратора (с sudo right) = > позволяет называть его adminuser .
  • второй без каких-либо привилегий = > позволяет называть его normaluser
    и я настраиваю автолог на этого второго пользователя normaluser .

Итак, когда я открываю сеанс normaluser и хочу запустить приложение с правами администратора,
Я открываю терминал Ctrl + Alt + T и:

su adminuser
sudo anyapplication ...

Он отлично работает, не выходя из сеанса normaluser (нет необходимости открывать сеанс adminuser ).

Но что делать, если приложение должно запускаться с графическим интерфейсом (GUI)? Я хоть об этом:

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
    
задан Boris 17.07.2012 в 19:49
источник

8 ответов

25

Терминология

В этом ответе:

  • normaluser - обычный пользователь, который не является администратором и не может выполнять команды как root с sudo .
  • admin является администратором, который может выполнять команды как root с sudo . (Конечно, любые графические команды должны использовать графический интерфейс, например gksu / gksudo , а не sudo напрямую.)
  • anyapplication - это имя графического приложения normaluser , которое хочет работать как root . normaluser знает пароль admin и имеет (предположительно), что он / она может использовать его для этой цели.

Проблема

Причина вашей проблемы и причина, по которой большинство других ответов пока не работают (за исключением Marty Fried отличный ответ ):

  • gksu может быть настроено на использование sudo или su в качестве своего бэкэнд. По умолчанию поведение gksu в Ubuntu должно действовать как интерфейс для sudo , not для su . То есть, по умолчанию gksu и gksudo ведут себя точно так же . См. справочную страницу .
  • normaluser не является администратором и поэтому не может выполнять команды как root с sudo . sudo запрашивает пароль пользователя, выполняющего его , а не пароль пользователя, которому они хотят стать . Невозможно использовать свой пароль для выполнения действий, поскольку люди, которые не являются вами, - это , что значит не быть администратором .
  • normaluser , если он не является гостевой учетной записью, может запускать команды как другой пользователь с su , помещая пароль другого пользователя . Но gksu действует как интерфейс для sudo , а не su .
  • normaluser не может напрямую запускать любую команду как root , потому что normaluser не может использовать sudo , и nobody может стать root с su , потому что нет root password .

Решение

Для решения требуется написать команду, которая выполняет два этапа аутентификации:

  • normaluser должен стать admin для запуска графической команды. Чтобы сделать это, normaluser должен запустить gksu с флагом -w , чтобы он выполнялся в su-mode вместо стандартного sudo-mode и флаг -u для выполнения команды admin вместо root .
  • Команда admin должна вызывать gksu без флага -w , чтобы использовать sudo , чтобы стать root .

Вот команда (да, я протестировал ее ; -) ):

gksu -w -u admin gksu anyapplication

Вам будет предложено ввести пароль дважды :

  1. Сначала вы должны ввести пароль admin , чтобы normaluser запустил команду как admin , используя su .
  2. Во-вторых, вы должны ввести пароль admin , чтобы admin запустил команду как root , sudo .

Правильно. Вы дважды вводите пароль admin .

Другие примечания:

  • Если вы хотите, вы можете заменить второй gksu gksudo , чтобы сделать его менее запутанным. В Ubuntu они эквивалентны. (Вы также можете заменить первый gksu gksudo , но это будет крайне противоречиво и запутанно.)
  • -w - это короткая форма --su-mode .
  • -S - это короткая форма --sudo-mode , но ни одна из них не должна использоваться, поскольку по умолчанию используется sudo-mode .
  • Сначала вы можете протестировать это с помощью некоторой довольно безобидной команды, чтобы убедиться, что она делает то, что вы хотите. (Это будет, но вам не нужно доверять мне это.) Например:
    gksu -w -u admin gksu xclock
    xclock - приятное приложение с часовым окном.
ответ дан Eliah Kagan 17.07.2012 в 20:49
источник
11

Один из способов, который, вероятно, будет работать, - использовать «sux», а не «su», когда вы впервые переключаетесь на пользователя admin. sux устраняет проблему запуска приложений x из подделанного пользователя. Он находится в стандартном репо и может быть установлен путем ввода sudo apt-get install sux в командной строке.

Затем просто используйте «sux» вместо «su», и он должен работать так, как вы ожидаете.

Повторное использование примера приложения xclock :

sux admin
gksu xclock
    
ответ дан Marty Fried 17.07.2012 в 20:54
3

PAM может позаботиться об этом

Это работает для меня на Ubuntu 16.04:

введите строку:

session optional pam_xauth.so

где-то в:

/etc/pam.d/su

и / или

/etc/pam.d/sudo

, а затем выполните «su» или «sudo su». Я могу использовать графические приложения как root.

    
ответ дан Gerben 23.09.2016 в 08:23
2

pkexec

Существует вездесущая альтернатива kdesudo и gksu - pkexec , которая из пакета policykit-1 , требуемого множеством пакетов.

    
ответ дан int_ua 12.08.2014 в 10:56
0

Вместо

su admin
gksu anyapplication ...

Я предлагаю вам попробовать gksu -u admin anyapplication , где вы делаете все, используя команду gksu . Также учтите, что вы должны ввести пароль пользователя, упомянутого в команде, то есть в этом случае вам нужно ввести пароль admin .

    
ответ дан l0n3sh4rk 17.07.2012 в 20:13
-1

Вот команда, чтобы выполнить это.

gksu app-name

Запустите его без с запуском su . Вам нужно только выполнить указанную выше команду из обычного пользовательского сеанса, и приложение будет запущено с правами root.

    
ответ дан SirCharlo 17.07.2012 в 19:51
-1

Вы должны использовать:

gksudo AppName

Сначала возникает запрос на графический пароль (пароль пользователя), а затем запускается GUI-приложение как root (я просто пытался это сделать. Смешная вещь: я сразу же попытался gksu AppName , и это сработало хорошо, как и предполагалось, так как предполагается префикс «gk». Поэтому я не совсем уверен, где может быть ваша проблема).

    
ответ дан Izzy 17.07.2012 в 20:08
-1

Существует только один суперпользователь, и это root.

Пользователь 1 является администратором и имеет права sudo.
Пользователь 2 не является администратором и не имеет прав sudo.

Попробуйте войти в систему как пользователь 1, затем используя команду

gksudo app-name  

(замена имени приложения на имя приложения)
Надеюсь, что поможет - дайте мне знать. : o)

EDIT: дополнительная информация по запросу

Если это только вы на компьютере,
затем используя пользователя 1 (у кого есть разрешение на использование sudo)
ничем не отличается от использования пользователя 2 (у кого нет разрешения на использование sudo).
Пользователь 1 имеет те же права, что и пользователь 2.
Если пользователь 1 не выдает команду с префиксом sudo и / или предоставляет свой пароль, чтобы приложения могли запускаться с корневыми привилегиями.
Единственное различие заключается в том, что пользователь 2 не может запускать приложения как root.

Надеюсь, что это поможет вам немного объяснить. : О)

    
ответ дан Fernhill Linux Project 17.07.2012 в 20:14