J'ai lu beaucoup de discussions sur le fait que gksu est supprimé de nombreuses versions de Linux, y compris Ubuntu 18.04. Beaucoup disent que gksu est une abomination et qu'aucun utilisateur ne devrait avoir besoin d'utiliser quoi que ce soit de la sorte. J'ai 2 exemples où, autant que je sache, je dois avoir quelque chose qui me permet de fonctionner en tant que root (pas seulement pour l'édition de fichiers).
Premièrement, je n'ai besoin de démarrer mysql qu'après l'ouverture d'un dossier chiffré avec la commande (GUI). Cela signifie avoir un script exécuté par le système de cryptage qui démarre le service mysql. Cela doit être fait en tant que root, j'utilise donc gksu dans ce script de démarrage qui me demande un mot de passe. Sinon, comment puis-je démarrer un service à partir d'un système graphique?
J'exécute également les sauvegardes du système ubuntu en tant que root, sinon de nombreux fichiers système ne peuvent pas être sauvegardés. Le fichier desktop utilise donc gksu pour démarrer la sauvegarde.
pkexec semble compliqué, nécessitant des fichiers de règles. Est-ce la seule alternative, et si oui, pourquoi est-ce plus sûr?
D'autres réponses à des questions similaires ne semblent pas aborder les problèmes individuels que les gens ont maintenant, à savoir que le gksu n'est plus (ou plus difficile à trouver). Je pense que de telles questions posées par des utilisateurs non experts bénéficieraient de réponses plus détaillées. J'en ai maintenant quelques-uns et j'aimerais donc répondre à ma propre question.
J'ai trouvé cette commande
alias gksu='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
dans la page ci-dessous:
https://sites.google.com/site/installationubuntu/home/ubuntu-17-10/alternatives-for-gksu-and-gksudo
Je sais qu'il y aurait des réponses à cela ailleurs, je n'ai trouvé aucune de ces réponses suffisamment claire et simple pour que je puisse résoudre ce problème. J'ai donc fouillé dans de nombreux endroits et je l'ai trouvé. Je ne comprends toujours pas pourquoi la communauté Linux a décidé de rendre la vie si difficile pour nous, simples utilisateurs d’ordinateurs de bureau (et j’ai essayé de comprendre de nombreuses explications), mais c’est la vie. J'utilise l'interface graphique pour à peu près tout, en n'utilisant que la fenêtre du terminal lorsque cela est nécessaire. Autant que je sache, les solutions utilisant les options de Sudo n’aident en rien. J'ai donc des fichiers .desktop et des scripts qui effectuent tous les travaux que j'utilise régulièrement.
Il y a deux solutions de base.
gksu
Cette solution peut ou peut ne pas durer. Les techniciens anti-gksu peuvent trouver un moyen de l'arrêter. Mais entre-temps, téléchargez 2 fichiers .deb à partir de libgksu (x64) et gksu (x64) . Installez libgksu2 puis gksu en utilisant gdebi ou l’outil d’installation de votre choix. Cela a fonctionné pour moi.
pkexec
En tant que solution (espérons-le) à long terme, j'ai réussi à faire fonctionner pkexec pour les outils dont j'ai besoin.
Pour démarrer un service à partir d'un script. Il s'avère que ni gksu ni pkexec n'est nécessaire. Juste start service xyz
et il vous demandera votre mot de passe.
Pour éditer les fichiers racine, ou pour ouvrir Nautilus en tant que root, voir Comment exécuter Gedit et Nautilus en tant que racine avec pkexec à la place de gksu - Web Upd8 . Cela fournit deux fichiers ‘polkit’ pour pkexec, qui vous permettent d’utiliser un script contenant pkexec gedit
pour éditer un fichier racine, et de la même manière pour nautilus. Les instructions sont toutes sur cette page Web. J'utilise maintenant ‘filemanager-actions’ pour fournir des actions par clic droit permettant d’exécuter gedit ou Nautilus en tant que root.
Je lance deja-dup en tant que root pour les sauvegardes du système principal. Je le fais rarement, à l’exception de/home (pour/home, j’effectue des sauvegardes fréquentes ne nécessitant pas d’accès root). Pour que cela fonctionne, j'ai pris une copie du fichier utilisé à l'étape 2 pour gedit et l'ai modifiée pour deja-dup. Je ne comprends pas vraiment le contenu, mais cela fonctionne, aussi bien pour les sauvegardes que pour la restauration de fichiers, en utilisant pkexec backup
dans un script lancé à partir d'un fichier .desktop. J'ai ajouté ce nouveau fichier à /usr/share/polkit-1/actions
contenant:
<?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>
Notez qu'il existe un autre fichier deja-dup dans ce répertoire, qui prétend aider à la restauration de fichiers, mais je ne pouvais pas le faire fonctionner. Ce nouveau fichier doit avoir un nom unique, tel que org.gnome.DejaDupNew.policy
.
Je suis, pour l'instant, en cours d'exécution sans gksu. Je vais essayer de continuer…
Nautilus Admin (nautilus-admin) est une simple extension Python pour le gestionnaire de fichiers Nautilus qui ajoute des actions administratives au menu contextuel:
Pour installer Nautilus Admin dans toutes les versions actuellement prises en charge d’Ubuntu, ouvrez le terminal et tapez:
Sudo apt install nautilus-admin
J'ai testé toutes les alternatives à gksu dans 18.04 pour d'autres applications que les fichiers et Gedit, et celle qui semble fonctionner le plus régulièrement est la suivante:
Sudo -H nom de l'application &>/dev/null
pkexec
est le meilleur remplaçant pour gksu lorsqu'il fonctionne car il offre une sécurité accrue, mais il est très incohérent d'une application à l'autre et peut provoquer le blocage de certaines applications. Sudo -i
est inutilement difficile à gérer car il élève vos privilèges en tant que root pour une période prolongée, lorsque vous devez uniquement être root pour exécuter une seule commande.
J'utilise un script appelé sgedit
qui hérite des préférences de l'utilisateur pour les polices, les onglets et les extensions. Il utilise Sudo -H gedit
au lieu de gksu gedit
pour la stabilité dans l'environnement graphique. Il demande un mot de passe.
Sudo
hériter de votre compte d'utilisateur gedit
settingsDans cet exemple, les paramètres utilisateur pour le nom de police, la taille de la police, les tabulations, la conversion de tabulations en espaces, la mise en surbrillance des 80 colonnes et la barre de curseur de vignette située à droite ont été hérités de Sudo
name__.
Avec Sudo -H gedit
, vous ne pouvez ni définir ni enregistrer ces paramètres de configuration. Avec le script ci-dessous sgedit
name__, les paramètres sont hérités de votre compte d'utilisateur.
Ce script adresse également les problèmes "gksu
est incorrect et non installé par défaut" et "pkexec
est difficile à configurer".
Je suis harcelé par le même problème depuis des années. Le projet de ce week-end consistait à écrire le script sgedit
name__:
sgedit filename1 filename2...
Sudo -H
pour préserver la propriété du fichier tout en obtenant les pouvoirs de la racine.gsettings set
uniquement sur les différences (réduit 174 commandes set
à une douzaine ou moins. La prochaine fois, il exécutera peut-être une ou deux modifications, mais souvent aucune.sgedit
name__#!/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 &
Nohup gedit -g 1300x840+1+1220 "$@" &>/dev/null &
# Set the X geometry window size (WIDTHxHEIGHT+X+Y).
}
FUNC=$(declare -f sudoFunc)
Sudo -H bash -c "$FUNC; sudoFunc $*;"
Copiez le script bash ci-dessus dans un nouveau fichier appelé sgedit
name__. Je vous recommande de le placer dans votre répertoire $HOME/bin
, c.-à-d. /home/YOURNAME/bin
. Vous devrez peut-être d'abord créer le répertoire.
Marquez le fichier comme exécutable en utilisant:
chmod a+x ~/sgedit
Remarque ~
est un raccourci pour /home/YOURNAME
.