3 votes

Supprimer les sudoers en utilisant script.

En ce moment, je travaille sur une solution pour empêcher tous les utilisateurs administrateurs (sauf un en particulier) d'exécuter le programme sudo . Je peux ajouter un utilisateur spécifique à sudoers en exécutant :

sudo -i
echo '$username  ALL=(ALL:ALL) ALL' >> /etc/sudoers

Ensuite, je voudrais supprimer %admin ALL = (ALL) ALL dans le fichier sudoers, ce qui laisserait l'administrateur ci-dessus comme seul administrateur sudo. Cependant, je n'arrive pas à trouver comment supprimer/remplacer une chaîne particulière dans sudoers.

J'aimerais en faire un script, donc l'utilisation de visudo et l'ajustement manuel ne fonctionneront pas pour moi. S'il existait un moyen de lancer visudo à partir de script et d'ajuster une ligne particulière dans les sudoers, ce serait idéal, mais je n'ai rien trouvé en faisant des recherches sur le Web.

J'ai vu une solution ici :

qui fonctionne sous Linux. Est-il possible de le faire fonctionner sous MacOS ?

3voto

nohillside Points 82672

Pour ce que cela vaut, vous pouvez utiliser

printf '/^%%admin ALL = (ALL) ALL$/d\nw\nq\n' | ed -s sudoers

ou, si vous voulez attraper la ligne indépendamment du nombre de caractères d'espacement, de tabulations, etc. utilisés

printf '/^%%admin[[:blank:]]*ALL[[:blank:]]*=[[:blank:]]*(ALL)[[:blank:]]*ALL$/d\nw\nq\n' | ed sudoers 

en bash pour supprimer la ligne d'administration (le double %% sont tenus d'empêcher printf de les interpréter comme des instructions de formatage).

Les mises en garde habituelles concernant l'édition sudoers sans s'appuyer sur les contrôles syntaxiques effectués par visudo s'appliquer. Il serait donc plus sûr d'exécuter ce qui suit, ou au moins d'avoir un autre shell Root en cours d'exécution afin de pouvoir résoudre les problèmes sans être bloqué.)

cp /etc/sudoers /tmp
chmod +w /tmp/sudoers
printf '/^%%admin[[:blank:]]*ALL[[:blank:]]*=[[:blank:]]*(ALL)[[:blank:]]*ALL$/d\nw\nq\n' \
    | ed /tmp/sudoers
if visudo -c -f /tmp/sudoers; then
    echo "All well"
    mv -f /tmp/sudoers /etc/sudoers
    chmod -w /etc/sudoers
else
    echo "Uups, something went wrong"
fi

(script non testé, parce que je ne veux pas gâcher mon sudoers fichier)

2voto

Michael Zhou Points 167

Voici une autre méthode. Les lignes ne sont pas ajoutées ou supprimées du fichier sudoers. La ligne donnant à admin les droits root est commentée et nous créons un fichier séparé avec les droits de mac_admin dans le répertoire /etc/sudoers.d. Et en bonus, le fichier sudoers original est sauvegardé.

printf '%s\n' 'mac_admin  ALL=(ALL:ALL) ALL' > /tmp/99-macadmin

visudo -c -f /tmp/99-macadmin &&
install -o 0 -g 0 -m 440 /tmp/99-macadmin /etc/sudoers.d

sed $'s/%admin\t/# %admin/' /etc/sudoers > /tmp/sudoers

visudo -c -f /tmp/sudoers &&
install -B .orig -b -o 0 -g 0 -m 440 /tmp/sudoers /etc/sudoers

rm /tmp/sudoers /tmp/99-macadmin

1voto

merkeesox Points 51

Incroyable ! Cela a fonctionné ! Merci beaucoup ! @nohillside

J'ajouterai une ligne au-dessus pour ajouter un utilisateur mac_admin avant que le script ne s'exécute, de sorte que la version finale devrait ressembler à ceci.

echo 'mac_admin  ALL=(ALL:ALL) ALL' >> /etc/sudoers

cp /etc/sudoers /tmp
chmod +w /tmp/sudoers
printf '/^%%admin.*ALL = (ALL) ALL$/d\nw\nq\n' | ed /tmp/sudoers
if visudo -c -f /tmp/sudoers; then
    echo "All well"
    mv -f /tmp/sudoers /etc/sudoers
    chmod -w /etc/sudoers
else
    echo "Uups, something went wrong"
fi

Pour information, j'exécute ce script en l'adaptant à ma machine sur Jamf Pro afin qu'il s'exécute via une politique d'enregistrement récurrente.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X