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.
11 réponses
vieux fil, mais qu'en est-il:
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
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
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
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.
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-----
.
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
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.
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.
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!
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"
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