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

33

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

  • один с правами администратора (с sudoправом) => давайте позвоним adminuser.
  • 2-й без каких-либо привилегий => давайте вызовем его, и я настраиваю автологин для этого 2-го пользователя . normaluser
    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
Борис
источник
Вопрос в том, почему вы так настроили свою систему? Как вы думаете, это повышает безопасность? Это не так :) Вместо этого вы могли настроить автоматический вход в свою учетную запись «admin», чтобы он не запрашивал пароль при входе в систему - он все равно будет запрашивать пароль при выполнении административных задач.
Сергей
5
@Sergey Если normaluserиногда используется кем-то, кто не должен быть в состоянии выполнять команды как root, то создание normaluserне-администратора определенно повышает безопасность . Опасность предоставления кому-либо учетной записи пользователя, но не позволяющая ему узнать собственный пароль, выходит далеко за рамки сложностей и сложности Бориса. Если вы хотите получить полное объяснение того, почему это проблематично, я предлагаю опубликовать новый вопрос, но 3 причины состоят в том, что пользователь должен иметь возможность блокировать и разблокировать экран, выходить из системы и входить в нее с другим типом сеанса, и расшифровать ecryptfsданные.
Элия ​​Каган
2
точно, для меня нет смысла использовать компьютер моей семьи, чтобы все знали пароль администратора для разблокировки экрана. Это normaluserи adminuserнастройка - золотое правило.
Борис
1
Честно говоря, у меня сложилось впечатление, что ОП использует normaluserучетную запись для повседневной работы и adminучетную запись для выполнения административных задач, что на самом деле ничего не улучшает. На многопользовательской машине это полностью имеет смысл.
Сергей

Ответы:

5

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

Это работает для меня на Ubuntu 16.04 (редактировать: это работает на 18.04 LTS):

поставить строку:

session optional pam_xauth.so

где-то в:

/etc/pam.d/su

и / или

/etc/pam.d/sudo

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

Gerben
источник
Подтверждение того, что это работает и на Kubuntu 16.04. Благодарность!
Ахмедом
Спасибо, у меня это тоже работает 18.04! это , кажется, лучший вариант для suxи gksuкоторые больше не доступны.
Борис
29

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

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

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

Проблема

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

  • 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-режиме вместо стандартного 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 .
  • Вы можете сначала проверить это с помощью довольно безобидной команды, чтобы убедиться, что она выполняет то, что вам нужно. (Это произойдет, но вам не нужно верить мне в этом.) Например:
    gksu -w -u admin gksu xclock
    xclock хорошее простое приложение с окном часов
Элия ​​Каган
источник
1
ИДЕАЛЬНО, я сразу добавляю псевдоним в мой .bashrc, чтобы не забыть этот умный совет
Борис
не знаю почему, но сейчас (с Ubuntu 14.04) я должен начать с того, sudoчтобы это работало. Пример:sudo gksu -w -u thedude gksu xclock
Борис
К вашему сведению: kdesudoвыглядит, чтобы работать чище, по крайней мере, на KUbuntu.
MDTech.us_MAN
к сожалению, похоже, что gksuбольше нет в наличии
Борис
11

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

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

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

sux admin
gksu xclock
Марти Фрид
источник
3
Больше нет версии suxна Ubuntu 14.04 64bits;(
Борис
2
Кажется, что есть альтернатива
Борис
@Boris Это сценарий оболочки, вы можете просто скачать его из исторического репозитория и поместить его на свой путь, например, из packages.debian.org/source/wheezy/sux
Никто
2

pkexec

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

int_ua
источник
Я рекомендую расширить этот ответ, чтобы объяснить, как обычный пользователь (который не является администратором и не может получить root- sudoправа или пользоваться polkit), который знает пароль администратора (то есть кого-то, кто может стать пользователем root sudoили polkit), может использовать pkexecдля Запустите графическую программу от имени пользователя root. Вот что здесь задает вопрос. Это мне не ясно , что pkexecбудет делать это, по крайней мере , без обширно редактирования конфигурационных файлов, тем более , что в pkexecцелом не может быть использовано для запуска произвольных графических программ (без профилей polkit) на всех . Есть ли способ?
Элия ​​Каган
@EliahKagan Это работает в Ubuntu с конфигурацией по умолчанию - просто запустите, pkexec commandи это работает. Конфигурация находится в файле, /usr/share/polkit-1/actions/org.freedesktop.policykit.policyкоторый установлен именованным пакетом. И на самом деле вам нужно написать пароль администратора только один раз
pqnet
0

Вместо того

су админ
ГКСУ любое приложение ...

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

l0n3sh4rk
источник
1
В сконфигурированной по умолчанию системе Ubuntu, если она normaluserзапускается, gksu -u admin anyapplicationона запрашивает normaluserпароль для adminиспользования sudoбэкенда, так же, как gksu anyapplicationзапрашивает normaluserпароль для rootиспользования sudoбэкенда. Оба не удастся по одной и той же причине - normaluserони не могут выполнять команды sudo.
Элия ​​Каган
-1

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

gksu app-name

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

SirCharlo
источник
1
это не работает - обратите внимание, что я пытаюсь из сеанса пользователя без привилегий
Борис
Что такое сообщение об ошибке?
SirCharlo
вводя свой normalпароль пользователя - я получаю сообщение «Невозможно запустить от имени пользователя root»
Борис
вводя мой superuser/adminпароль - я получаю сообщение "неверный пароль, попробуйте еще раз"
Борис
-1

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

gksudo AppName

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

Иззи
источник
1
это работает в вашем случае, потому что вы пытались из сеанса администратора с правом sudo. Как насчет сеанса пользователя без прав администратора без права sudo?
Борис
я использовал gksudo из обычного окна терминала с пользователем без прав администратора (мой собственный пользователь). Тем не менее, вы правы со второй попытки, так как тогда у меня все еще была перманентность. Но проблема Бориса в другом: его приложение не может подключиться к X, который в моем случае работал оба раза. Как видно из исходного вопроса, sudoв текстовом режиме он работает для него.
Иззи
-1

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

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

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

gksudo app-name  

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

РЕДАКТИРОВАТЬ: Больше информации по запросу

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

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

Fernhill Linux Project
источник
спасибо за разъяснения между суперпользователем и администратором, я отредактирую свой вопрос. Что вы подразумеваете под "входом в систему как пользователь 1" => открыть сеанс с пользователем 1? хорошо, это то, чего я хотел бы избежать.
Борис
добавил больше информации, чтобы ответить по запросу: o)
Проект Fernhill Linux
ну, моя жена и мои дети используют user2 с автологином, поэтому я предпочитаю не иметь права sudo с этим пользователем.
Борис
Звучит как хорошая идея - у меня тоже есть дети; о). Вы уже попытались войти в систему как user1 и запустить команду?
Проект Fernhill Linux
1
Да, я могу, но больно менять сессию пользователя. Обычно мне приходится делать это несколько раз: заходить на сеанс администратора, чтобы определить некоторые настройки, переключаться на обычный сеанс пользователя для тестирования, и снова и снова очень приятно иметь возможность делать это, оставаясь в обычном сеансе. Большую часть времени я работаю с примером su admin+ , за исключением приложения с графическим интерфейсомsudo ...sudo vi file
Борис