Я считал много потоков о gksu, удаляемом из многих ароматов Linux, включая человечность 18.04. Многие заявляют, что gksu является отвращением, и никакой пользователь никогда не должен должен быть использовать что-либо как он. У меня есть 2 примера, где, насколько я знаю, у меня должно быть что-то, что позволяет мне работать как корень (не только для редактирования файлов).
Во-первых, у меня есть потребность запустить mysql только после того, как зашифрованная папка будет открыта на команде (GUI). Это означает запускать скрипт системой шифрования, которая запускает mysql сервис. Это должно быть сделано как корень, таким образом, я использую gksu в том сценарии запуска, который просит у меня пароль. Как еще я могу запустить сервис с системы GUI?
Я также выполняю системные резервные копии человечности как корень, иначе много системных файлов не могут быть сохранены. Таким образом, файл на рабочем столе использует gksu для запуска резервного копирования.
pkexec выглядит сложным, нуждаясь в файлах политики. Это - единственная альтернатива, и если так, почему она так более безопасна?
Другие ответы на подобные вопросы, кажется, не решают отдельные проблемы, которые имеют люди теперь, когда gksu больше не (или тяжелее найти...). Я думаю, что такие вопросы от пользователей неспециалиста извлекли бы выгоду из более подробных ответов. Я теперь имею некоторых и так хотел бы ответить на свой собственный вопрос.
Nautilus Admin ( nautilus-admin ) - это простое расширение Python для файлового менеджера Nautilus, которое добавляет некоторые административные действия в контекстное меню:
Чтобы установить Nautilus Admin во всех поддерживаемых в настоящее время версиях Ubuntu, откройте терминал и введите:
sudo apt install nautilus-admin
Я проверил все альтернативы gksu в 18.04 для других приложений, помимо файлов и Gedit, и тот, который, кажется, работает наиболее стабильно:
sudo -H appname &>/dev/null
pkexec
- лучшая замена для gksu, когда он работает, потому что он обеспечивает более высокий уровень безопасности, но он очень непоследователен для разных приложений (например, он не работает с Gedit) и может вызывать сбой в некоторых приложениях. sudo -i
излишне сложно управлять, потому что он повышает ваши привилегии до суперпользователя на продолжительный период времени, когда вам нужно быть суперпользователем только для выполнения одной команды.
Я знаю, что есть ответы на этот вопрос в другом месте, но я не нашел ни одного из них достаточно ясным и простым для решения этой проблемы. Так что я покопался во многих местах и придумал это. Я до сих пор не понимаю, почему сообщество Linux решило так усложнить жизнь нам, простым пользователям настольных компьютеров (и я пытался понять множество объяснений), но это жизнь. Я использую графический интерфейс практически для всего, используя окно терминала только при необходимости. Насколько я могу судить, решения с использованием параметров sudo в этом не помогают. Итак, у меня есть файлы и сценарии .desktop
, которые выполняют все задачи, которые я регулярно использую.
Есть два основных решения.
gksu
. Это решение может длиться или длиться недолго. Специалисты по борьбе с гксу могут найти способ остановить это. А пока загрузите 2 файла .deb
из libgksu (x64) и gksu (x64) . Установите libgksu2, а затем gksu, используя gdebi или любой другой инструмент установки, который вам нравится. У меня это сработало.
pkexec
В качестве (надеюсь) долгосрочного решения мне удалось заставить pkexec работать с необходимыми мне инструментами.
Для запуска службы из сценария. Оказывается, ни gksu, ни pkexec не нужны. Просто запустите службу xyz
, и она запросит ваш пароль.
Чтобы отредактировать корневые файлы или открыть nautilus от имени пользователя root, см. Как запустить Gedit и Nautilus как root с pkexec вместо gksu - Web Upd8 . Это предоставляет два файла «polkit» для pkexec, которые позволяют вам использовать сценарий, содержащий pkexec gedit
, для редактирования корневого файла, и аналогично для nautilus. Все инструкции находятся на этой веб-странице. Теперь я использую «filemanager-actions», чтобы предоставить действия по щелчку правой кнопкой мыши для запуска gedit или nautilus от имени пользователя root.
Я запускаю 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"?>
deja-dup
<действие id = "org.gnome.DejaDup">
Резервное копирование
Для резервного копирования системных файлов требуются права
<по умолчанию>
нет
auth_admin
auth_admin
/ usr / bin / deja-dup
true
Обратите внимание, что в этом каталоге есть еще один файл deja-dup, который утверждает, что помогает с восстановлением файлов, но мне не удалось заставить его работать. Этот новый файл должен иметь уникальное имя, например org.gnome.DejaDupNew.policy
.
На данный момент я работаю без gksu. Я постараюсь продолжить…
Я нашел эту команду
alias gksu='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
на странице ниже:
https://sites.google.com/site/installationubuntu/home/ubuntu-17-10/alternatives-for-gksu-and-gksudo
После выполнения команды alias:
gksu /path/to/script.sh
Она запросит пароль, как обычно.
Вам нужно добавить псевдоним в конец ~/.bashrc
, чтобы команда gksu оставалась постоянной при перезагрузке.
Я использую сценарий называется sgedit
, который наследует пользовательские настройки шрифта, вкладок и расширений. Он использует sudo -H gedit
вместо gksu gedit
для обеспечения стабильности в среде графического интерфейса пользователя. Он запрашивает пароль.
sudo
унаследует вашу учетную запись пользователя gedit
settings В этом примере пользовательские настройки для имени шрифта, размера шрифта, позиций табуляции, преобразования вкладок в пробелы, выделение 80 столбцов и ползунок с ползунком справа унаследованы sudo
.
С обычным sudo -H gedit
вы не можете ни изменять, ни сохранять эти параметры конфигурации. В приведенном ниже сценарии sgedit
настройки наследуются от вашей учетной записи.
Этот сценарий также обращается к « gksu
неисправен и не установлен по умолчанию» и « pkexec
"трудно установить" проблемы.
Меня уже много лет мучит одна и та же проблема. На этих выходных был задан проект по написанию сценария sgedit
:
sgedit filename1 filename2 ...
sudo -H
для сохранения права собственности на файл при получении полномочий root. набор настроек
только для различий (уменьшает 174 набор
команд до дюжина или меньше. В следующий раз, возможно, будет только одно или два изменения, но часто не будет. 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 / ВАШЕ ИМЯ
.
Ubuntu 18.04: Некоторые программы установки и другие требуют наличия gksudo или gksu с тем же именем. Чтобы это заработало:
Установите версию ssh-askpass
для gnome. Без этого диалоговое окно пароля может быть скрыто за другим окном:
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
Перезагрузите компьютер.
XTerm, вероятно, лучший выбор.
xterm -e "sudo -b gedit /etc/fstab && sleep 1"
или
xterm -e su -c "gedit /etc/fstab &"
Последний предполагает, что учетная запись root включена и имеет установленный пароль.
-e сообщает XTerm открыть запуск одной команды, а -c указывает su выполнить одну команду от имени пользователя root. В первом варианте -b отправляет приложение в фоновый режим после аутентификации, которая действует таким же образом во втором варианте, с и . Это необходимо, поскольку XTerm останется открытым, если приложение находится на переднем плане. Команда sleep 1 требуется, потому что по неизвестной причине приложение не запустится.
Если первая альтернатива не сработает, используйте следующую.
xterm -e sudo su -c "gedit /etc/fstab &"
Вот псевдоним, похожий на gksu.
gksu(){
xterm -e "sudo -b $* && sleep 1"
}
Вставьте его в .bashrc . Обязательно перезапустите его перед использованием.
Можно также поместить его в двоичный каталог, чтобы команда стала общесистемной.
cd /usr/local/bin && sudo su -c "echo 'xterm -e \"sudo -b \$* && sleep 1\"' > gksu && chmod 0755 gksu && ln -s gksu gksudo" && cd ~
ЧТО НАСЧЕТ УСТАНОВКИ (УСТАРЕЛО) GKSU BACK?
Для тех, кто задается вопросом, можно ли установить gksu
, ответ будет возможно да : хотя его пакеты DEB устарели с ~ 2015 г. 9 декабря 2020 г. они все еще были доступны можно скачать на Launchpad. Следующее решение работало на 64-битной (AKA amd64 ) версии XUbuntu 18.04 (обновленной с 16.04) и 20.04 (новая установка), которую я использую в настоящее время.
КРАТКО
Я загрузил эти 7 пакетов DEB:
... а затем установите их с помощью gdebi
: диспетчера пакетов DEB, который не только устанавливает пакеты DEB, но также проверяет и решает (т.е. устанавливает) их зависимости. Обязательно сначала установить пакет multiarch-support , затем установить пакет libgcrypt11 и так далее (в строгом порядке сверху вниз в списке), пока вы завершите установку последнего пакета (т.е. пакета gksu ).
ОБЪЯСНЕНИЕ УСТАНОВКИ (ГРАФИЧЕСКИЙ СПОСОБ)
Для каждой из 7 ссылок в списке выше щелкните ссылку правой кнопкой мыши, затем выберите Сохранить ссылку как ... а затем сохраните пакет DEB в папке Загрузки
(например, / home / yourname / Downloads
).
Запустите gdebi
в графическом режиме (например, ] gdebi
интерфейс). Если вы не можете найти gdebi
в меню Приложения (обычно оно находится в Системе ), откройте окно эмулятора терминала ( Ctrl ) Alt T обычно помогает), затем введите sudo gdebi-gtk &
и нажмите Введите , введите свой пароль и снова нажмите Введите .
В окне gdebi
щелкните Файл , затем щелкните Открыть ... , затем откройте папку Загрузки
. выберите первый пакет для установки (например, multiarch-support_2.17-93ubuntu4_amd64.deb ), щелкните Открыть , а затем щелкните Установить пакет . Повторите эти шаги для других пакетов (не забудьте соблюдать строгий порядок, указанный в списке выше, сверху вниз). Поэтому последним устанавливаемым пакетом будет gksu_2.0.2-9ubuntu1_amd64.deb .
Как только вы выполните эти 3 простых шага, gksu
будет доступен по адресу меню Приложения .
ОБЪЯСНЕНИЕ УСТАНОВКИ (МЕТОД ТЕРМИНАЛА / ТЕКСТОВОГО РЕЖИМА)
Запустите окно эмулятора терминала, чтобы у вас был доступ к оболочке Linux («командная строка»). Нажатие Ctrl Alt T , скорее всего, поможет.
Введите mkdir ~ / gksu
в окне эмулятора и нажмите Enter . Это создаст папку gksu
в вашей домашней папке (например, / home / yourname / gksu
).
Введите cd ~ / gksu
в окне эмулятора а затем нажмите Введите . Это приведет к тому, что ~ / gksu
(то есть папка gksu
в вашей домашней папке) станет вашим рабочим каталогом (то есть папкой, в которой активен ваш текущий сеанс оболочки, то есть папкой, в которой ваша учетная запись пользователя в настоящее время подключена через окно эмулятора оболочки Linux).
Выберите и скопируйте команду ниже:
wget http://launchpadlibrarian.net/153554150/multiarch-support_2.17-93ubuntu4_amd64.deb; wget http://launchpadlibrarian.net/147472576/libgcrypt11_1.5.0-3ubuntu3_amd64.deb; wget http://launchpadlibrarian.net/141785150/libgnome-keyring-common_3.8.0-2_all.deb; wget http://launchpadlibrarian.net/141785305/libgnome-keyring0_3.8.0-2_amd64.deb; wget http://launchpadlibrarian.net/182650077/libgtop2-10_2.30.0.is.2.30.0-0ubuntu1_amd64.deb; wget http://launchpadlibrarian.net/182741643/libgksu2-0_2.0.13~pre1-6ubuntu7_amd64.deb; wget http://launchpadlibrarian.net/193391454/gksu_2.0.2-9ubuntu1_amd64.deb
Используйте Ctrl Shift V , чтобы вставить указанную выше команду в окно эмулятора, а затем нажмите Enter . Программа wget
затем загрузит все эти 7 необходимых пакетов DEB и поместит их все в ~ / gksu
.
По завершении загрузки выберите и скопируйте эту другую команду:
sudo gdebi -n multiarch-support_2.17-93ubuntu4_amd64.deb; sudo gdebi -n libgcrypt11_1.5.0-3ubuntu3_amd64.deb; sudo gdebi -n libgnome-keyring-common_3.8.0-2_all.deb; sudo gdebi -n libgnome-keyring0_3.8.0-2_amd64.deb; sudo gdebi -n libgtop2-10_2.30.0.is.2.30.0-0ubuntu1_amd64.deb; sudo gdebi -n libgksu2-0_2.0.13 ~ pre1-6ubuntu7_amd64.deb; sudo gdebi -n gksu_2.0.2-9ubuntu1_amd64.deb
Используйте Ctrl Shift V , чтобы вставить указанную выше команду в окно эмулятора, а затем нажмите Enter , затем введите свой пароль и нажмите Enter снова. Для каждого экземпляра команды gdebi
будет установлен соответствующий пакет DEB. -Параметр n
указывает gdebi
автоматически определять зависимости пакетов, поэтому gdebi
не будет задавать вам вопросов: вместо этого он автоматически установит основной пакет, а также автоматически обнаружит, загрузит и установите его случайные зависимости пакета DEB.
Как только вы выполните эти 7 шагов, gksu
будет доступен в вашем меню Приложения .
Незначительное дополнение для тех, кто хочет использовать дополнение gksu в файле рабочего стола для запуска программы WINE от имени администратора. В моем случае целевой программой был Total Commander (прошу прощения у тех, у кого это вызывает сопротивление). Я хотел запустить его от имени администратора из Unity Launcher .
Вот мое решение:
Exec=sh -c "zenity --password --title=\"sudo password prompt\" --timeout=10 2>/d ev/null | sudo -S -H wine \"/root/.wine/drive_c/totalcmd/TOTALCMD.EXE\""
Вам будет предложено ввести пароль, а затем передать его в sudo.
Вот все содержимое файла рабочего стола:
[Desktop Entry] Version=1.0 Type=Application Terminal=false Icon[en_US]=/home/zsolti/MyApps/.icons/Total_commander_Admin64.png Name[en_US]=TotalCommanderAdmin Exec=sh -c "zenity --password --title=\"sudo password prompt\" --timeout=10 2>/d ev/null | sudo -S -H wine \"/root/.wine/drive_c/totalcmd/TOTALCMD.EXE\"" Comment[en_US]=Total Commander Admin Name=TotalCommanderAdmin Comment=Total Commander Admin Icon=/home/zsolti/MyApps/.icons/Total_commander_Admin64.png