Мне нужен эквивалент ГКСУ в 18.04


23

Я читал много веток об удалении gksu из многих разновидностей Linux, включая Ubuntu 18.04. Многие утверждают, что gksu - мерзость, и никому из пользователей никогда не нужно использовать что-либо подобное. У меня есть 2 примера, где, насколько я знаю, у меня должно быть что-то, что позволяет мне работать от имени пользователя root (не только для редактирования файлов).

Во-первых, мне нужно запустить mysql только после открытия зашифрованной папки по команде (GUI). Это означает, что сценарий запускается системой шифрования, которая запускает службу mysql. Это должно быть сделано от имени пользователя root, поэтому я использую gksu в этом сценарии запуска, который запрашивает у меня пароль. Как еще я могу запустить сервис из системы с графическим интерфейсом?

Я также запускаю резервные копии системы Ubuntu от имени пользователя root, в противном случае резервное копирование многих системных файлов невозможно. Таким образом, файл рабочего стола использует gksu для запуска резервного копирования.

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

Другие ответы на подобные вопросы, похоже, не касаются отдельных проблем, которые возникают у людей сейчас, когда gksu больше нет (или труднее найти ...). Я думаю, что такие вопросы от неопытных пользователей выиграют от более подробных ответов. Теперь у меня есть некоторые, и поэтому хотел бы ответить на свой вопрос.


Работает ли pkexecу вас вместо gksu?
Томас Уорд

@karel согласился, хотя этот пост не ясно указать «замена» является pkexec. (вы должны охотиться за ним)
Томас Уорд

2
Вы также можете попытаться использовать, sudo -H GUI-programи если у Wayland есть эта ссылка, которая может быть полезна, ... есть обходные пути, если у вас есть инструмент с графическим интерфейсом, который хорошо работает для вас и требует повышенных разрешений.
Судодус

3
Это спорная тема, но в «ореховой оболочке» запуск графических приложений от имени пользователя root представляет угрозу безопасности. Хотя вы и многие другие, возможно, не согласны с этим, запуск графических приложений от имени root не приветствуется Ubuntu и многими дистрибутивами. Ubuntu находится в процессе написания альтернативных решений, pkexec и других политик. Вы можете подать отчет об ошибке, и разработчики будут работать над решением для программ, которые, по их мнению, должны делать, такие как менеджеры пакетов. Это сложно, поскольку в нем задействованы X и Wayland. Поочередно используйте не графические приложения или напишите свои собственные. Шифрование не требует графического интерфейса
Panther

Я использую gnome-encfs-manager, который предоставляет графический интерфейс для монтирования зашифрованных папок. Он предусматривает запуск сценария при подключении диска. В этом сценарии мне нужно запустить MySQL. Как еще я могу это сделать? Что касается Wayland, запрещать использование синаптических или gparted guis нелепо с точки зрения обычного пользователя домашнего компьютера. Они бесценны. Системы могут быть настолько безопасными, что никто не хочет их использовать - существует баланс, и в этом конкретном случае (Wayland) пользователь должен быть прав.
пастим

Ответы:



8

Я знаю, что, как говорят, есть ответы на этот вопрос в другом месте, но я не нашел ни одного из них достаточно ясным и простым, чтобы решить эту проблему. Так что я копался во многих местах и ​​придумал это. Я до сих пор не понимаю, почему сообщество Linux решило сделать жизнь простых пользователей настольным компьютером (и я попытался понять много объяснений), но это жизнь. Я использую GUI практически для всего, только используя окно терминала, когда это необходимо. Насколько я могу судить, решения с использованием параметров sudo не помогают в этом. Поэтому у меня есть .desktopфайлы и сценарии, которые выполняют все работы, которые я регулярно использую.

Есть два основных решения.

1. Переустановите gksu

Это решение может или не может длиться долго. Специалисты по борьбе с ГКСУ могут найти способ остановить это. А пока загрузите 2 .debфайла из libgksu (x64) и gksu (x64) . Установите libgksu2, а затем gksu, используя gdebi или любой другой инструмент для установки, который вы хотите использовать. Это сработало для меня.

2. Используйте pkexec

Как (надеюсь) более долгосрочное решение, мне удалось заставить pkexec работать для нужных мне инструментов.

  1. Чтобы запустить сервис из скрипта. Оказывается, ни gksu, ни pkexec не нужны. Просто start service xyzи он попросит ваш пароль.

  2. Чтобы отредактировать корневые файлы или открыть nautilus от имени root, см. Раздел Как запустить Gedit и Nautilus от имени root с помощью pkexec вместо gksu - Web Upd8 . Это обеспечивает два файла 'polkit' для pkexec, которые позволяют вам использовать скрипт, содержащий pkexec geditдля редактирования корневого файла, и аналогично для nautilus. Все инструкции находятся на этой веб-странице. Сейчас я использую «filemanager-actions» для предоставления правых щелчков, чтобы запустить gedit или nautilus от имени пользователя root.

  3. Я запускаю deja-dup в качестве пользователя root для резервного копирования основной системы. Я делаю это нечасто, исключая /home(потому что /homeя делаю частые резервные копии, которые не нуждаются в root-доступе). Чтобы заставить это работать, я взял копию файла, использованного в шаге 2 для gedit, и отредактировал его для deja-dup. Я не очень понимаю содержание, но оно работает, как для резервного копирования, так и для восстановления файлов, используя pkexec backupскрипт, инициированный из файла .desktop. Я добавил этот новый файл, /usr/share/polkit-1/actionsсодержащий:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD polkit Policy Configuration 1.0//EN" "http://www.freedesktop.org/software/polkit/policyconfig-1.dtd">
    
    <policyconfig>
      <icon_name>deja-dup</icon_name>
    
      <action id="org.gnome.DejaDup">
        <description gettext-domain="deja-dup">Backup</description>
        <message gettext-domain="deja-dup">Privileges are required to backup system files</message>
        <defaults>
        <allow_any>no</allow_any>
        <allow_inactive>auth_admin</allow_inactive>
        <allow_active>auth_admin</allow_active>
         </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/deja-dup</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

    Обратите внимание, что в этом каталоге есть еще один файл deja-dup, в котором утверждается, что он помогает восстановить файлы, но я не смог заставить его работать. Этот новый файл должен иметь уникальное имя, например org.gnome.DejaDupNew.policy.

Я пока бегу без ГКСУ. Я постараюсь продолжить ...


Команда для запуска резервного копирования была pkexec deja-dupдля меня, после добавления файла, как вы описали. Диалог позволяет мне сначала выбрать настройки, и это здорово.
wbloos

Помещение файла политики /usr/share/polkit-1/actionsбыло действительно способом создания настольной программы запуска с повышенными pkexecразрешениями. Вот еще один пример .
Серж Строобандт

4

Nautilus Admin ( nautilus-admin ) - это простое расширение Python для файлового менеджера Nautilus, которое добавляет некоторые административные действия в контекстное меню:

  • Открыть как администратор: открывает папку в новом окне Nautilus с правами администратора (root).
  • Изменить как администратор: открывает файл в окне Gedit с правами администратора (root).

Чтобы установить Nautilus Admin во всех поддерживаемых в настоящее время версиях Ubuntu, откройте терминал и введите:

sudo apt install nautilus-admin

Я протестировал все альтернативы gksu в 18.04 для других приложений, кроме Files и Gedit, и наиболее последовательно работает следующее:

sudo -H имя приложения &> / dev / null

pkexecявляется лучшей заменой gksu, когда он работает, поскольку он обеспечивает более высокий уровень безопасности, но он очень несовместим в разных приложениях (например, не работает с Gedit) и может вызвать сбой в некоторых приложениях. sudo -iУправлять им излишне сложно, потому что он повышает ваши привилегии для пользователя root на длительный период времени, когда вам нужно быть пользователем root только для запуска одной команды.


3

Я использую скрипт под названием, sgeditкоторый наследует пользовательские настройки для шрифта, вкладок и расширений. Используется sudo -H geditвместо gksu geditстабильности в среде GUI. Он запрашивает пароль.

Есть sudoунаследовать учетной записи пользователя geditнастройки

sgedit 80 колонка правая слайд.gif

В этом примере пользовательские настройки для имени шрифта, размера шрифта, остановок табуляции, преобразования табуляции в пробелы, выделения столбца 80 и ползунка правой стороны миниатюр были унаследованы sudo.

С обычным sudo -H geditвы не можете сделать или сохранить эти параметры конфигурации. С помощью скрипта ниже sgeditнастройки наследуются от вашей учетной записи пользователя.

Этот скрипт также решает проблемы « gksuплохо и не установлено по умолчанию» и « pkexecсложно настроить».


Задний план

Меня мучила одна и та же проблема годами. В эти выходные проект должен был написать sgeditсценарий:

  • Звонить используя sgedit filename1 filename2...
  • Получает пользовательские настройки gedit для табуляции, шрифтов, переноса строк и т. Д.
  • Повышает уровень, чтобы sudo -Hсохранить владение файлом, получая полномочия root.
  • Запрашивает пароль, если истекло время последнего sudo.
  • Получает настройки gedit sudo
  • Сравнивает различия между настройками пользователя и sudo gedit
  • Запускает gsettings setтолько различия (уменьшает 174 setкоманды до дюжины или меньше. В следующий раз, возможно, будет выполнено только одно или два изменения, но чаще всего ни одного.
  • Вызывает gedit в качестве фоновой задачи, так что подсказка терминала появляется снова немедленно.

Bash скрипт sgedit

#!/bin/bash

# NAME: sgedit
# PATH: /mnt/e/bin
# DESC: Run gedit as sudo using $USER preferences
# DATE: June 17, 2018.

# Must not prefix with sudo when calling script
if [[ $(id -u) == 0 ]]; then
    zenity --error --text "You cannot call this script using sudo. Aborting."
    exit 99
fi

# Get user preferences before elevating to sudo
gsettings list-recursively | grep -i gedit | grep -v history |
    grep -v docinfo |
    grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings

sudoFunc () {
    # Must be running as sudo
    if [[ $(id -u) != 0 ]]; then
        zenity --error --text "Sudo password authentication failed. Aborting."
        exit 99
    fi

    # Get sudo's gedit preferences
    gsettings list-recursively | grep -i gedit | grep -v history |
        grep -v docinfo |
        grep -v virtual-root | grep -v state.window > /tmp/gedit.gsettings.root
    diff /tmp/gedit.gsettings.root /tmp/gedit.gsettings | grep '>' > /tmp/gedit.gsettings.diff
    sed -i 's/>/gsettings set/g; s/uint32 //g' /tmp/gedit.gsettings.diff
    chmod +x /tmp/gedit.gsettings.diff
    bash -x /tmp/gedit.gsettings.diff  # Display override setting to terminal
    nohup gedit $@ &>/dev/null &
}

FUNC=$(declare -f sudoFunc)
sudo -H bash -c "$FUNC; sudoFunc $*;"

домоводство

Скопируйте приведенный выше скрипт bash в новый файл с именем sgedit. Я рекомендую поместить его в вашем $HOME/binкаталоге, то есть /home/YOURNAME/bin. Возможно, вам придется сначала создать каталог.

Пометьте файл как исполняемый файл, используя:

chmod a+x ~/sgedit

Примечание ~является ярлыком для /home/YOURNAME.


0

Ubuntu 18.04: для некоторых программ установки и других нужно, чтобы gksudo или gksu были доступны с тем же именем. Чтобы сделать эти работы:

Установите версию GNOME ssh-askpass. Без этого диалоговое окно пароля может быть скрыто за другим окном:

sudo apt-get install ssh-askpass-gnome

Создать новый файл my-gksudo.sh:

sudo -H gedit /etc/profile.d/my-gksudo.sh

содержимое файла:

export SUDO_ASKPASS=/usr/bin/ssh-askpass

Создайте новые файлы gksudo и gksu с одинаковым содержимым:

sudo -H gedit /usr/bin/gksudo

а также

sudo -H gedit /usr/bin/gksu

содержимое файла для обоих:

sudo -A $@

Сделайте gksudo и gksu исполняемыми:

sudo chmod +x /usr/bin/gksudo

А также

sudo chmod +x /usr/bin/gksu

Перезагрузите компьютер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.