Digression sur root, su, sudo, et les autres

Je vais essayer de prendre le temps de détailler ça ce soir, mais tu peu assigner un shell et sa configuration au travers de sudo, en te préparant un fichier de configuration pour ton shell favoris tu peu intégrer des alias appelant des scripts te permettant beaucoup de choses.

En exemple la base :

[code]# sudoers file.

This file MUST be edited with the ‘visudo’ command as root.

See the man page for details on how to write a sudoers file.

Host alias specification

User alias specification

Cmnd alias specification

User privilege specification

root ALL=(ALL) ALL[/code]

Maintenant si par exemple tu veu lancer un rsync ( toujous le même dossier cible et le même répertoire d’arrivé ) un script appeler par un alias peu convenir et dans ce cas tu fais aparaître ton alias dans la partie réservé à cet effet.

En gros :

Cmnd_Alias NOM_DE_L'ALIAS=/bin/la_commande, /bin/l'autre_commande, etc ...

En attendant de savoir si celà est faisable:
Créer un script avec cette ligne, et utiliser ce script comme commande dans sudoers.

Cela permet aussi l’utilisation des paramètres $1 $2 $3 $4 …
et quelques contrôles des exceptions et erreurs.

Re,

[quote]#!/bin/sh
LADATE=date +%Y-%m-%d_%H-%M-%S

création du dossier des suppressions du jour.

ssh root@lmt mkdir -p /volume1/backups/debian/inc/${LADATE}/

Synchronisation & sauvegarde des suppressions faites depuis la précédente sauvegarde.

/usr/bin/rsync -av -e ssh --delete --backup --backup-dir=/volume1/backups/debian/inc/${LADATE} --exclude-from=/root/exclure / lmt:$[/quote]

Ce script est nommé backup et gérard à droit de l’utiliser dans sudoers (NOPASSWD) bien qu’il n’ait aucun droit d’exécuter rsync pas plus que mkdir

,

Encore une fois Gérard, ce n’était qu’un exemple et je n’ai besoin de rien en matière de sauvegarde, puisque je suis seul à la faire.
La seule chose qui m’intéresse, c’est la faisabilité d’utiliser sudo pour un utilisateur et pour une seule commande bien précise.
Pas seulement pour que cet utilisateur puisse utiliser “rsync”, ça je sais faire.
Justement, il ne doit pas pouvoir utiliser “rsync”(encore un coup de plus : c’est un exemple), SAUF pour une commande bien précise.
Les idées de dessus commencent à m’éclairer.
Si je n’ai pas tout à fait ma réponse, j’essaierai d’être plus simple et généraliste.

Salut,
J’ai un peu cherché, et je n’ai rien trouvé concernant des commandes complexes, donc le script est la meilleure solution…

Pour le reste…

[code]# Host alias specification
Host_Alias LOC = sidlol

User alias specification

User_Alias STAFF=laurent

Cmnd alias specification

Cmnd_Alias NET=/usr/bin/ifconfig, /usr/bin/nmap
Cmnd_Alias SCRIPT=/usr/local/bin/script_a_ricardo

Utilisateur du groupe staff

STAFF LOC=(ALL) NOPASSWD:NET, SCRIPT[/code]

Autorisé:

/home/laurent> sudo ifconfig /home/laurent> sudo /usr/local/bin/script_a_ricardo
Refusé:

/home/laurent> sudo rsync [sudo] password for laurent: Sorry, user laurent is not allowed to execute '/usr/bin/rsync' as root on sidlol.zehome.org.

Il faut se méfier des scripts dans un environnement ouvert, le mieux est de faire un binaire exécutant la commande et de mettre en sudo ce binaire, on peut facilement tripattouiller un script, pas un binaire.

Salut,

Excellent! Comment ça se fait un binaire ?

[quote=“ricardo”]Encore une fois Gérard, ce n’était qu’un exemple et je n’ai besoin de rien en matière de sauvegarde, puisque je suis seul à la faire.
La seule chose qui m’intéresse, c’est la faisabilité d’utiliser sudo pour un utilisateur et pour une seule commande bien précise.
Pas seulement pour que cet utilisateur puisse utiliser “rsync”, ça je sais faire.
Justement, il ne doit pas pouvoir utiliser “rsync”(encore un coup de plus : c’est un exemple), SAUF pour une commande bien précise.
Les idées de dessus commencent à m’éclairer.
Si je n’ai pas tout à fait ma réponse, j’essaierai d’être plus simple et généraliste.[/quote]

Et c’est bien le cas : je ne peux pas utiliser rsync mais je peux utiliser backup. Comme je vois que nous ne sommes pas sur la même longueur d’onde je raccroche :slightly_smiling:

Même réponse que Lol à François : comment ?
Je vais essayer de généraliser ma demande qui, je le rappelle, n’est faite que pour information, je n’en ai pas besoin pour mon script de sauvegarde et je n’avais pris ‘rsync’ que comme exemple.
"Comment n’autoriser l’utilisateur “machin” à passer une commande précise avec sudo et SEULEMENT CETTE COMMANDE ?
un exemple ptet plus clair : pour que la ligne qui suit puisse aboutir MAIS que ‘machin’ ne puisse pas faire autre chose avec ‘chmod’, que doit-on écrire dans ‘sudoers’ :question:
machin@sid-sda8:~$ sudo chmod 777 /etc/apt/preferences

EDIT :
Une fois de plus, pour Gérard, chmod n’est qu’un exemple :wink:

[quote=“ricardo”]Même réponse que Lol à François : comment ?
Je vais essayer de généraliser ma demande qui, je le rappelle, n’est faite que pour information, je n’en ai pas besoin pour mon script de sauvegarde et je n’avais pris ‘rsync’ que comme exemple.
"Comment n’autoriser l’utilisateur “machin” à passer une commande précise avec sudo et SEULEMENT CETTE COMMANDE ?
un exemple ptet plus clair : pour que la ligne qui suit puisse aboutir MAIS que ‘machin’ ne puisse pas faire autre chose avec ‘chmod’, que doit-on écrire dans ‘sudoers’ :question:
machin@sid-sda8:~$ sudo chmod 777 /etc/apt/preferences

EDIT :
Une fois de plus, pour Gérard, chmod n’est qu’un exemple :wink:[/quote]

Re,
Si tu as été clair, tout comme ma réponse (peut-être pas satisfaisante, mais je n’ai pas trouvé mieux.)…

Tu ne peut pas mettre de commande complexe dans sudoers, seulement des binaires, c’est tout ou rien.

Eventuellement ce genre de truc:

Pour quelque-chose de plus compliqué => script.

Mais d’après François, c’est pas sûr… Attendons donc sa réponse pour le binaire.

Qu’entend on par “environnement ouvert”??

Multi-utilisateur je pense.

Mais surtout, ayant possibilité d’être vu de l’extérieur, ce qui est le danger. On peut assez bien contrôler son environnement interne mais si on est “ouvert” grâce au Net, vers le Monde, c’est difficilement contrôlable.

Si tu fais un script shell et que tu le mets dans /usr/local/bin ?

Pourrais-tu expliquer précisément ce que tu veux dire ?

Si l’exécutable auquel tu accordes des droits sudo (peu importe que ce soit un binaire ou un script) est modifiable par n’importe qui d’autre que root, tu as un gros problème : tu accordes des droits root à un exécutable dans lequel tu ne peux pas avoir confiance. De plus, un trampoline pour un binaire est tout aussi simple à faire que de modifier un script, même pas besoin de savoir programmer en C puisque le trampoline peut tout à fait être lui-même un script shell…

[code]$ mv binaire /chemin/planqué/binaire.original
$ cat > binaire << EOF
#!/bin/sh

faire quelque chose de malveillant

appeler le binaire original

/chemin/planqué/binaire.original "$@"
EOF
$ chmod +x binaire[/code]
Si au contraire ton exécutable a des droits corrects (modifiable seulement par root) et qu’un attaquant trouve le moyen de le modifier (autrement dit, qu’il obtient des droits root), TOUT ton système est compromis, c’est pas une commande (encore une fois, peu importe que ce soit un binaire ou un script) qui va faire la différence.

Bref, je ne comprends pas ton affirmation.

"Comment n’autoriser l’utilisateur “machin” à passer une commande précise avec sudo et SEULEMENT CETTE COMMANDE ?
un exemple ptet plus clair : pour que la ligne qui suit puisse aboutir MAIS que ‘machin’ ne puisse pas faire autre chose avec ‘chmod’, que doit-on écrire dans ‘sudoers’ :question:
machin@sid-sda8:~$ sudo chmod 777 /etc/apt/preferences

[quote]ricardo xxx.xxx.xxx.xxx Suppression d’un message
» Re: Digression sur root, su, sudo, et les autres Afficher le sujet | Voir les journaux 08 Sep 2011 19:17[/quote]

Je n’apprécie pas du tout la suppression de mon message.
J’ai toujours respecté les règles.

Tu es allé trop loin, même pas de MP pour m’expliquer…

Alors, c’est sans moi. Amuses toi bien.

Vu la date du dernier message, je crains d’arriver comme un cheveux dans la soupe.

Mon petit soucis :

Mon Root-Pass comporte les 2 casses size=85[/size]
lorsque je suis sur le [mono]Terminal[/mono]-utilisateur et que je désire passer en su (ou sudo) pour effectuer une commande Root,
le pass [size=85](avec la casse respectée)[/size] n’est pas accepté. :12
Je dois à chaque fois ouvrir le [mono]Terminal[/mono]-Root pour effectuer ma commande avant de repasser sur le [mono]Terminal[/mono]-Utilisateur

Peut-on m’indiquer la source du problème ?
Merci :smiley:

Est-ce que ton “Terminal-utilisateur” et ton “Terminal-Root” utilisent les mêmes encodages de caractères (voir la commande “locale”).