[systemd] Pouvoir faire systemctl sans mot de passe sur un service

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
Avatar de l’utilisateur
reflets de vert
yeomen
Messages : 294
Inscription : mar. 23 mars 2010, 15:17
Localisation : Strasbourg
Contact :

[systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par reflets de vert » mar. 06 déc. 2016, 00:11

Bonjour,

Je voudrais pouvoir laisser accès à tous les utilisateurs à systemctl pour pouvoir arrêter un timer.

Actuellement je fais

Code : Tout sélectionner

sudo systemctl stop test.timer
, et je voudrais juste une commande qui me demande rien comme mot de passe.

J'ai fait un script:

Code : Tout sélectionner

#!/bin/bash

#donc cette commande va modifier l'activation d'un timer sans mot de passe

systemctl start test.timer
Et un deuxième script avec stop test.timer

Je peux mettre toutes les autorisations que je veux sur ces scripts, que j'ai d'ailleurs mis dans /usr/bin, ça ne change rien, il demande le mot de passe.

J'ai mis cette ligne dans /etc/sudoers:

Code : Tout sélectionner

daniel portablosaure =NOPASSWD: /usr/bin/systemctl
Ça ne change rien.

J'ai donc fait

Code : Tout sélectionner

cd /usr/bin
sudo chmod u+s systemctl
Bon là ça marche sans password! Mais je me demande si c'est pas dangereux comme méthode… j'ai été un peu inquiet et j'ai remis les droits d'origine…
J'utilise console-tdm, dwm, …
(bon moi aussi j'écris en bépo - même si ça se voit pas)

oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par oktoberfest » mar. 06 déc. 2016, 08:00

Salut,

positionner le setuid sur systemctl est très dangereux car en fait toute personne qui va lancer systemctl lancera cette commande avec les mêmes droits que le propriétaire du fichier /usr/bin/systemctl... c'est-à-dire root.

J'ai fait un essai chez moi et cela fonctionne avec le fichier suivant dans /etc/sudoers.d :

Code : Tout sélectionner

daniel portablosaure=NOPASSWD: /usr/bin/systemctl stop test.timer
Ce qui est important c'est que la commande que tu lances ait exactement le même nom que celle dans ton fichier sudoers.d. Dans mon cas cela signifie que :

Code : Tout sélectionner

sudo /usr/bin/systemctl stop test.timer
lancera la commande avec les droits root

Code : Tout sélectionner

sudo systemctl stop test.timer
ne fonctionnera pas.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM

Avatar de l’utilisateur
reflets de vert
yeomen
Messages : 294
Inscription : mar. 23 mars 2010, 15:17
Localisation : Strasbourg
Contact :

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par reflets de vert » lun. 26 déc. 2016, 00:21

J'ai fait correspondre les commandes.

fichier sudoers:

Code : Tout sélectionner

## User privilege specification
##
root ALL=(ALL) ALL
daniel ALL=(ALL) NOPASSWD: /usr/bin/systemctl --no-ask-password start test.timer[
daniel ALL=(ALL) NOPASSWD: /usr/bin/systemctl --no-ask-password stop test.timer
## 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 
Et script:

Code : Tout sélectionner

#!/bin/bash

#donc cette commande va modifier l'activation d'un timer sans mot de passe

exec /usr/bin/systemctl --no-ask-password stop test.timer
Ça ne marche pas.

La commande me dit:

Code : Tout sélectionner

 [daniel@portablosaure ~]$ /usr/bin/systemctl --no-ask-password stop test.timer
Failed to stop test.timer: Interactive authentication required.
See system logs and 'systemctl status test.timer' for details.
J'utilise console-tdm, dwm, …
(bon moi aussi j'écris en bépo - même si ça se voit pas)

benjarobin
Maître du Kyudo
Messages : 15923
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par benjarobin » lun. 26 déc. 2016, 00:26

Il faut lancer systemctl avec sudo...
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Avatar de l’utilisateur
reflets de vert
yeomen
Messages : 294
Inscription : mar. 23 mars 2010, 15:17
Localisation : Strasbourg
Contact :

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par reflets de vert » lun. 26 déc. 2016, 00:36

Je veux désactiver et activer un timer sans avoir à faire de mot de passe, pour pouvoir le faire avec des touches de raccourci.
J'utilise console-tdm, dwm, …
(bon moi aussi j'écris en bépo - même si ça se voit pas)

benjarobin
Maître du Kyudo
Messages : 15923
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par benjarobin » lun. 26 déc. 2016, 11:10

Et ?
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Avatar de l’utilisateur
reflets de vert
yeomen
Messages : 294
Inscription : mar. 23 mars 2010, 15:17
Localisation : Strasbourg
Contact :

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par reflets de vert » lun. 26 déc. 2016, 11:29

Ben quand on met sudo dans la commande dans /etc/sudoers, c'est à dire

Code : Tout sélectionner

 daniel ALL=(ALL) NOPASSWD: sudo /usr/bin/systemctl --no-ask-password stop test.timer
ben il aime pas, et dans le script il demande le password!

Il doit y avoir une solution, puisque que reboot et poweroff marchent bien
J'utilise console-tdm, dwm, …
(bon moi aussi j'écris en bépo - même si ça se voit pas)

benjarobin
Maître du Kyudo
Messages : 15923
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par benjarobin » lun. 26 déc. 2016, 11:32

Il ne faut pas mettre sudo ici, il faut mettre sudo dans tons script.
Sinon pour gérer ceci proprement c'est via polkit, mais je ne sais pas si c'est possible de matcher juste sur le nom du service
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Avatar de l’utilisateur
reflets de vert
yeomen
Messages : 294
Inscription : mar. 23 mars 2010, 15:17
Localisation : Strasbourg
Contact :

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par reflets de vert » lun. 26 déc. 2016, 22:40

Quand on met sudo dans le script il demande le mot de passe sudo à l'éxécution.

Autoriser le script avec visudo ne change rien. Il demande le mot de passe pour inactiver le timer. Et pas pour activer, mais il l'active pas non plus.

Pour polkit j'ai regardé. Je sens que je vais m'amuser à avoir plein de beaux messages d'erreurs avant que j'arrive à autoriser ces commandes (ma manière polie de donner mon avis sur la documentation - j'ai vu pire - je comprends pas leur langage: bêtement je vais mettre org.freedesktop.test.timer.stop c'est pas ça?? :mrgreen: ).

Donc je peux tout effacer ce que j'ai rajouté dans visudo, qui n'arrivera pas à autoriser systemctl?

Il y a une sorte de fausse redondance?

Bon ok je cherche.
J'utilise console-tdm, dwm, …
(bon moi aussi j'écris en bépo - même si ça se voit pas)

oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par oktoberfest » mer. 28 déc. 2016, 22:27

Tu as du merdé quelque chose parce que chez moi ça marche. Voici mes fichiers :

/etc/systemd/system/essai.service

Code : Tout sélectionner

[Unit]
Description=essai

[Service]
ExecStart=/usr/bin/true
/etc/systemd/system/essai.timer

Code : Tout sélectionner

[Unit]
Description=essai

[Timer]
OnCalendar=fri *-*-* 1:0:0

[Install]
WantedBy=timers.target
cat /usr/local/bin/essai

Code : Tout sélectionner

/usr/bin/systemctl stop essai.timer
cat /etc/sudoers.d/essai

Code : Tout sélectionner

oktoberfest ALL=(ALL) NOPASSWD: /usr/local/bin/essai
Et maintenant je teste :

Code : Tout sélectionner

# systemctl start essai.timer
# su - oktoberfest
$ systemctl list-timers
NEXT                         LEFT          LAST                         PASSED        UNIT                         ACTIVATES
Thu 2016-12-29 00:00:00 CET  1h 38min left Wed 2016-12-28 09:55:30 CET  12h ago       logrotate.timer              logrotate.service
Thu 2016-12-29 00:00:00 CET  1h 38min left Wed 2016-12-28 20:00:33 CET  2h 21min ago  man-db.timer                 man-db.service
Thu 2016-12-29 00:00:00 CET  1h 38min left Wed 2016-12-28 09:55:30 CET  12h ago       shadow.timer                 shadow.service
Thu 2016-12-29 00:00:00 CET  1h 38min left Wed 2016-12-28 20:00:33 CET  2h 21min ago  updatedb.timer               updatedb.service
Thu 2016-12-29 10:10:33 CET  11h left      Wed 2016-12-28 10:10:33 CET  12h ago       systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Fri 2016-12-30 01:00:00 CET  1 day 2h left n/a                          n/a           essai.timer                  essai.service
Mon 2017-01-02 00:00:00 CET  4 days left   Tue 2016-12-27 11:45:26 CET  1 day 10h ago fstrim.timer                 fstrim.service
$ sudo /usr/local/bin/essai
$ systemctl list-timers
NEXT                         LEFT          LAST                         PASSED        UNIT                         ACTIVATES
Thu 2016-12-29 00:00:00 CET  1h 36min left Wed 2016-12-28 09:55:30 CET  12h ago       logrotate.timer              logrotate.service
Thu 2016-12-29 00:00:00 CET  1h 36min left Wed 2016-12-28 20:00:33 CET  2h 22min ago  man-db.timer                 man-db.service
Thu 2016-12-29 00:00:00 CET  1h 36min left Wed 2016-12-28 09:55:30 CET  12h ago       shadow.timer                 shadow.service
Thu 2016-12-29 00:00:00 CET  1h 36min left Wed 2016-12-28 20:00:33 CET  2h 22min ago  updatedb.timer               updatedb.service
Thu 2016-12-29 10:10:33 CET  11h left      Wed 2016-12-28 10:10:33 CET  12h ago       systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2017-01-02 00:00:00 CET  4 days left   Tue 2016-12-27 11:45:26 CET  1 day 10h ago fstrim.timer                 fstrim.service
J'obtiens bien ce qui est demandé : l'arrêt du timer par un utilisateur non root
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM

benjarobin
Maître du Kyudo
Messages : 15923
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [systemd] Pouvoir faire systemctl sans mot de passe sur un service

Message par benjarobin » mer. 28 déc. 2016, 22:41

Son problème est très simple, pour faire l'analogie avec ton exemple, il ne lance pas : /usr/local/bin/essai avec sudo
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Répondre