Vous n'êtes pas identifié(e).
Dernière modification par Tawal (01-03-2023 15:09:48)
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
Hors ligne
Debian sid
Bureau : gnome
Ordinateur : Thinkpad T400 libreboot
Hors ligne
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
comment trouver le bon nom (ou uid) de l'utilisateur "normal" ?
Dans mon cas il s’agissait à chaque fois d’un utilisateur clairement identifié, généralement nouvellement créé par un script.
---
La solution pkexec commande_root me va bien et me convient mieux je trouve (malgré le timing de la demande de mot de passe).
C’est à mon avis la meilleure approche pour un besoin de privilèges supplémentaires seulement pour une commande donnée. Dans ce cas je n’ai aucune idée de comment forcer une demande d’authentification au début du script, mais je ne serais pas surpris que ce soit possible.
Hors ligne
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
Hello, Tawal.
Je t'ai envoyé un message privé
Si ce message privé concerne la demande de Tawal, c'est vraiment dommage de ne pas en faire profiter le forum, et même, ce n'est pas du tout éthique...
Hors ligne
ls est bien exécuté en user et on te redemande pas de mot de passe quand tu passes en root du moment que tu es dans les temps
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
Salut,
Jean-Pierre Pinson a écrit :Hello, Tawal.
Je t'ai envoyé un message privé
Si ce message privé concerne la demande de Tawal, c'est vraiment dommage de ne pas en faire profiter le forum, et même, ce n'est pas du tout éthique...
+1 avec lool_lauris.
Hors ligne
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
Mais, je répète, cela ne fonctionne que dans un terminal.
Edit:
Condition sine qua non : l'utilisateur doit être sudoers.
Contrairement à pkexec qui demande le mot de passe root à l'utilisateur non-sudoers.
Dernière modification par Tawal (21-02-2023 16:10:54)
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
Hors ligne
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
Je ne peux pas autoriser le programme via /etc/sudoers car ses arguments sont variables.
Ce qui rendrait l'autorisation bien trop large si je ne l'affine pas avec ses arguments.
Peux-tu en dire plus STP
Est-ce ton script qui a des arguments trop large ?
Ou la commande à lancer ?
Si c'est la commande est-ce que les arguments sont connus au début du script, au moment ou tu veux demander le pass de root ?
Qu'appelles tu "propre" ?
Un second script root, que tu appelles avec pkexec, qui va donner des droit sudo (sans mot de passe) à un 3em script root qu'il génère, qui contient ta commande. Ce 3em script après avoir lancer ta commande, supprime les droits sudo et s’auto-supprime. Trouve tu ça "propre". ?
Haha, moi en tout cas j'appelle cela plus complexe
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.
En ligne
Quand à intervenir... Pour l'instant, il me faut garder l'eau du bain d'ici, pour ne pas m'éparpiller.
Car même si j'ai un schéma qui se précise, pour la refonte, des deux premières pages de cette série de wikis. Je n'ai pas plus.
J'ai maintenant le cerveau qui fuit par ici
Dernière modification par agp91 (27-02-2023 16:22:38)
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.
En ligne
Un second script root, que tu appelles avec pkexec, qui va donner des droit sudo (sans mot de passe) à un 3em script root qu'il génère, qui contient ta commande. Ce 3em script après avoir lancer ta commande, supprime les droits sudo et s’auto-supprime.
Pour que le 3em script ne puisse pas être lancé par l'utilisateur en dehors du script principal (puisqu'il dispose des droit sudo pour le faire), son exécution doit être contrôlé par une clé en dur dans son fichier.
Soit cette clé peut-être générée soit :
Par le script original qui la transmet au script2 appelé par pkexec (soit en argument, soit par une variable fournie lors de son appel : key=$key script2 arg1 arg2...
Ou par script2 qui la retourne au script principal, qui la récupère par la substitution de commande key=$(script2 arg1 arg2...)
Le script d'origine (script1) mémorise la clé dans une variable.
Le script2 inclus alors la clé en dur dans le script3 qu'il génère.
Lorsque que script3 est appelé par script1, il test la clé que lui transmet script1 avec celle qu'il a en dur.
Évidement le script3 doit être en lecture que pour root, afin que personne d'autre puisse lire la clé.
Script3 doit disposer d'une option qui lui permet d’être appelé uniquement pour faire le ménage (supprimer les droits sudo et s'auto-supprimer). Ainsi il peut être appelé par trap dans le script d'origine en cas d’arrêt intempestif.
Dernière modification par agp91 (27-02-2023 19:29:46)
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.
En ligne
Que le script1 (le script d'origine) fasse le ménage s'il se termine normalement sans avoir à utiliser le script3 (dans le cas ou la commande qui pose soucis ne soit pas obligatoire dans l'usage de script1)
Un service qui au démarrage contrôle qu"il n'y est pas de script3 (au cas où par exemple l'ordi est été arrêté sans que le script soit fini).
Configurer sudo pour qu'il puisse exécuter, avec les droits root, le script3 hors des répertoire prévus par défaut. Car mettre un exécutable temporaire dans ces répertoires est peut-etre un peu moins "propre" (cela dépend des points vues).
Contrôler que le script1 ne puisse être exécuter plusieurs fois par le même ou un autre utilisateur. Si cela doit pouvoir se faire, il est nécessaire de gérer plusieurs script3 avec des noms différents.
Évidement script1 doit ne pas appartenir à/aux utilisateur(s) et être protégé en écriture. Afin qu'il ne puisse pas être modifié pour injecter du code dans script3 via script2.
Reste un aspect sécurité, ou un tier peut aller chercher, la clé mémorisée par script1 dans variable, directement dans en mémoire (c'est en dehors de mes compétences).
Dernière modification par agp91 (27-02-2023 19:51:38)
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.
En ligne
Dernière modification par Tawal (27-02-2023 21:38:49)
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
Merci de tes réponses, mais je n'ai rien compris
Ha, c'est que j'ai mal expliqué alors.
C'est pas grave, si tu es satisfait avec pkexec. Ou si lancer un script sous root, en diminuant les droits sur les ligne de commande de ton script te conviens, alors je ne vais pas insister.
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.
En ligne
Edit:
Pour être plus clair, la commande nécessitant des droits root est apt-get.
Elle est utilisée ainsi :
VAR contient une chaîne invariable en début.
Selon ce qui s'est passé avant dans le script (et ça peut prendre du temps), cette commande est réalisée ou non.
Pour l'instant, j'utilise pkexec sur la commande.
Si tu as d'autres solutions "claires", je suis preneur
Edit2:
Modification des options de la commande apt-get.
Dernière modification par Tawal (28-02-2023 11:35:41)
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
apt-get --asume-yes --quiet install "$VAR"
VAR contient une chaîne invariable en début.
Si tu connais la commande dans son intégralité au début du script, c'est beaucoup plus simple.
Haha; j'aivais envoyé du lourd dés le dépard
Il te suffit de créer un second script qui va te donner les droits sudo (dans /etc/sudoers.d/<fichier>) pour
Lancer apt-get
supprimer le fichier donnant les droits dans /etc/sudoers.d/<fichier>
Nommons ton script, script1
Il te faut créer un second script, nommé ici /path/to/script2 :
J'ai utilisé cmd1 et cmd2 pour plus de clarté, mais ce n'est pas obligatoire.
Je n'ai pas ajouté de contrôle des arguments passés pour etre plus succin.
Le shebang #!/bin/bash est lui obligatoire pour pkexec
Au début de script1 tu exécutes script2 avec pkexec
Il créé le fichier /etc/sudoers.d/script1
Quand tu as besoin tu utilise apt-get avec sudo
Puis tu supprime /etc/sudoers.d/script1 avec sudo
Selon ce qui s'est passé avant dans le script (et ça peut prendre du temps), cette commande est réalisée ou non.
N'oublie pas de supprimer /etc/sudoers.d/script1 avec sudo si la commande n'est pas réalisée.
Ni de l'ajouter dans trap.
Il ne restera plus qu'à faire un petit service lancer au démarrage du PC, pour contrôler si /etc/sudoer.d/script1 existe. Si oui, le supprimer. Au cas où, par exemple, le PC soit éteint brutalement alors que le script tourne.
Dernière modification par agp91 (28-02-2023 15:18:01)
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.
En ligne
Les arguments transmis à un script sont mémorisés dans les paramètre $1, $2, $3... ${n}.
$0 retourne le chemin absolu relatif du script. $(readlink -f $0) retourn le chemin absolu.
${0##*/} retourne le non du script.
Lorsque le script est lancé normalement (sans l'option --sudo), le code qui ajoute les droits sudo dans le fichier $sudo_filepath n'est pas exécuté (puisque que l'option --sudo n'est pas transmise).
Quand l'exécution du script arrive à la ligne de pkexec, pkexec relance le script $0 (chemin absolu du script) avec l'option --sudo et pour arguments suivants, les remplacements de $(id -nu) et "$VAR"
Cette seconde instance du script, dont le premier argument est --sudo, exécute le code qui ajoute les droits sudo dans le fichier $sudo_filepath. Et se termine (commande exit 0).
La première instance du script reprend la main et poursuit son exécution.
...
Dernière modification par agp91 (01-03-2023 13:29:17)
La liberté est gratuite et accessible à tous. Sinon ça n'en est pas.
En ligne
Résultat :
J'ai bien la demande de mot de passe graphique (pkexec) mais les droits ne sont pas encore actifs.
Peut-être existe-t-il un moyen "d'updater" les droits décrits dans /etc/sudoers ?
Dernière modification par Tawal (01-03-2023 11:52:39)
Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne