Comment modifier / etc / sudoers à partir d'un script?

je dois éditer /etc/sudoers à partir d'un script pour ajouter/supprimer des trucs des listes blanches.

en supposant que j'ai une commande qui fonctionnerait sur un fichier normal, Comment pourrais-je l'appliquer .etc / sudoers?

puis-je le copier et le modifier, puis demander à visudo de remplacer l'original par la copie modifiée? En fournissant mon propre script dans EDITOR?

ou Puis-je utiliser les mêmes serrures et la cp?

la question est plus sur problèmes potentiels plutôt que de simplement trouver quelque chose qui fonctionne.

84
demandé sur Peter Mortensen 2008-11-27 17:47:12

11 réponses

vieux fil, mais qu'en est-il:

echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
100
répondu beckerr 2017-04-20 12:02:44

utilisez visudo pour cela avec un éditeur personnalisé. Cela résout toutes les conditions de course et les problèmes de "hack" avec la solution de Brian.

#!/bin/sh
if [ -z "" ]; then
  echo "Starting up visudo with this script as first parameter"
  export EDITOR="151900920" && sudo -E visudo
else
  echo "Changing sudoers"
  echo "# Dummy change to sudoers" >> 
fi

Ce script va ajouter la ligne "# Mannequin changement de sudoers" à la fin de sudoers. Pas de pirate et pas de conditions de course.

version annotée qui explique comment cela fonctionne réellement:

if [ -z "" ]; then

  # When you run the script, you will run this block since  is empty.

  echo "Starting up visudo with this script as first parameter"

  # We first set this script as the EDITOR and then starts visudo.
  # Visudo will now start and use THIS SCRIPT as its editor
  export EDITOR="151910920" && sudo -E visudo
else

  # When visudo starts this script, it will provide the name of the sudoers 
  # file as the first parameter and  will be non-empty. Because of that, 
  # visudo will run this block.

  echo "Changing sudoers"

  # We change the sudoers file and then exit  
  echo "# Dummy change to sudoers" >> 
fi
42
répondu sstendal 2014-02-07 20:09:28

vous devez faire vos modifications à un fichier temporaire, puis utiliser visudo-c-f sudoers.temp pour confirmer que les modifications sont valides et les copier ensuite sur le haut de /etc/sudoers

#!/bin/sh
if [ -f "/etc/sudoers.tmp" ]; then
    exit 1
fi
touch /etc/sudoers.tmp
edit_sudoers /tmp/sudoers.new
visudo -c -f /tmp/sudoers.new
if [ "$?" -eq "0" ]; then
    cp /tmp/sudoers.new /etc/sudoers
fi
rm /etc/sudoers.tmp
29
répondu Brian C. Lane 2008-11-27 15:15:31

sur Debian et ses dérivés, Vous pouvez insérer un script personnalisé dans le répertoire /etc/sudoers.d/ , avec les droits 0440 – pour plus d'informations, voir /etc/sudoers.d / README .

ça pourrait aider.

11
répondu pevik 2014-10-16 14:40:16

visudo est censé être l'interface humaine pour éditer /etc/sudoers . Vous pouvez obtenir la même chose en remplaçant le fichier directement, mais vous devez prendre soin de l'édition simultanée et de la validation de syntaxe. Attention aux permissions r--r----- .

8
répondu ngn 2008-11-27 15:17:48

installe un éditeur personnalisé. Fondamentalement, il sera un script qui accepte le nom du fichier (dans ce cas, /etc/sudoers.tmp), et modifiez et sauvegardez cela en place. Vous pouvez donc écrire dans ce fichier. Lorsque vous avez terminé, quittez le script, et visudo prendra soin de modifier le réel sudoers pour vous.

sudo EDITOR=/path/to/my_dummy_editor.sh visudo
5
répondu Ali Afshar 2008-11-27 15:22:25

si votre sudo permet d'ajouter des entrées dans /etc/sudoers.d , alors vous pouvez utiliser cette réponse par @dragon788:

https://superuser.com/a/1027257/26022

Fondamentalement, vous utilisez visudo pour vérifier le fichier avant de le copier dans sudoers.d, pour être sûr que tu ne brises sudo pour personne.

visudo -c -q -f filename

ceci le vérifie et renvoie succès (0) s'il est valide, donc vous pouvez l'utiliser avec if , && et autres opérations booléennes de script. Une fois que vous avez validé, Copiez-le dans /etc/sudoers.d et ça devrait marcher. Assurez-vous qu'il appartient à root et ne peut pas être écrit par d'autres.

4
répondu Mnebuerquo 2017-03-20 10:18:16

juste pour ajouter une autre option aux réponses ci-dessus, si la condition de course n'est pas un problème majeur, alors la commande suivante peut être utilisée pour éviter de copier manuellement un fichier modifié en /etc/sudoers

sudo EDITOR="cp /tmp/sudoers.new" visudo

cela permettra de s'assurer que le nouveau fichier est validé et installé correctement avec la mise à jour des permissions.

notez que s'il y a une erreur dans le fichier /tmp/sudoers.new , alors visudo demandera à l'utilisateur d'entrer des données. pour vérifier avec visudo -c -f /tmp/sudoers.new d'abord.

2
répondu zelanix 2014-01-26 21:31:28

je pense que la solution la plus simple est de:

créer un script addsudoers.sh

#!/bin/bash

while [[ -n  ]]; do
    echo "    ALL=(ALL:ALL) ALL" >> /etc/sudoers;
    shift # shift all parameters;
done

et l'appeler avec les utilisateurs que vous voulez ajouter comme:

root prompt> ./addsudoers.sh user1 user2

pour l'explication complète voir cette réponse: ajouter des utilisateurs à sudoers à travers le script shell

salutations!

1
répondu Albert Vonpupp 2017-05-23 11:47:30

essayez de faire écho. Vous devez l'exécuter dans un shell interne est exécuté. Exemple:

sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"

0
répondu Apollo 2014-06-18 17:50:50

cela a fonctionné pour moi basé sur ce que d'autres ont posté ici. Quand j'ai utilisé le script d'autres personnes il ouvrirait visudo pour moi mais ne ferait pas l'édition. Cela a rendu l'édition nécessaire pour permettre à tous les utilisateurs, y compris les utilisateurs standards, d'installer java 7u17 pour safari/firefox.

#!/usr/bin/env bash
rm /etc/sudoers.new
cp /etc/sudoers /etc/sudoers.new
echo "%everyone   ALL = NOPASSWD: /usr/sbin/installer -pkg /Volumes/Java 7 Update 17/Java 7 Update 17.pkg -target /" >> /etc/sudoers.new
cp /etc/sudoers.new /etc/sudoers

cela a ajouté le %tout le monde bla bla bla bla au bas du fichier sudoers. J'ai dû lancer le script comme ça.

sudo sh sudoersedit.sh

bonne chance: d

-1
répondu Kamal 2013-03-13 21:41:02