Comment modifier un fichier système avec Sudoedit préservant l'environnement utilisateur invoquant

Comment modifier un fichier système avec Sudoedit préservant l'environnement utilisateur invoquant

Sur Linux et d'autres systèmes d'exploitation basés sur UNIX, Sudo est utilisé pour exécuter un programme avec les privilèges d'un autre utilisateur, Root souvent. Lorsque nous devons modifier un fichier qui nécessite que les privilèges administratifs soient modifiés, si nous lançons notre éditeur de texte préféré directement avec Sudo, il s'exécutera sans personnalisation et paramètres que nous utilisons lorsque nous l'invitons normalement, car l'environnement de l'utilisateur invoquant est non conservé. Dans ce tutoriel, nous verrons comment pouvons-nous facilement résoudre ce problème et comment modifier les fichiers système en toute sécurité en utilisant Sudoedit.

Dans ce tutoriel, vous apprendrez:

  • Comment modifier un fichier système à l'aide de Sudoedit
  • Quelles sont les étapes effectuées lorsqu'un fichier est modifié avec sudoedit
  • Comment définir l'éditeur par défaut utilisé par Sudo

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Distribution indépendante
Logiciel Sudo
Autre Aucun
Conventions # - nécessite que les commandes Linux sont exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux sont exécutées en tant qu'utilisateur non privilégié régulier

Comportement standard sudo

La majorité des distributions Linux sont configurées afin que le principal moyen d'atteindre les privilèges racine est d'utiliser Sudo. L'utilisation de sudo nous accorde une série de privilèges su, Le principal étant que les privilèges spécifiques peuvent être accordés à un utilisateur sans avoir à lui donner un accès root complet.

Sudo peut être affiné via le / etc / sudoers déposer; Étant donné que ce fichier est très important, il doit être modifié en utilisant le visudo Commande, qui garantit qu'aucune erreur de syntaxe n'est présente avant que les modifications ne soient enregistrées.

Dans la grande majorité des cas, lorsqu'une commande est exécutée avec Sudo, l'environnement utilisateur invoquant n'est pas conservé, donc par exemple, si nous invoquons notre éditeur à l'aide de Sudo pour modifier un fichier système appartenant à Root, il exécutera l'ignorance de notre configuration personnelle. Cela peut être assez gênant, et dans certains cas, exécuter un éditeur avec des privilèges escaladés peut poser des problèmes de sécurité. Voyons ce que nous pouvons faire, plutôt.



Le problème: l'éditeur est lancé sans paramètres définis par l'utilisateur

Supposons que nous devons modifier un dossier avec les privilèges administratifs, par exemple par exemple / etc / fstab, C'est là que les informations statiques sur les systèmes de fichiers sont stockées sur Linux. Si nous utilisons notre éditeur de texte préféré et l'invitons directement en utilisant sudo,
la personnalisation que nous lui avons définie (généralement via les fichiers de points appropriés stockés dans notre MAISON répertoire) ne sera pas honoré, car l'environnement utilisateur invoquant n'est pas préservé.

Voyons un exemple. Dites que notre éditeur préféré est vim et dans notre ~ /.vimrc fichier que nous avons entré le Numéro de réglage directive qui provoque l'affichage des numéros de ligne. Si nous modifions le / etc / fstab Fichier invoquant directement l'éditeur avec sudo, nous pouvons voir que les paramètres ne sont pas efficaces:

$ sudo vim / etc / fstab 

Le fichier sera ouvert dans l'éditeur, et ce qui suit est ce qui sera affiché. Le contenu du fichier n'a pas d'importance dans ce cas, il est donc tronqué:

# # / etc / fstab # # Les systèmes de fichiers accessibles, par référence, sont maintenus sous '/ dev / disque /'. # Voir man pages fstab (5), findfs (8), mont (8) et / ou blkid (8) pour plus d'informations. # # Après avoir modifié ce fichier, exécutez 'Systemctl Daemon-Reload' pour mettre à jour Systemd # Unités générées à partir de ce fichier. # / dev / mapper / fingolfin_vg-root_lv / ext4 par défaut, x-systemd.Device-TIMEOut = 0 1 1 UUID = B308FBE5-68A6-4142-82DE-BA1DC3380484 / Boot Ext2 Par défaut 1 2 […] 

Comme vous pouvez le voir, les numéros de ligne ne sont pas affichés. Ce qui précède est juste un exemple et probablement nos personnalisations d'éditeur vont bien au-delà. Comment pouvons-nous résoudre ce problème?

La solution: en utilisant Sudoedit

Pour résoudre le problème que nous avons illustré ci-dessus, nous pouvons simplement utiliser Sudoedit au lieu de Sudo. En utilisant Sudoedit est l'équivalent d'invoquer Sudo avec le -e Option, qui est le court --modifier. Comme indiqué dans le Sudo Manuel, cette option signifie essentiellement: «Modifier un fichier au lieu d'exécuter une commande».

Lorsque cette stratégie est utilisée et que l'utilisateur invoquant est autorisé à effectuer l'action par la politique du système, une série d'étapes sera effectuée. Tout d'abord, un temporaire La copie du fichier que nous souhaitons modifier est créée. Le fichier temporaire appartiendra à l'utilisateur invoquant, donc aucun privilège administratif ne sera nécessaire pour le modifier.

Le fichier temporaire sera ouvert dans l'éditeur de texte par défaut. L'éditeur par défaut est défini via certaines variables, qui sont lues dans un ordre spécifique. Ils sont:

  1. Sudo_editor
  2. VISUEL
  3. ÉDITEUR

Selon la distribution et le shell que nous utilisons, la valeur de ces variables peut être définie en permanence dans le ~ /.bash_profile (uniquement provenant de la coquille de bash) ou du ~ /.profil déposer. Mettre en place vigueur En tant qu'éditeur par défaut, par exemple, nous écrivions:

Exporter sudo_editor = / usr / bin / vim 



Notez que nous avons utilisé le exporter Shell intégré avant la définition de la variable: il est nécessaire pour exporter la variable elle-même vers tous les processus enfants de la coquille. Les modifications ne seront pas immédiatement efficaces: nous devons nous débarrasser et nous connecter à nouveau,
ou source le fichier modifié «manuellement»:

$ source ~ /.bash_profile 

Si aucune de ces variables n'est définie, le premier éditeur spécifié comme la valeur du éditeur Option dans le fichier sudoers (/ etc / sudoers) sera utilisé.

Une fois que le fichier que nous avons modifié est enregistré (il sera créé à partir de zéro s'il n'existe pas déjà) et que l'éditeur sera fermé, il sera copié à la position d'origine et le fichier temporaire sera supprimé. L'utilisateur sera invité à
Confirmez l'action si le fichier modifié devient vide; Il s'agit d'une mesure de sécurité supplémentaire et très utile, qui peut empêcher les erreurs catastrophiques:

Sudoedit: troncate / etc / fstab à zéro octets? (y / n) [n] n sudoedit: ne pas écraser / etc / fstab 

Depuis lors de l'utilisation Sudoedit au lieu de Sudo L'environnement de l'utilisateur invoquant est conservé et le fichier est modifié comme l'utilisateur lui-même et non comme root, nous pourrons utiliser notre éditeur avec toute la personnalisation que nous définissons, inclus des plugins chargés.

Conclusions

Dans ce didacticiel, nous avons appris comment modifier un fichier qui nécessite que les privilèges administratifs soient modifiés tout en gardant l'environnement utilisateur invoquant en utilisant Sudoedit au lieu de sudo. Nous avons vu quels sont les avantages de cette approche, quelles sont les étapes effectuées lorsqu'elle est adoptée et comment définir l'éditeur par défaut utilisé par Sudo.

Tutoriels Linux connexes:

  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à installer sur Ubuntu 20.04
  • Masterring Bash Script Loops
  • Fichiers de configuration Linux: 30 premiers
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Gestion de la saisie des utilisateurs dans les scripts bash
  • Comment éliminer les bloatware de votre mobile Android Samsung…
  • Système linux hung? Comment s'échapper vers la ligne de commande et…
  • Comment créer Modifier et supprimer le compte des utilisateurs sur Linux