Je dois modifier /etc/sudoers
d'un script pour ajouter/supprimer des éléments 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 simplement utiliser les mêmes verrous et cp
?
La question concerne plus les problèmes potentiels que la simple recherche de quelque chose qui fonctionne.
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 "piratage" avec la solution de Brian.
#!/bin/sh
if [ -z "$1" ]; then
echo "Starting up visudo with this script as first parameter"
export EDITOR=$0 && Sudo -E visudo
else
echo "Changing sudoers"
echo "# Dummy change to sudoers" >> $1
fi
Ce script ajoutera la ligne "# Dummy change to sudoers" à la fin des sudoers. Pas de hacks et pas de conditions de course.
Version annotée qui explique comment cela fonctionne réellement:
if [ -z "$1" ]; then
# When you run the script, you will run this block since $1 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=$0 && Sudo -E visudo
else
# When visudo starts this script, it will provide the name of the sudoers
# file as the first parameter and $1 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" >> $1
fi
Vous devez apporter vos modifications à un fichier temporaire, puis utiliser visudo -c -f sudoers.temp pour confirmer que les modifications sont valides, puis les copier par-dessus/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/etc/sudoers.d/
répertoire, avec droits0440
– pour plus d'informations, voir / etc/sudoers.d/README .
Ça pourrait aider.
visudo est censé être l'interface humaine pour l'édition /etc/sudoers
. Vous pouvez obtenir le même résultat en remplaçant directement le fichier, mais vous devez vous occuper vous-même de l'édition simultanée et de la validation de la syntaxe. Attention aux r--r-----
autorisations.
Si votre Sudo
permet d'ajouter des entrées dans /etc/sudoers.d
, alors vous pouvez utiliser cette réponse de @ dragon788:
https://superuser.com/a/1027257/26022
Fondamentalement, vous utilisez visudo
pour vérifier le fichier avant de le copier dans /etc/sudoers.d
, pour être sûr de ne pas casser Sudo
pour personne.
visudo -c -q -f filename
Cela le vérifie et renvoie success (0) s'il est valide, vous pouvez donc l'utiliser avec if
, &&
et d'autres opérations booléennes de script. Une fois que vous avez validé, copiez-le simplement dans /etc/sudoers.d
et ça devrait marcher. Assurez-vous qu'il appartient à root et n'est pas accessible en écriture par d'autres.
Configurez un éditeur personnalisé. Fondamentalement, ce sera un script qui accepte le nom de fichier (dans ce cas /etc/sudoers.tmp), et le modifier et l'enregistrer en place. Vous pouvez donc simplement écrire dans ce fichier. Lorsque vous avez terminé, quittez le script et visudo se chargera de modifier le fichier sudoers réel pour vous.
Sudo EDITOR=/path/to/my_dummy_editor.sh visudo
Beaucoup de réponses, je travaillais avec Sudo pour les yonks mais je n'avais pas besoin d'automatiser la configuration de configuration jusqu'à présent. J'ai utilisé un mélange de certaines des réponses ci-dessus, en écrivant ma ligne de configuration dans l'emplacement d'inclusion de /etc/sudoers.d afin de ne pas avoir à modifier le fichier sudoers principal, puis j'ai vérifié la syntaxe de ce fichier, exemple simple ci-dessous:
Écrivez votre ligne dans un fichier d'inclusion sudoers:
Sudo bash -c 'echo "your_user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/99_Sudo_include_file'
Vérifiez que votre fichier sudoers include a passé les vérifications de la syntaxe visudo:
Sudo visudo -cf /etc/sudoers.d/99_Sudo_include_file
Juste pour ajouter une option supplémentaire aux réponses ci-dessus, si la condition de concurrence critique n'est pas un problème majeur, la commande suivante peut être utilisée pour éviter de copier manuellement un fichier modifié dans /etc/sudoers
Sudo EDITOR="cp /tmp/sudoers.new" visudo
Cela garantira que le nouveau fichier est validé et installé correctement avec la mise à jour des autorisations.
Notez que s'il y a une erreur dans le /tmp/sudoers.new
fichier puis visudo
demandera une entrée utilisateur, il est donc conseillé de le vérifier avec visudo -c -f /tmp/sudoers.new
première.
Je pense que la solution la plus simple consiste à:
Créez un script ajouteudoers.sh
#!/bin/sh
while [ -n "$1" ]; do
echo "$1 ALL=(ALL:ALL) ALL" >> /etc/sudoers;
shift # shift all parameters;
done
et appelez-le avec les utilisateurs auxquels vous souhaitez l'ajouter:
root Prompt> ./addsudoers.sh user1 user2
Pour l'explication complète, voir cette réponse: Ajout d'utilisateurs à sudoers via le script Shell
Cordialement!
Essayez d'en faire écho. Vous devez cependant l'exécuter en sous-shell. Exemple:
Sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"