web-dev-qa-db-fra.com

J'ai besoin d'un équivalent de gksu en 18.04

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.

14
pastim

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

7
Gabriel Sandoval

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.

1. Réinstallez 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.

2. Utilisez pkexec

En tant que solution (espérons-le) à long terme, j'ai réussi à faire fonctionner pkexec pour les outils dont j'ai besoin.

  1. 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.

  2. 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.

  3. 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…

5
pastim

Nautilus Admin (nautilus-admin) est une simple extension Python pour le gestionnaire de fichiers Nautilus qui ajoute des actions administratives au menu contextuel:

  • Ouvrir en tant qu'administrateur: ouvre un dossier dans une nouvelle fenêtre Nautilus s'exécutant avec des privilèges d'administrateur (root).
  • Editer en tant qu'administrateur: ouvre un fichier dans une fenêtre Gedit s'exécutant avec des privilèges d'administrateur (root).

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.

4
karel

J'utilise un script appelé sgeditqui 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.

Avez-Sudohériter de votre compte d'utilisateur geditsettings

sgedit 80 column right slider.gif

Dans 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 Sudoname__.

Avec Sudo -H gedit, vous ne pouvez ni définir ni enregistrer ces paramètres de configuration. Avec le script ci-dessous sgeditname__, les paramètres sont hérités de votre compte d'utilisateur.

Ce script adresse également les problèmes "gksuest incorrect et non installé par défaut" et "pkexecest difficile à configurer".


Contexte

Je suis harcelé par le même problème depuis des années. Le projet de ce week-end consistait à écrire le script sgeditname__:

  • Appelez en utilisant sgedit filename1 filename2...
  • Obtient les paramètres gedit de l'utilisateur pour les tabulations, les polices, le retour à la ligne, etc.
  • Élève à Sudo -H pour préserver la propriété du fichier tout en obtenant les pouvoirs de la racine.
  • Demande le mot de passe si le dernier Sudo a expiré.
  • Obtient les paramètres gedit de Sudo
  • Compare les différences entre les paramètres utilisateur et sudo gedit
  • Exécute 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.
  • Appelle gedit en tâche de fond de sorte que l'invite du terminal réapparaisse immédiatement.

Script Bash sgeditname__

#!/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 $*;"

Ménagère

Copiez le script bash ci-dessus dans un nouveau fichier appelé sgeditname__. 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.

2
WinEunuuchs2Unix