web-dev-qa-db-fra.com

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

Il est déconseillé d'utiliser Sudo avec une application graphique telle que gedit, comme décrit sur ce lien . En conséquence, j'ai eu tendance à utiliser vim avec Sudo.

Récemment, j'ai remarqué que mon ~/.viminfo appartenait à root sur une nouvelle installation de buntu 16.04 (Xenial Xerus). Je me suis donc demandé si même Vim était considéré comme étant graphique ou s'il y avait un autre problème avec invoquer Sudo vim. Après avoir changé de propriétaire pour moi-même via:

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

et ensuite, en exécutant Sudo vim, je n'ai pas pu avoir ~/.viminfo appartenant à root. Cependant, je suis certain qu’il appartenait récemment à root.

Est-il déconseillé d'appeler Sudo vim?

24
H2ONaCl

Oui, c'est sécuritaire.

Le problème avec Sudo gedit est dû au fait que les applications graphiques utilisent certains fichiers, tels que ~/.cache/dconf, et après que geditsoit élevé, ce fichier appartient à la racine. Eh bien, ce fichier contient des paramètres spécifiques à l'utilisateur pour les applications à interface graphique, y compris le bureau. Par conséquent, 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 fichiers de données récents de l'utilisateur recently-used.xbel sont également affectés.

D'autre part, Vim n'a pas ce problème. Il n'utilise aucune base de données liée à l'interface graphique et ne place rien dans recently-used.xbel. Il a été créé uniquement pour la console, bien que gVim existe également. En fait, sur certains systèmes, Vim est votre seul choix d’éditeur. Donc, il est plus sûr que gedit en vertu de ne pas causer les mêmes problèmes. Vous êtes toujours en train d’éditer en tant que root dans les deux cas, vous risqueriez donc d’être gêné par une édition incorrecte.

Selon cet article de blog :

La première fois que vous utilisez vim, le fichier ~/.viminfo est créé et si vous utilisez Sudo vim la première fois que vous utilisez vim après l'avoir installé sur un nouveau système, les autorisations sur ~/.viminfo auront 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, mais chownle fichier à vous-même.

Voir également:

22

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

  1. Des copies temporaires sont créées des fichiers à modifier 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 stratégie sudoers utilise les variables d'environnement Sudo_EDITOR, VISUAL et EDITOR (dans cet ordre). Si aucun des Sudo_EDITOR, VISUAL ou EDITOR n'est défini, le premier programme répertorié dans l'éditeur sudoers(5) est utilisé.

  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 bien avec vim (c'est ce que je fais généralement) et j'imagine que cela vous permettrait également d'utiliser gedit. Il y a certaines restrictions de sécurité .

14
GKFX

Le lien est très ancien (2013). Il recommande d'utiliser gksudo ou gksu pour les applications graphiques, mais ces deux applications deviennent obsolètes. Plus tard, la réponse acceptée suggère également Sudo -H cependant.

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

Sudo -H gedit /path/to/filename

Le seul problème reste que Sudo ne possède pas de profil pour les paramètres de tabulation, les extensions, le retour à la ligne Word, le nom de la police, la taille de la police, etc. Vous pouvez en hériter de votre profil utilisateur à l'aide d'un script d'encapsulation comme ceci: Comment synchroniser mon root gedit avec les préférences de mon utilisateur?

2
WinEunuuchs2Unix

Oui, il est prudent d'utiliser Sudo vim. Les problèmes que je rencontre sont

  • Devoir quitter le fichier et rouvrir avec Sudo vim pour pouvoir le modifier.

  • Le nom racine vimrc étant celui par défaut, et non mon contenu utile personnalisé.

Voici une fonction que vous pouvez mettre dans votre bashrc pour permettre à vim de procéder 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
}
2
jeremysprofile

C'est bien d'utiliser vi comme racine. Vous aurez parfois besoin d'éditer un fichier qui nécessite des privilèges Sudo ou root, comme changer votre fichier d'interface réseau ou peut-être éditer votre fichier de configuration sshd. L'utilisation de root pour les éléments graphiques est mauvaise car les utilisateurs se connecteraient à IRC ou navigueraient sur le Web en tant que root. S'ils attrapent un virus, ils auront un accès root complet.

1
The Letter M

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 ou non sûr de s’exécuter en tant que root dépend de la question de savoir si vous faites confiance à ces développeurs de plug-in (ou contributeurs à leur projet) pour ne pas posséder votre système à sa base.

Vim est généralement approuvé par les responsables de paquet dans toutes les distributions Linux, il est donc facile de faire confiance. Cependant, les plugins vim sont généralement installés directement à partir du dépôt GitHub et ont généralement beaucoup moins d'audits d'utilisateurs (peut-être nuls). En d'autres termes, il n'y a pas de processus de validation avec eux.

Si vous ne chargez pas de plug-in alors que vous êtes à la racine, j’imagine que l’exécution en tant que root dépend du fait que vous accordiez ou non la confiance aux développeurs vim. Vous pouvez toutefois éviter de leur faire confiance en utilisant sudoedit, qui est créé par les mêmes développeurs de Sudo, des personnes à qui nous avons déjà confié un accès root. GKFX et NieDzejkob ont déjà expliqué pourquoi le sudoedit est idéal. Outre le fait que vous n'avez pas besoin de confier l'accès root à une autre personne, à l'exception des développeurs de Sudo, vous pouvez charger tous les plug-ins auxquels vous avez déjà fait confiance avec votre compte d'utilisateur normal.

0
JoL