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 администратор гксу любое приложение
Вам будет предложено ввести пароль дважды:
Во-первых, вы должны ввести adminпароль пользователя, чтобы позволить normaluser запустите команду как admin с su бэкэнд.
Во-вторых, вы должны ввести adminпароль пользователя, чтобы позволить admin запустите команду как root с sudo бэкэнд.
Верно. Вы входите adminпароль дважды.
Прочие примечания:
При желании вы можете заменить второй gksu с gksudo чтобы сделать это менее запутанным. В Ubuntu они эквивалентны. (Вы также можете заменить первый gksu с gksudo, но это было бы крайне нелогично и сбивало с толку.)
-w является краткой формой --su-mode.
-S является краткой формой --sudo-mode но ни то, ни другое не должно использоваться, потому что sudo-режим это значение по умолчанию.
Возможно, вы захотите сначала протестировать это с помощью какой-нибудь довольно безобидной команды, чтобы убедиться, что она делает то, что вы хотите. (Так и будет, но вам нет необходимости доверять мне в этом.) Например:
gksu -w -u администратор gksu xclock
xclock это приятное простое приложение с окном часов.
Один из способов, который, вероятно, сработает, - это использовать "sux", а не "su", когда вы впервые переключаетесь на пользователя admin. sux устраняет проблему запуска x приложений от поддельного пользователя. Он находится в стандартном репозитории и может быть установлен путем ввода sudo apt-get install sux в командной строке.
Затем просто используйте "sux" вместо "su", и это должно работать так, как вы ожидаете.
Давайте повторно рассмотрим пример приложения xclock:
Я предлагаю вам попробовать gksu -u admin anyapplication, где вы делаете все, используя gksu само командование.Также, пожалуйста, обратите внимание, что вы должны ввести пароль пользователя, указанного в команде, т.е. в этом случае вы должны ввести администраторпароль пользователя.
Обычно я использую следующую логику в своих сценариях, чтобы они всегда сами запрашивали повышение привилегий, используя соответствующий метод:
load_function_libraryif [[ ${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 fielse # 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 exitfi
Запустите его без бегущий su первый. Вам нужно только выполнить приведенную выше команду из обычного сеанса пользователя, и приложение будет запущено от имени root.
Сначала появляется запрос графического пароля (пароль вашего пользователя), а затем запускается GUI-приложение от имени root (я только что попробовал, это действительно так. Забавно: я пытался gksu AppName сразу же после этого, и это сработало так же хорошо - как, вероятно, и предполагалось, как предполагает префикс "gk". Так что я не совсем уверен, где может быть ваша проблема).
@Sergey Если normaluser иногда используется кем-то, кто не должен иметь возможности запускать команды от имени root, то создание normaluser не администратором ** определенно повышает безопасность **. Опасности, связанные с предоставлением кому-либо учетной записи пользователя, но не сообщением ему своего собственного пароля, выходят далеко за рамки ситуации Бориса по хлопотам и сложности. Если вы хотите получить полное объяснение того, почему это проблематично, я предлагаю опубликовать новый вопрос, но 3 причины заключаются в том, что пользователь должен иметь возможность блокировать и разблокировать экран, выходить из системы и снова входить в систему с другим типом сеанса и расшифровывать данные “ecryptfs”.
точно, для меня нет смысла использовать компьютер моей семьи, сообщая всем пароль администратора для разблокировки экрана. Этот параметр normaluser и adminuser является золотым правилом.
Честно говоря, у меня просто сложилось впечатление, что OP использовал учетную запись normaluser для повседневной работы и учетную запись admin для выполнения административных задач, что на самом деле ничего не улучшает. На многопользовательской машине это вполне логично.
Итак, возникает вопрос: почему вы настроили свою систему таким образом? Как вы думаете, это повышает безопасность? Это не так Вместо этого вы могли бы настроить автоматический вход в свою учетную запись “администратор”, чтобы она не запрашивала у вас пароль при входе в систему - она все равно будет требовать пароль при выполнении административных задач.