[Admin-ml] Un script shell avec sudo...
Proniewski Patrick
patrick.proniewski at univ-lyon2.fr
Mer 21 Nov 09:34:58 CET 2007
On 21 nov. 07, at 07:52, Piel Jayce wrote:
> Imagine un peu un utilisateur qui apprend à se servir du sudoers,
> il sait pas trop comment le configurer, et ne sait pas par exemple
> que l'on peut limiter les droits d'exécution d'une commande à un
> groupe ou une personne.
si il ne sait pas ça, c'est qu'il n'apprend pas à se servir de sudo.
Le problème est entre la chaise et le clavier. sudo n'introduit en
l'occurence aucun trou de sécurité, dans la mesure où, de toute
manière, l'utilisateur est déjà root de sa machine. Qu'il fasse des
bêtises avec sudo, avec rm, ou avec autre chose, le problème est le
même : l'éducation de l'administrateur.
>> l'utilisation de la crontab aussi, mais y'a moins de risque de
faire des bêtises.
>>
>> oui enfin là, quand tu as des routines à lancer périodiquement,
>> y'a pas des masses le choix :)
>
> En l'occurence, si j'ai bien compris le message d'origine, il
> voulait lancer un script régulièrement, mais comme certains bouts
> de son script ont besoin des droits root, il voulait pouvoir lancer
> des sudo dans son script sans avoir à taper le mot de passe.
> Je le répète, dans ce cas là, l'utilisation de la crontab système
> ou d'un dayly.local est beaucoup plus appropriée que la
> modification du sudoers...
pas forcément !
lancer un script en root n'est pas la solution unique, ni
systématiquement la meilleure à un problème comme celui là. Tu peux
vouloir rester entièrement dans le domaine d'autorisation de
l'utilisateur, en lui gardant ses droits sur les fichiers et tout et
tout, sans avoir à rajouter des umask/chmod/chown toutes les 2 ou 3
lignes de script, sous prétexte que tu préfères le lancer en root
d'un bout à l'autre.
Je prends un exemple réèl :
J'ai la crontab suivante pour mon user "patpro" :
# Collect system information every minute
* * * * * /usr/local/www/admin/bgraphs/memory.sh >/dev/null
* * * * * /usr/local/www/admin/bgraphs/disk_usage.sh >/dev/null
* * * * * /usr/local/www/admin/bgraphs/network_usage.sh >/dev/null
* * * * * /usr/local/www/admin/bgraphs/temperature.sh >/dev/null
# Status graphs generation
*/15 * * * * /usr/local/www/admin/bgraphs/network_usage_graphs.sh
>/dev/null
*/15 * * * * /usr/local/www/admin/bgraphs/disk_usage_graphs.sh >/
dev/null
*/15 * * * * /usr/local/www/admin/bgraphs/memory_graphs.sh >/dev/null
*/15 * * * * /usr/local/www/admin/bgraphs/temperature_graphs.sh >/
dev/null
Ce sont des scripts qui remplissent des bases RRDTool avec des vitals
du système. Les fichiers associés (scripts, bases rrd, graph
générés, ...) appartiennent tous à l'utilisateur "patpro", et je ne
souhaite pas que les scripts soient lancés en root (car cela ne sert
à rien, et donc c'est plus sûr qu'ils ne soient pas lancés en root).
Seulement, le script temperature.sh utilise le binaire `healthd` qui
ne peut être lancé que par root, à cause d'une sombre histoire
d'accès à un device.
Dans mon sudoer j'ai ajouté :
patpro ALL=(ALL) PASSWD: ALL, !/usr/local/sbin/healthd, NOPASSWD: /
usr/local/sbin/healthd
Ce qui signifie que le user "patpro" peut faire sudo pour toutes les
commandes, que sudo lui demandera son mot de passe pour toutes les
commandes, SAUF pour /usr/local/sbin/healthd. Pour ce dernier, pas de
mot de passe à saisir.
Mon script temperature.sh contient donc la ligne :
TEMPERATURE=`sudo /usr/local/sbin/healthd -c 1 | awk 'blahblah'`
Ce qui permet à ma crontab de lancer en root uniquement les commandes
qui en ont besoin, tout en laissant tout le reste tourner avec les
privilèges de "patpro".
Patrick PRONIEWSKI
--
Administrateur Système - SENTIER - Université Lumière Lyon 2
-------------- section suivante --------------
Une pièce jointe non texte a été nettoyée...
Nom: smime.p7s
Type: application/pkcs7-signature
Taille: 2447 octets
Desc: non disponible
Url: http://coruscant.mosx.org/pipermail/admin-ml/attachments/20071121/b6981e43/smime.bin
Plus d'informations sur la liste de diffusion Admin-ml