Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

Ne pas demander le pass lors d'action dans un script bash

#1Messageil y a 4 ans

Bonjour,

J'ai fait un script bash qui combiner avec dmenu et rofi me permet de lancer et d’arrêter certain services sur l'ordinateur.

Le script et le menu marche très bien. Cependant, pour effectuer ces actions je doit mettre le pass pour lancer les commandes.

J'aimerai savoir comment faire pour faire en sorte que pour ces commandes il ne me demande pas le pass et effectue l'action.

Merci

Ne pas demander le pass lors d'action dans un script bash

#2Messageil y a 4 ans

chuuut faut pas le dire mais c'est possible :
avec polkit ou sudoers

polkit :
1) il faut créer une action polkit classique sur ton script avec un id du type "org.manjaro.pkexec.truc"
/usr/share/polkit-1/actions/org.manjaro.pkexec.truc.policy (pas mal d'exemples dans ce dossier)
Ensuite il est possible d'appeler ton script (comme sudo) par pkexec /path/tonscript.sh
A cette étape cela ne change rien sinon que le mot de passe est cette fois demandé par polkit et non plus en console par sudo, il suffit de tester ...
Par exemple systemctl à une action polkit (org.freedesktop.systemd1.manage-units)

2) Et, enfin le contournement : Ajouter une règle polkit liée à ton action polkit que tu viens de créer
/etc/polkit-1/rules.d/99-truc.rules (à créer)
avec un contenu du genre:

polkit.addRule(function (action,subject) {
    if (action.id == 'org.manjaro.pkexec.truc' && subject.isInGroup("wheel")) {
        return polkit.Result.YES;
    }
});
Avec cette règle, on dit a polkit : si l'utilisateur est dans le groupe wheel et qu'il demande l'action polkit "truc.run" alors on ne demande pas de mot de passe (il faut bien sûr lancer le script avec pkexec)

---
PS: tout ceci est dans l'excellent wiki arch :siffle RTFM :lol:

Ne pas demander le pass lors d'action dans un script bash

#3Messageil y a 4 ans

Merci pour ta réponse.
Promis je vais rien dire :gsourire:

J'ai tout compris sauf avec l'action polkit au début. J'ai bien regarder des exemples et je comprend le fonctionnement mais en crée un :saispas:

Je peut crée l'id que je veux ? Je doit mettre quoi comme key ? et pour les allow_any allow_inactive ?

Pour le moment je fait venir le terminal lors de la demande su pass pour le remplir et il ce ferme juste après.

( Cette fois j'ai pas fait le scripts avec mes pieds :rigole::rigole: )

Ps : Oui wiki Arch mais je n'ai personne qui va me répondre si je comprend pas une partie et les gens ne sont pas aussi gentil qu'ici :bien

Ne pas demander le pass lors d'action dans un script bash

#4Messageil y a 4 ans

j'ai créé il y a un moment un paquet aur qui crée des actions polkit mais QUE depuis un paquet pkcreate
avec pacman : pkcreate -p pacman il va me créer le .policy :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
    <vendor>Manjaro</vendor>
    <vendor_url>http://www.manjaro.fr</vendor_url>
    <icon_name></icon_name>
    <action id="org.manjaro.fr.pkexec.pacman.run-pacman">
        <description>Lancer pacman en tant que root</description>
        <message>Authentication is required to run as root.</message>
        <message xml:lang="fr">Authentification requise pour lancer "pacman" en tant que root.</message>
        <defaults>
            <allow_any>no</allow_any>
            <allow_inactive>auth_admin_keep</allow_inactive>
            <allow_active>auth_admin_keep</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pacman</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
    </action>
</policyconfig>
A toi de mettre ton id à "<action id=", c'est libre, par exemple org.manjaro.le_nom_de_ton_script, il faut juste qu'il soit unique, ensuite tu renommes le fichier avec c'est id (pas obligatoire)
A toi de changer le path et nom du script dans "org.freedesktop.policykit.exec.path"

Si l'action est bonne, lors de l'appel pkexec tonscript , la fenêtre de polkit va afficher dans "détails" ton id (org.....ton_script), si pas le bon id c'est que l'action est mal écrite :desole:

Ce modèle pour pacman est bon, maintenant je peux faire un pkexec pacman -Syu et si je mets "/home/patrick/test.sh" dans org.freedesktop.policykit.exec.path, il fonctionne encore très bien :sourire:
dans mon script j'ai : echo $EUID; echo $USER et il me retourne que du bon :

0
root

Ne pas demander le pass lors d'action dans un script bash

#5Messageil y a 4 ans

Bon j'ai tester mais j'ai encore un peut de mal ( je vais continuer a travailler dessus quand j'aurais plus de temps )

Pour le moment j'ai autoriser certaines commandes à ne pas demander de pass ( régler dans sudoers ) Comme ça pas besoin de faire plein de manip ( même si je veux quand même réussir à le faire marcher )
Répondre