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

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

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

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

Проблема

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

  • 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 флаг, чтобы заставить его работать в су-режим вместо значения по умолчанию sudo-режим, и в -u установите флажок для выполнения команды как admin вместо root.
  • Команда выполняется как admin должен вызывать gksu без то -w флаг для использования sudo стать root.

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

gksu -w -u администратор гксу любое приложение

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

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

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

Прочие примечания:

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