#1 Le 14/01/2008, à 16:14
- Sorbus
Un binaire pour lancer rsync [partiellement résolu]
Bonjour à vous,
Je cherche de l'aide pour résoudre une difficulté que nous rencontrons pour automatiser les sauvegardes de /home avec rsync. Certains dossiers (ou partitions) n'étant pas accessibles en lecture, nous ne pouvons lancer la sauvegarde sans utiliser "sudo"... Il faut alors le mot de passe, et l'automatisation n'est plus possible.
On a imaginé de permettre le lancement de sudo rsync sans mot de passe (via sudo visudo et modif du fichier /etc/sudoers)... Mais c'est risqué. teke l'explique trés bien ici, et propose une autre piste : la création d'un fichier binaire qui lance un script bien précis qui n'est accessible que pour le root. Ce binaire serait enregistré dans visudo.
Pour les scripts shell de sauvegardes de /home (et les lignes de commandes avec rsync), nous avons de bons exemples dans la documentation francophone. Mais il nous manque le fichier binaire qui permettrait de lancer un script contenant des "sudo rsync" (et pouvant être mis dans /etc/sudoers à la place de rsync, par souci de sécurité).
Perso, je n'y connais rien en C... Si certains savent faire ça, cela compèterait bien la documentation sur les sauvegardes avec rsync.
Dernière modification par Sorbus (Le 22/03/2008, à 23:19)
Hors ligne
#2 Le 14/01/2008, à 16:17
- Coolgeek
Re : Un binaire pour lancer rsync [partiellement résolu]
afin d'executer une commande unix/linux dans un prog en C, regarde pour la fonction system() ou execlp(). tu devrait trouver ton bonheur la dedans.
Hors ligne
#3 Le 15/01/2008, à 14:34
- Sorbus
Re : Un binaire pour lancer rsync [partiellement résolu]
Merci Coolgeek,
J'ajoute un élément donné par teke, pour un début de piste.
Pour l'instant, je n'ai pas le temps de m'y plonger... Mais je rassemble ces éléments pour mémoire, et peut-être permettre à d'autres de construire...
[Edit, j'ai rectifié le lien, excusez : un slash en trop à la fin...]
Dernière modification par Sorbus (Le 22/03/2008, à 23:20)
Hors ligne
#4 Le 15/01/2008, à 14:57
- Coolgeek
Re : Un binaire pour lancer rsync [partiellement résolu]
le lien n'est pas valable => erreur 404 chez moi
Hors ligne
#5 Le 15/01/2008, à 18:24
- teke
Re : Un binaire pour lancer rsync [partiellement résolu]
le lien est :
http://www.commentcamarche.net/forum/affich-1824613-c-pb-fonction-system
#6 Le 16/01/2008, à 11:13
- Aurel34
Re : Un binaire pour lancer rsync [partiellement résolu]
sinon t'as la façon root fork+execve
il y a toute une famille de fonctions exec: man exec
#7 Le 16/01/2008, à 11:16
- Aurel34
Re : Un binaire pour lancer rsync [partiellement résolu]
et j'oubliais popen qui est surement la version la plus portable... (c'est dans stdio.h)
man popen
#8 Le 21/03/2008, à 22:55
- teke
Re : Un binaire pour lancer rsync [partiellement résolu]
encore un lien :
http://www.lea-linux.org/cached/index/D … ripts.html
http://www.tofe.org/suid.php3
Dernière modification par teke (Le 21/03/2008, à 22:59)
#9 Le 22/03/2008, à 00:00
- atlante
Re : Un binaire pour lancer rsync [partiellement résolu]
Pourquoi ne pas utiliser la crontab du root, si c'est pour automatiser ? Root n'aura besoin d'aucun mot de passe et tous les droits sur les répertoires.
Hors ligne
#10 Le 22/03/2008, à 07:20
- teke
Re : Un binaire pour lancer rsync [partiellement résolu]
C'est ce que je fais sur la plus part des machines que je gère... mais dans certains cas il est vrai que ce n'est pas pratique. Sur un portable de quelqu'un qui voyage par exemple... tu n'es pas sur que la personne sera connectée en réseau au bon moment... et il est utile dans ce cas de pouvoir faire un backup à un autre moment...
#11 Le 22/03/2008, à 11:16
- atlante
Re : Un binaire pour lancer rsync [partiellement résolu]
Tu peux alors utiliser ceci:
http://www.absolacom.com/divers/
Enregistre le fichier lanceur et rend le exécutable. Tu le met où tu veux , accessible aux utilisateurs. Ensuite, tu crées un répertoire /root/.authoscripts/.
Dans ce répertoire, tu mets les scripts que tu veux faire exécuter à tes utilisateurs avec les droits root.
Au même endroit, tu crées un fichier nommé liste qui comporte une ligne par script autorisé.
Exemple:
Je veux autoriser l'exécution de 2 scripts, toto.sh et tata.sh, par mes users avec les droits root. Mon fichier liste va contenir toto.sh sur la première ligne et tata.sh sur la deuxième ligne. Si un script n'est pas dans la liste autorisée, il ne pourra pas être lancé avec le lanceur même s'il existe dans le répertoire /root/.authoscripts/
Les scripts dans /root/.authoscripts/ doivent être exécutables (chmod +x)
Pour lancer un script autorisé avec les droits root:
/usr/bin/lanceur toto.sh [argument1 argument2] (si lanceur est dans /usr/bin et qu'il y a des arguments à passer au script)
Pour la sécurité:
chmod -R 700 /root/.authoscripts/
chown -R root:root /root/.authoscripts/
chown root:root lanceur
Attention:
1- BIEN tester les scripts. Ils seront exécutés avec les droits root comme si root les avait lancés
2- Penser aux éventuels piratages possibles avec ces scripts (par exemple, ne pas faire de fichiers temporaires dans /tmp avec les scripts, utiliser /root et vérifier les droits sur /root)
3- N'utiliser cette solution qu'en DERNIER recours. Avec ceci, on casse le système de droits, et donc de protection offert par linux. Ne pas prendre le risque de se retrouver avec un système à la Win*
4- Vérifier régulièrement les scripts autorisés (modifications, bugs, ...) J'ai déjà cassé plus d'un système avec cette solution. Ne JAMAIS utiliser de chemin relatif dans les scripts.
5- Les logs vous diront qu'en cas de problème c'est root qui a effectué les opérations. Impossible de savoir qui a lancé le script
Je ne suis pas l'auteur de la solution. Il me semble avoir trouvé ça sur DLFP il y a quelques années. J'ai modifié un peu le fonctionnement d'origine pour sécuriser un peu plus, mais je le répète: n'utiliser ceci qu'en dernier recours!
En cas de soucis d'utilisation, tente de me contacter sur MSN
Hors ligne
#12 Le 22/03/2008, à 12:52
- teke
Re : Un binaire pour lancer rsync [partiellement résolu]
Merci vraiment beaucoup...
Je viens de faire l'essai, et cela marche très bien !!!
Je suis quand même d'accord avec toi... à n'utiliser qu'en dernier recours... je trouve vraiment dommage qu'il n'y ait pas une solution plus sécuritaire.
Moi je verrais bien un exécutable rsync avec le suid, mais qui vérifie que le fichier de paramètre donné soit bien autorisé, et appartenant à root... ainsi l'utilisateur est libre de lancer le script, soit sans droit de modification (group = root) soit avec des droits de modifications group = group de l'utilisateur)...
Il me semble que ce serait encore ce qu'il y a de plus sécurisé... Mais je serait bien incapable de mettre cela en place...
Merci bien pour tes propositions... elles font bien avancer les choses. Je pense que l'initiateur du fil peut le mettre en résolu non ?
#13 Le 22/03/2008, à 13:59
- Sorbus
Re : Un binaire pour lancer rsync [partiellement résolu]
Je suis là. Avec la tête prise par d'autres questions ces temps-ci... Je ne me suis donc pas plongé dans les derniers échanges.
@teke, puisque tu as suivi et bien compris tout ça, pourrais-tu faire une brève synthèse de la solution proposée, afin de l'intégrer dans la documentation sur la suvegarde de /home avec rsync ?
... et je ne sais pas s'il faut mettre "(complètement) Résolu"... car la discussion peut rester ouverte avec le "cahier des charges" de ton dernier message.
On a fait un pas en avant avec atlante (merci )
Hors ligne
#14 Le 22/03/2008, à 15:07
- atlante
Re : Un binaire pour lancer rsync [partiellement résolu]
Le suid sur rsync est une trèèèèès mauvaise idée. Ca impliquerait que rsync soit toujours lancé en root. C'est pas top
L'avantage de la méthode que j'ai donné, c'est que tu crées un script avec tout ce que tu veux dedans (commandes, tests et vérifications, messages, ...) sans avoir à donner de mot de passe, mais surtout, le root décide QUOI et QUAND, puisqu'il peut désactiver l'accès à un script.
Si vous voulez aller plus loin, il suffit d'ajouter un groupe, de donner les droits d'exec sur le lanceur à ce groupe et d'ajouter vos users au groupe pour que eux seuls accèdent aux programmes supplémentaires.
Exemple: j'utilise ça pour que certains utilisateurs puissent changer des droits sur des périphériques, mais seulement à certaines heures (testé par le script).
Attention à ne pas en abuser. C'est une solution de facilité, mais très difficile à gérer.
Hors ligne
#15 Le 22/03/2008, à 21:00
- teke
Re : Un binaire pour lancer rsync [partiellement résolu]
oui oui, nous nous sommes bien compris... et justement, ce fil de discutions à justement été créé car je disais que c'est un très gros trou de sécurité que de mettre rsync en sudoer pour all...
Ce que je voulais dire, c'est qu'il faudrait pouvoir implémenter à l'intérieur même de rsync un système de contrôle des script lancé... cela permettrait d'éviter de passer par ce lanceur qui, comme tu le dis est une solution de facilité, et donc une habitude à ne pas prendre...
Merci vraiment pour ton aide.