VIM: "sudo vim bad_idea"?

20

Un utilisateur irc dans #Vim m'a exhorté à ne pas utiliser Sudo avec Vim comme:

sudo vim bad_idea

Quand je fais des choses dans des endroits comme / var / www /, je ne peux pas écrire sans lui. Donc, ne pas utiliser sudo devient un problème. Bien sûr, je pouvais apporter des modifications à différents emplacements tels que / tmp / puis copier les répertoires dans / var / www. Cependant, je sens un moyen plus simple.

  1. Si vous ne faites pas "sudo Vim", pourquoi?
  2. Si oui à la 1ère question, comment contourner les problèmes pour ne pas utiliser sudo?
Léo Léopold Hertz 준영
la source

Réponses:

35

Je tombe dans la première catégorie: sudo vim /var/www/html/some_filec'est une mauvaise idée; il permet des échappements shell qui ne sont pas enregistrés. Utilisez plutôt sudoedit /var/www/html/some_file; cela a le même effet.

Kevin M
la source
5
Que sont les "échappements shell qui ne sont pas enregistrés"? et pourquoi n'a-t-il pas seulement d'importance dans / var / www?
hasen
6
vim a le pouvoir d'exécuter d'autres commandes sur une ligne de commande. Cependant, comme vim a été démarré via sudo et s'exécute donc en tant que root, n'importe laquelle de ces commandes s'exécutera avec les privilèges root. Ces commandes sont appelées "échappements shell" et ne sont pas enregistrées comme les autres invocations de sudo. Et ce n'est pas limité à seulement / var / www; c'est partout que je l'utilise. J'ai même alias "sudo vi" en "sudoedit" dans mon fichier bashrc.
Kevin M
Je vois ce que vous voulez dire et je veux être d'accord mais clarifier. Nous n'avons aucune idée si ses activités root normales su et sudo sont enregistrées ou non. "sudo vim" permet d'exécuter un sous-shell en tant que root - c'est très précis; dans ce shell, "sudo" ne contrôlera pas ce que root peut et ne peut pas faire.
pbr
3
Kevin, comment avez-vous réussi à alias "sudo vi" à "sudoedit"? Dans le manuel de bash ... "Les caractères /, $,` et = et l'un des métacaractères du shell ou les guillemets répertoriés ci-dessus peuvent ne pas apparaître dans un nom d'alias. " ... l'espace est l'un de ces métacaractères dont il parle.
pbr
9
OK, ce n'est donc pas un alias en soi, mais il a le même effet: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || commande sudo "$ @"; } '
Kevin M
10

Référez-vous à: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% est remplacé par le nom du fichier actuel, vous pouvez donc utiliser:

: w! sudo tee%

hyperslug
la source
Si vous allez utiliser tee, je suggérerais ': w! Sudo tee%> / dev / null' afin que vous ne voyiez pas le fichier entier en écho. J'utilise généralement ': w! Dd of =%' à la place, car il est plus rapide à taper et réalise la même chose. Bien sûr, ce n'est que lorsque j'ai oublié d'utiliser sudoedit / sudo -e.
jamessan
7

vim permet aux utilisateurs d'exécuter des commandes shell arbitraires, par conséquent, de nombreux administrateurs système n'autorisent pas l'utilisation de vim avec sudo.

rvim est inclus avec vim. C'est un vim restreint, qui n'autorise pas les commandes shell. (Ou vous permettre de suspendre vim, pour les mêmes raisons.)

Que vous ayez besoin d'aller à ces extrêmes sur votre propre boîte est discutable.

Richard Hoskins
la source
1
+1. Complètement d'accord. sudo vimpuis entrez :!bashet vous avez un shell en tant que root - exactement pourquoi rvimexiste
dbr
3
En fait, si vous pouvez sudo vim, vous pouvez probablement sudo bashou sudo su -non?
dlamblin
@diamblin Les privilèges peuvent être rassemblés avec des détails plus fins que cela, donc pas nécessairement. C'est pourquoi rvim est nécessaire. "sudo vim" est le même que "sudo su -" à toutes fins utiles. Sur une bitty box Debian où le seul utilisateur est l'administrateur système, tout cela est académique.
Richard Hoskins
Comment Ubuntu gère-t-il ce problème? Sur CentOS se vilance vimmais en tant que root vilance vi. Sur Ubuntu vimest utilisé dans les deux cas et sudo vilance également vim...
cwd
6

Lorsque vous éditez des fichiers de configuration à l'échelle du système, tout va bien --- rappelez-vous toujours que vous êtes root et que vous avez donc tout le pouvoir, et supprimez ces privilèges dès que vous n'en avez plus besoin.

Dans le cas particulier /var/www/, c'est-à-dire les pages du serveur Web, vous voudrez peut-être penser à changer certains propriétaires / groupes / autorisations --- mais si et comment cela dépend en grande partie de votre configuration particulière (utilisateur unique / multi, serveur Web réel / juste localhost, dynamique / statique, etc.)

balpha
la source
6
+1 en effet - c'est la meilleure façon de gérer les pages du serveur Web. Assurez-vous d'y avoir accès plutôt que d'élever vos privilèges.
bedwyr
1
-1 il n'y a aucune raison d'exécuter vim avec des privilèges élevés lorsque sudoedit fera le même travail.
sml
4

Une question comme celle-ci me fait me frapper le front. Je suis de l'autre côté de la sécurité, "la sécurité ne doit pas interférer avec l'expérience utilisateur, sauf si elle est prévue ou requise pour empêcher la personne moyenne de faire des activités malveillantes."

Empêcher l'utilisation sudo de vim est juste un pansement. Comme indiqué précédemment, quelqu'un peut simplement utiliser:

sudo su -

Ou

sudo /bin/bash

Ou

sudo nano file

Ou

sudo my_exectuable_text_editor file

ect

Si vous craignez vraiment que quelqu'un fasse quelque chose de malveillant sur la boîte, ne lui donnez pas de privilèges sudo (ou mot de passe root évidemment), point final. Il n'y a pas de puce pour empêcher les activités malveillantes en utilisant sudo et vous ne deviendrez fou que par "l'application" de tous les "correctifs" pour vous assurer qu'une personne ne peut rien faire de malveillant.

Quelqu'un a mentionné le changement de propriétaire / groupe. Il s'agit d'un problème épineux comme si le serveur Web est exécuté en tant qu'autre utilisateur et que vous modifiez les autorisations sur le fichier, tout à coup votre site ne fonctionne plus. Eh bien, évidemment, cela ne vous aidera pas. Vous pouvez vous ajouter au groupe que le serveur Web exécute car, cependant, si le groupe n'a pas accès en écriture aux fichiers, vous devrez effectuer chmod -R g + w * (ou chmod fichiers individuels) qui peuvent ne pas être ce que vous voulez et peut être un problème si vous devez modifier chaque fichier.

Certaines personnes ont même suggéré d'utiliser rvim. Bien sûr, on pourrait simplement ajouter une ligne dans / etc / sudoers pour autoriser uniquement certains utilisateurs à sudo rvim, cependant, il serait logique que si vous deviez suivre cette voie, il serait peut-être préférable d'implémenter un gestionnaire de fichiers basé sur le Web. De cette façon, il s'exécute en tant qu'utilisateur sous lequel le serveur Web s'exécute, donc aucun problème d'autorisation de fichier et vous pouvez toujours avoir un contrôle granulaire sur qui modifie quels fichiers.

Mes deux cents de toute façon.

Natalie Adams
la source
2

L'exécution sudo vimne changera pas le $HOMErépertoire, vous exécuterez donc Vim avec les autorisations root, mais $HOMEpointe toujours vers votre utilisateur normal.

Si c'est la première fois que vous exécutez Vim, il peut arriver que le ~/.viminfofichier soit créé dans votre répertoire utilisateur normal, mais avec les autorisations root.

Denilson Sá Maia
la source
1
Dépend du sudo. Sur mon ordinateur portable sudo vim -c '!echo $HOME' -c qdonne mon dossier de départ, mais sur mon serveur, il donne /root. Je devrais peut-être jeter un coup d'œil à la raison pour laquelle cela est dû au fait que l'un est OS X tandis que l'autre est Gentoo, ou pourrait être quelque chose à voir avec la /etc/sudoersconfiguration.
Nemo157
aha! vous avez raison - je me suis arrêté ici en me demandant pourquoi mon .viminfoétait accessible uniquement par root.
Ayrat
1

SI C'EST VOTRE PROPRE ORDINATEUR ... Je ne vois aucune raison pour laquelle vous ne pouvez pas utiliser 'sudo vim', autre que le cas de bord que Denilson a noté - qu'il pourrait créer votre ~ / .viminfo appartenant à root.

Sinon - si un administrateur système restreint ce que vous pouvez et ne pouvez pas faire - par "man sudo": "sur la plupart des systèmes, il est possible d'empêcher les échappements du shell avec la fonctionnalité noexec de sudo. Voir le manuel sudoers (5) pour plus de détails. "

Donc, dans ce cas, si votre administrateur système est préoccupé par le potentiel de l'exécution de sous-shell en tant que root à partir de vim, il peut utiliser la capacité noexec. Mais ... revenons au cas initial - si c'est VOTRE ordinateur, je pense que vous êtes sacrément sûr d'exécuter 'sudo vim'.

pbr
la source