Vim est-il sûr à utiliser en combinaison avec sudo?

25

Il n'est pas conseillé de l'utiliser sudoavec une application graphique comme gedit, comme décrit sur ce lien . En conséquence, j'ai eu tendance à utiliser vimavec sudo.

Récemment, j'ai remarqué que mon ~/.viminfoappartenait à root sur une installation assez récente d' Ubuntu 16.04 (Xenial Xerus), donc je me suis demandé si même Vim est considéré comme graphique ou s'il y a un autre problème avec l'invocation sudo vim. Après avoir changé de propriétaire pour moi via:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

et en cours d'exécution, sudo vimje n'ai pas pu avoir la ~/.viminfo propriété de root. Cependant, je suis certain qu'il appartenait récemment à root.

Est-il déconseillé d'invoquer sudo vim?

H2ONaCl
la source
1
Vous pouvez également utiliser vim sans sudo et lorsqu'il s'agit d'enregistrer le fichier, vous pouvez utiliser:w !sudo tee %
ChatterOne

Réponses:

22

Oui, c'est sûr.

Le problème avec sudo geditest que les applications GUI utilisent certains fichiers, tels que ~/.cache/dconf, et après une élévation, geditce fichier devient la propriété de la racine. Eh bien, ce fichier particulier contient des paramètres spécifiques à l'utilisateur pour les applications GUI, y compris le bureau, donc si le système ne peut pas lire ces paramètres - c'est mauvais. IIRC un utilisateur ne peut pas démarrer un bureau particulier. Les données des fichiers récents de l'utilisateur sont recently-used.xbelégalement affectées.

D'un autre côté, Vim n'a pas ce problème. Il n'utilise aucune base de données liée à l'interface graphique et n'y met rien recently-used.xbel. Il a été créé à des fins de console uniquement, bien que gVim existe également. En fait, sur certains systèmes, Vim est votre seul choix d'éditeur. Il est donc plus sûr que gedit de ne pas causer les mêmes problèmes. Vous modifiez toujours en tant que root dans les deux cas, vous pouvez donc provoquer des problèmes avec une modification incorrecte.

Selon ce billet de blog :

La première fois que vous utilisez vim, le fichier ~/.viminfoest créé et si vous utilisez sudo vimla première fois vim après l'avoir installé sur un nouveau système, les autorisations sur ~/.viminfoauront le propriétaire défini sur root au lieu de l'utilisateur par défaut.

Bien que l'auteur souligne que cela peut entraîner des problèmes, il n'y a rien de complexe - juste chownle fichier pour vous.

Voir également:

Sergiy Kolodyazhnyy
la source
6
Notez que vim n'est pas sûr sur un système multi-utilisateur où vous essayez de limiter les autorisations administratives des autres utilisateurs. Un utilisateur peut utiliser sudo vimpour obtenir une copie de vim en cours d'exécution en tant que root, puis :!/bin/shpour obtenir un shell root.
Mark
3
@Mark et qu'est-ce qui empêche l'utilisateur de faire simplement sudo /bin/sh? En pratique, si l'utilisateur dispose déjà d'un accès root, il n'a pas besoin d'utiliser des astuces élaborées.
Sergiy Kolodyazhnyy
7
Le /etc/sudoersdossier. Vous n'avez pas besoin de le faire %wheel ALL=(ALL) ALL- la sudoconfiguration permet bien plus de nuances que cela.
Mark
1
@Mark OK, bon point - tous les systèmes n'ont pas les mêmes paramètres.
Sergiy Kolodyazhnyy
Uhm ... L'autorisation changera-t-elle même si le fichier existe? Supposons que je pirate un compte d'utilisateur non administrateur, mais je ne connais pas son mot de passe (j'ai peut-être réussi à ouvrir un shell). Est-ce à dire que je peux copier /bin/bashsur ~/.viminfo, mettre un setuid dessus et attendre que l'utilisateur s'exécute sudo vimpour qu'il soit tronqué à root?
ChatterOne
15

Il est également possible d'utiliser sudoeditpour y parvenir; il ouvre une copie temporaire du fichier dans votre éditeur, votre éditeur s'exécutant comme vous. Depuis la page de manuel :

  1. Des copies temporaires sont faites des fichiers à éditer avec le propriétaire défini sur l'utilisateur appelant.

  2. L'éditeur spécifié par la stratégie est exécuté pour modifier les fichiers temporaires. La politique sudoers utilise les SUDO_EDITOR, VISUALet les EDITORvariables d'environnement (dans cet ordre). Si aucun d' entre SUDO_EDITOR, VISUALou EDITORsont fixés, le premier programme répertorié dans l'éditeur sudoers(5)option est utilisée.

  3. S'ils ont été modifiés, les fichiers temporaires sont recopiés à leur emplacement d'origine et les versions temporaires sont supprimées.

Cela fonctionne très bien avec vim (c'est ce que je fais généralement) et j'imagine que cela vous permettrait également d'utiliser gedit. Il existe des restrictions de sécurité .

GKFX
la source
4
C'est bien mieux si vous préférez utiliser votre propre configuration vim au lieu de root.
NieDzejkob
2
Ceci est également plus sûr si vous ne voulez pas exécuter du code de plug-in aléatoire en tant que root (cependant, les plug-ins s'exécutant car vous pouvez également faire beaucoup de dégâts s'ils sont malveillants, alors n'utilisez pas de plug-ins auxquels vous ne faites pas confiance première place).
Kevin
2

Le lien est très ancien (2013). Il recommande d'utiliser gksudoou gksupour des applications graphiques, mais les deux deviennent obsolètes. Plus tard, la réponse acceptée suggère également sudo -H.

Le consensus général dans la communauté Ask Ubuntu récemment est d'utiliser:

sudo -H gedit /path/to/filename

Les restes seul problème qui sudone disposent pas d' un profil pour les paramètres de l' onglet, extensions, retour à la ligne, nom de la police, taille de la police, etc. Vous pouvez hériter ces de votre profil d'utilisateur mais avec un script d'emballage comme celui - ci: Comment puis - je synchroniser ma racine gedit avec les préférences de mon utilisateur gedit?

WinEunuuchs2Unix
la source
2

Oui, son utilisation est sûre sudo vim. Les problèmes que je rencontre sont

  • Devoir quitter le fichier et rouvrir avec sudo vimpour pouvoir le modifier.

  • Avoir la racine vimrcétant celle par défaut, pas mes trucs utiles personnalisés.

Voici une fonction que vous pouvez mettre dans votre bashrcpour permettre à vim de lancer automatiquement sudo si vous ne pouvez pas éditer le fichier normalement.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}
jeremysprofile
la source
Sur Ubuntu sudopar défaut préserve la $HOMEvariable d'environnement, ce qui signifie que sudo vim va utiliser votre personnalisé Vimrc, et également des moyens qui sudo vimvont changer la propriété ~/.viminfoà la racine: racine et parce que vous certains inconvénients.
Marius Gedminas
La réponse acceptée n'est pas d'accord avec vous viminfo.
jeremysprofile
1

C'est bien d'utiliser vi en tant que root. Il y aura des moments où vous devrez modifier un fichier qui nécessite des privilèges sudo ou root, comme changer votre fichier d'interface réseau, ou peut-être modifier votre fichier de configuration sshd. L'utilisation de root pour des éléments graphiques est mauvaise car les gens se connectent à IRC ou naviguent sur le Web en tant que root. S'ils obtenaient un virus en le faisant, il aurait un accès root complet.

La lettre M
la source
2
Il existe au moins une exception spécifique pour l'utilisation de vi en tant que root. Le fichier qui contrôle le chemin sudo (/ etc / sudoers) ne doit jamais être édité avec vi. Pour ce fichier, la commande visudo doit être utilisée. Vous ne spécifiez même pas quel fichier est en cours d'édition, c'est juste le cas spécial.
user628388
1

Quelque chose qui n'a pas été mentionné dans les autres réponses est que l'exécution de vim avec root donnera des privilèges root à tous les plugins que vous avez installés. Ainsi, la question de savoir s'il est sûr ou non de s'exécuter en tant que root dépend de si vous faites confiance à ces développeurs de plugins (ou contributeurs à leur projet) pour ne pas posséder votre système dans son cœur.

Vim est généralement contrôlé par les mainteneurs de paquets dans toutes les distributions Linux, il est donc facile de faire confiance. Cependant, les plugins vim sont généralement installés directement à partir des dépôts GitHub et ont généralement beaucoup moins d'audits d'utilisateurs (peut-être zéro). En d'autres termes, il n'y a pas de processus de vérification avec eux.

Si vous ne chargez pas de plugins en root, alors je suppose que l'exécution en tant que root dépend de la confiance que vous accordez aux développeurs vim. Vous pouvez cependant éviter d'avoir à leur faire confiance en utilisant sudoedit qui est fabriqué par les mêmes développeurs de sudo, des personnes auxquelles nous avons déjà fait confiance avec un accès root de toute façon. GKFX et NieDzejkob ont déjà expliqué pourquoi sudoedit est idéal. Outre le fait que vous n'avez pas à faire confiance à root pour accéder à quelqu'un d'autre que les développeurs de sudo, vous pouvez charger tous les plugins auxquels vous avez déjà fait confiance avec votre compte d'utilisateur normal.

JoL
la source
Cette discussion sur le manque de confiance envers les différents développeurs semble un peu incomplète; si vous sudoedit /etc/apt/sources.listavec un plugin compromis installé, il peut probablement insérer un référentiel malveillant et accéder à la racine la prochaine fois de toute façon. Je suis sûr qu'il existe une longue liste de fichiers protégés par racine pour lesquels quelque chose de similaire s'applique. Et bien sûr, tous les virus ne nécessitent pas de racine; on pourrait saisir vos coordonnées bancaires avec pas plus qu'une extension de navigateur.
GKFX