Questions générales sur Manjaro Linux.
S'il vous plaît, avant de poster, essayez la fonction de recherche du forum.
Répondre

Application spécifique dans sudoers

#1Messageil y a 4 ans

Bonjour,

Depuis un certain temps maintenant j'ai rajouter des programmes dans mon fichier sudoers pour pouvoir les faire tourner dans devoir rentrer le pass et tout marche très bien.
Cependant, j'aimerai rajouter des programmes mais avec des arguments derrière et la ça ne marche pas.

Par exemple

sudo systemctl start plexmediaserver ou sudo pacman -Ss
Si je met le programme systemctl ou pacman tout marche bien mais si je met les arguments derrière cela ne marche plus.

Je n'ai pas envie de mettre tout systemctl ou pacman sans pass du coup j'aimerai bien savoir comment faire pour les lancer sans devoir écrire le pass a chaque fois.

D'avance merci

Edit : Pour le moment je peut faire un script et le mettre dans sudoers mais ça veux dire que toutes les personnes qui vont changer des choses dans ce script vont le faire exécuter sans aucun pass donc niveau sécurité c'est pas toptop

Application spécifique dans sudoers

#2Messageil y a 4 ans

bonjour.
Je trouve surtout très dangereux de modifier /etc/sudoers en y rajoutant des applications "passe-droits".
Il me semble préférable d'agir sur la notion de groupe. Extrait du fichier sudoers :

.....
## Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Uncomment to allow members of group sudo to execute any command
# %sudo	ALL=(ALL) ALL
..........
il faut restreindre l'accès à ton utilisateur et ne placer dans le groupe wheel que ceux qui peuvent exécuter des commandes système.
Quant à systemctl, il est préférable de le lancer en utilisateur, ce qui implique de remplir un MP en mode graphique.
J'avoue ne pas trop comprendre ce qui te pousse a risquer de compromettre dangereusement la sécurité de ta machine...

Application spécifique dans sudoers

#3Messageil y a 4 ans

bonjour

modifier sudoers est une mauvaise pratique !!!!

Nous avons les "rules" avec polkit :wink:

sudo ls -l /usr/share/polkit-1/rules.d/
Un fichier .rules est un fichier javascript et nous pouvons faire des tests sur la commande(action) et sur l'utilisateur(subject)
Dans ton cas, il est possible d'avoir les paramètres sur "action" et donc de retourner YES que pour certains paramètres : voir la docaction.lookup("command_line")
ps: les répertoires /rules.d/ sont accessibles uniquement à root donc nos règles sont protégées


---

On peut jour aussi avec les groupes :
créer un groupe (par exemple) "semiwheel" et mettre quelques utilisateurs (non wheel) dans ce groupe
et on test dans la règle polkit si l'utilisateur(subject) est du groupe "well" ou "semiwheel"

121476

Application spécifique dans sudoers

#4Messageil y a 4 ans

un exemple complet avec pacman (très utile :rigole: )

1) on va créer une action polkit avec pacman /usr/share/polkit-1/actions/montest-pacman.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>
2) créer une règle en javascript /etc/polkit-1/rules.d/montest.rules liée à notre action(id) créée avant
ps: ici on ne teste pas l'utilisateur(subject) mais uniquement le second paramètre passé à la commande (oui c'est idiot et pas du tout sécurisé!)

polkit.addRule(function(action, subject) {
    if (action.id == "org.manjaro.fr.pkexec.pacman.run-pacman") {
        var options = action.lookup("command_line").split(" ");
        options.shift()
        // les polkit.log() n ont aucune utilité, juste du debug
        polkit.log("action=" + action);
        polkit.log("cmd=" + action.lookup("command_line"));
        polkit.log("params=" + options);
        polkit.log("param2=" + options[1]);
        polkit.log("subject=" + subject);
        if (options[1] == "toto") {
            return polkit.Result.YES;
        }
    }
});

/*
voir les logs:
journalctl -b0 -u polkit --no-pager
*/
reste à tester :
pkexec pacman -Qi toto : pas de mot de passe demandé car paramètre 2 est "toto" :pompom:
pkexec pacman -Qi tata : demande de mot de passe
dans la règle test on écrit dans les logs, pour voir
journalctl -b0 -u polkit --no-pager

janv. 18 14:31:11 tower polkitd[375]: /usr/share/polkit-1/rules.d/test.rules:7: action=[Action id='org.manjaro.fr.pkexec.pacman.run-pacman' program='/usr/bin/pacman' user.display='root' command_line='/usr/bin/pacman -Qi toto' user='root' polkit.gettext_domain='polkit-1' user.gecos='']
janv. 18 14:31:11 tower polkitd[375]: /usr/share/polkit-1/rules.d/test.rules:8: cmd=/usr/bin/pacman -Qi toto
janv. 18 14:31:11 tower polkitd[375]: /usr/share/polkit-1/rules.d/test.rules:9: params=-Qi,toto
janv. 18 14:31:11 tower polkitd[375]: /usr/share/polkit-1/rules.d/test.rules:10: param2=toto
---
.rules est du javascript et il est possible d'avoir une erreur javascript. Elle peut être détectée dans les logs. On doit avoir dans les logs systemd:

janv. 18 14:31:06 tower polkitd[375]: Reloading rules
janv. 18 14:31:06 tower polkitd[375]: Collecting garbage unconditionally...
janv. 18 14:31:06 tower polkitd[375]: Loading rules from directory /etc/polkit-1/rules.d
janv. 18 14:31:06 tower polkitd[375]: Loading rules from directory /usr/share/polkit-1/rules.d
janv. 18 14:31:06 tower polkitd[375]: Finished loading, compiling and executing 6 rules
si nous avons "Error evaluating authorization rules", c'est que nous avons une erreur de syntaxe javascript ... notre fichier ne sera alors pas interprété !

Application spécifique dans sudoers

#5Messageil y a 4 ans

Merci pour vos réponses.

J'ai vu cela sur plein de sites internet et autre vidéos de personne très ragarder pour permettre de faire des actions sans demander de pass ( Pour le moment j'ai juste arrêt, reboot etc ) je n'ai rien mis de spécial.

Je vais regarder ça cette nuit pour voir si je peut mettre en place les choses que vous m'avez conseiller.

Application spécifique dans sudoers

#6Messageil y a 4 ans

Bon j'ai fait pas mal de test et je suis arriver à faire quelque chose qui me conviens.
J'aimerai avoir ton avis :

polkit.addRule(function(action, subject) {
    if (action.id == "org.manjaro.fr.pkexec.pacman.run-pacman") {
        var options = action.lookup("command_line").split(" ");
        options.shift()
        // les polkit.log() n ont aucune utilité, juste du debug
        polkit.log("action=" + action);
        polkit.log("cmd=" + action.lookup("command_line"));
        polkit.log("params=" + options);
        polkit.log("param2=" + options[1]);
        polkit.log("subject=" + subject);
        if (options[0] == "-Ss") {
            return polkit.Result.YES;
        }
	if (options[0] == "-Si") {
	    return polkit.Result.YES;
	}
    }
});
J'ai changer options 1 par 0 et j'ai changer les arguments de pacman
En ce qui concerne systemctl je peut faire la même chose avec options 0 ou c'est pas conseiller du tout ?

Application spécifique dans sudoers

#7Messageil y a 4 ans

pour systemd, les actions polkit existent déjà
fichier : /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
action id : org.freedesktop.systemd1.manage-units

Conseillé de modifier l'accès ? NON
mais tu sais qui a acces à ta machine (famille ou toute l'entreprise ou ...), a toi d'évaluer
tu peux aussi limiter à start et à quelques units ?

if ( options[0] == "start" && 
     ( options[1] == "apache" || 
       options[1] == "nginx" || 
       options[1] == "monplayer" )) {
           ...
}
---

niveau javascript, on peut utiliser le "ou"(||), voir le "et"(&&)

if (options[0] == "-aa" || options[0] == "-bb") {
        return polkit.Result.YES;
}
PS: aucune raison de passer en admin pour faire un pacman -Ss ou pacman -Si :wink:

---

Si tu désires plus de sécurité et il y a 36 utilisateurs sur le machine, comme dit plus haut , tu peux créer un groupe et y mettre les quelques utilisateurs qui vont utiliser ton script

if (action.id == "org.freedesktop.systemd1.manage-units" &&
    subject.isInGroup("privilege"))  {
    ... ...
}

Application spécifique dans sudoers

#8Messageil y a 4 ans

Sur la machine il y a juste moi, il est dans le bureau et personne n'y va jamais.
En plus de ça je me déconnecte de la session ou alors je lance un i3lock quand j'ai fini donc absolument personne ne va dessus ( Je suis le seul qui utilise ce pc, le pc pour la famille est dans le salon mais je n'y vais presque jamais )

Au début je voulais même retirer le pass admin quand je suis log car vu que je suis le seul sur la machine je ne voulais pas me rajouter des choses à faire ( Si je met sudo je sais ce que cela veux dire ).
Mais au final je ne l'ai pas fait car comme je ne suis pas encore un spécialiste je préfère voir à quel moment il faut un pass ou pas.

Si je voulais changer le systemctl start c'est pour lancer plex media server depuis kde connect ou avec un script sans devoir être sur le pc et pouvoir regarder directement sur la télé sans devoir aller écrire un pass admin.

Je vais voir cette nuit ce que ça donner sur la vm. ( Je test tout sur la vm durant plusieurs jours avant de le faire en dur pour éviter justement tout problème )

Merci pour ton aide

Application spécifique dans sudoers

#9Messageil y a 4 ans

Bon j'avais écris un gros pavé car je n'ai pas réussi à le faire marcher. :roll:
Mais après 2h de recherche j'ai ENFIN réussi a trouver la solution.

J'ai rajouter dans 99-manjaro.rules

polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units") {
    polkit.log("action=" + action)
    polkit.log("subject=" + subject)
    polkit.log("unit="+action.lookup("unit"))
    polkit.log("verb="+action.lookup("verb"))
    if (action.lookup("unit") == "minidlna.service" ||
        action.lookup("unit") == "plexmediaserver.service" ||
        action.lookup("unit") == "glouglou.service") {
        var verb = action.lookup("verb");
        if (verb == "start" || verb == "stop" || verb == "restart") {
            polkit.log("returning YES")
            return polkit.Result.YES;
        }
    }
}
polkit.log("returning NO") });
Avec cela et systemctl start minidlna :pompom: CA MARCHE !!!

J'aimerai savoir si c'est bien fait avant de le faire en dur.

Merci
Répondre