[Systemd] Droits sur certains services uniquement (Résolu)
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
[Systemd] Droits sur certains services uniquement (Résolu)
Bonjour,
je voudrais savoir s'il est possible de donner aux utilisateurs ou groupes des droits sur la gestion de certains services uniquement sans passer par sudo.
Merci.
je voudrais savoir s'il est possible de donner aux utilisateurs ou groupes des droits sur la gestion de certains services uniquement sans passer par sudo.
Merci.
Dernière modification par Cafeinoman le dim. 22 juin 2014, 15:35, modifié 1 fois.
Re: [Systemd] Droits sur certains services uniquement
Plop,
Je ne pense pas que ça soit possible sans prendre d'énormes risques.
Par contre, si tu lis bien le man de sudo, tu verras qu'il est possible de gérer très très finement les actions autorisées.
Et sinon, ce que tu pourrais faire (mais c'est super dangereux), c'est créer un
Bon courage
Je ne pense pas que ça soit possible sans prendre d'énormes risques.
Par contre, si tu lis bien le man de sudo, tu verras qu'il est possible de gérer très très finement les actions autorisées.
Et sinon, ce que tu pourrais faire (mais c'est super dangereux), c'est créer un
<user>.target
et un dossier<user>.target.wants
en 755
pour <user>
. Ensuite, les user peuvent poser leurs services dans ce dossier .wants
. Je répète, c'est ultra dangereux.Bon courage
psycho : Latitude E6430 ; BTRFS over LUKS, UEFI & secureboot
schizo : Acer 8942G ; KDE 4, BTRFS over LUKS ; W7 (prend la poussière)
toxo : i5-6600K, bspwm, VM W10 en PCI-passthrough
deadman : Lenovo Thinkcenter, OpenBSD 6.0-stable
popho.be : Kimsufi KS-3, FreeBSD 11.0
Loi de Murphy : Le jour où tu as besoin d'une backup, tu te dis que tu aurais dû en mettre en place
Venez sur IRC en plus du forum !
schizo : Acer 8942G ; KDE 4, BTRFS over LUKS ; W7 (prend la poussière)
toxo : i5-6600K, bspwm, VM W10 en PCI-passthrough
deadman : Lenovo Thinkcenter, OpenBSD 6.0-stable
popho.be : Kimsufi KS-3, FreeBSD 11.0
Loi de Murphy : Le jour où tu as besoin d'une backup, tu te dis que tu aurais dû en mettre en place
Venez sur IRC en plus du forum !
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement
Ok, merci. Le but que ce soit l'administrateur qui donne les accès, donc je vais plutôt de sudo...
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement
Le problème avec sudo c'est que je ne vois pas de moyen de démarrer des services de systemd. Par contre je suis tombé la-dessus. Cette méthode pose-t-elle des problèmes de sécurité?
- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement
Tout dépend comment est écrit le code C et quels services sont concernés... Bref si les choses sont bien faites il n'y a pas de souci.Cafeinoman a écrit :Cette méthode pose-t-elle des problèmes de sécurité?
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement
Pour l'instant, c'est surtout pour le lancement et l'arrêt de serveurs (tomcat et wildfly), donc tant que ça ne concerne pas les machines de prod, rien de critique. Pour le code C, il est simplissime, un appel système pour lancer un script qui fait systemctl start ou stop sur le service, donc je ne vois pas où peut être le problème de sécurité...
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement
Solution adoptée pour l'instant :
/root/Scripts/TomcatStart.sh (root:root 700)
lanceur C (root:root 705)
Si vous voyez un problème n'hésitez pas!
/root/Scripts/TomcatStart.sh (root:root 700)
Code : Tout sélectionner
#!/bin/bash
if systemctl | grep tomcat > /dev/null
then
close_tomcat=$(zenity --entry --text="Tomcat en fonctionnement. Eteindre le serveur (o/N)")
if [ "$close_tomcat"=="o" ]
then
systemctl stop tomcat8
exit
fi
firefox skynet:8080
else
systemctl start tomcat8
sleep 2
firefox skynet:8080
fi
exit
Code : Tout sélectionner
#include <unistd.h>
int main()
{
setuid(0);
system("/root/Scripts/TomcatStart.sh");
return 0;
}
- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement (Résol
Tu es conscient que tu lances firefox en root ?
De plus question sécurité c'est assez moyen... Faire confiance au contenu d'un script j'aime pas trop...
Le processus est lancé avec des droits un peu bizarre, à moitié root et à moitié utilisateur : root:users au lieu de root:root
Pour vérifier que tomcat est bien lancé, je ferais plutôt quelque chose comme ceci :
Bref je verrais bien ce script lancé avec l'utilisateur :
Et tu écrit le code C pour
Le compiler :
Lui donner les droits root:
De plus question sécurité c'est assez moyen... Faire confiance au contenu d'un script j'aime pas trop...
Le processus est lancé avec des droits un peu bizarre, à moitié root et à moitié utilisateur : root:users au lieu de root:root
Pour vérifier que tomcat est bien lancé, je ferais plutôt quelque chose comme ceci :
Code : Tout sélectionner
systemctl show --property=ActiveState tomcat8
Code : Tout sélectionner
#!/bin/bash
if systemctl show --property=ActiveState tomcat8.service | grep -q active ; then
close_tomcat=$(zenity --entry --text="Tomcat en fonctionnement. Eteindre le serveur (o/N)")
if [ "$close_tomcat"=="o" ] ; then
#systemctl stop tomcat8
/root/Scripts/controlTomcat 0
else
firefox skynet:8080
fi
else
#systemctl start tomcat8
/root/Scripts/controlTomcat 1
sleep 2
firefox skynet:8080
fi
Code : Tout sélectionner
/root/Scripts/controlTomcat
Code : Tout sélectionner
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#define APP_UID 0
#define APP_GID 0
int main(int argc, char *argv[])
{
int r = 2;
if (argc != 2) {
return 2;
}
if (setgid(APP_GID) != 0)
{
perror("Fail to setgid");
return 3;
}
if (setuid(APP_UID) != 0)
{
perror("Fail to setuid");
return 4;
}
if (strcmp(argv[1], "0") == 0)
{
r = execl("/usr/bin/systemctl", "systemctl", "stop", "tomcat8.service", NULL);
}
else if (strcmp(argv[1], "1") == 0)
{
r = execl("/usr/bin/systemctl", "systemctl", "start", "tomcat8.service", NULL);
}
return r;
}
Code : Tout sélectionner
gcc -std=c89 -Wall -Wextra -O2 t.c -o controlTomcat
Code : Tout sélectionner
# chown root:root controlTomcat
# chmod ug+s controlTomcat
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement (Résol
Effectivement, pas très malin de lancer Firefox comme ça
Par contre je suis grand débutant en C, tu peux m'expliquer un peu le début du code? Ainsi que les arguments du compilateur...?
Merci en tout cas!
EDIT : après un essai, cela ne fonctionne pas... j'ai mis le script en root:user 750, l'erreur vient-elle de là?

Par contre je suis grand débutant en C, tu peux m'expliquer un peu le début du code? Ainsi que les arguments du compilateur...?
Merci en tout cas!
EDIT : après un essai, cela ne fonctionne pas... j'ai mis le script en root:user 750, l'erreur vient-elle de là?
Dernière modification par Cafeinoman le dim. 22 juin 2014, 18:33, modifié 1 fois.
- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement (Résol


Désolé mais je suis relativement sérieux. Il y a un manuel qui explique ce que fait chaque fonction. Pas besoin de connaitre le C.
Mais en gros on vérifie que l'on a passé un argument.
On applique setgid et setuid pour que tous les processus lancés depuis ce programme soit lancés avec les droits de APP_GID (0) et APP_UID (0), soit root:root
Et enfin en fonction de la valeur de l'unique argument passé on arrête ou on démarre le service.
Pour le compilateur : https://gcc.gnu.org/onlinedocs/gcc-4.9. ... tion-Index
Mais en gros :
- -std=c89 : Définit le langage utilisé, on code en C89, un peu inutile dans ce cas là...
- -Wall -Wextra : Active des warning de compilation
- -O2 : Permet une optimisation correct du code
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Re: [Systemd] Droits sur certains services uniquement (Résol
Y aurait-il des moyens plus sûrs avec les capabilities ? Voir ICI
- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement (Résol
C'est peut être possible, mais il est vrai que je ne me suis jamais intéressé aux capabilities nécessaire pour utiliser systemctl, si c'est faisable.
En tout cas ce que je t'ai écrit est pas mal sécurisé.
En tout cas ce que je t'ai écrit est pas mal sécurisé.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement (Résol
Ok, j'oublie la fénaiantisebenjarobin a écrit :![]()
![]()

- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement (Résol
Surement... Il te faut faire dans cet ordre :
Code : Tout sélectionner
chown root:root controlTomcat
chmod 555 controlTomcat
chmod ug+s controlTomcat
# Ou
chown root:root controlTomcat
chmod 6555 controlTomcat
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement (Résol
pour le script
pour le binaire
Et toujours erreur ligne 8 du script à l'appel du binaire...
Code : Tout sélectionner
chown root:root tomcat.sh
chmod 755 tomcat.sh
Code : Tout sélectionner
chown root:root controlTomcat
chmod 6555 controlTomcat
- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement (Résol
Quel erreur ? Quel code d'erreur ? Arrives tu as lancer
controlTomcat
depuis une console en utilisateur ? Est ce que cela fonctionne correctement ?Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement (Résol
Code : Tout sélectionner
[francois@skynet Script]$ ./tomcat.sh
./tomcat.sh: ligne 8: /root/Scripts/controlTomcat: Permission non accordée
- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement (Résol
J'ai testé une 2ième fois, aucun souci ici... Bon on va tout reprendre...
Quel est la sortie de
Euh, j'ai un doute je crois que c'est un peu normal que cela ne marche pas... Ton utilisateur ne peux pas aller dans
Tu dois placer impérativement controlTomcat dans un chemin accessible par l'utilisateur...
Quel est la sortie de
Code : Tout sélectionner
mount
stat /root/Scripts/controlTomcat
ls -l /root/Scripts/controlTomcat
LC_ALL=C /root/Scripts/controlTomcat 0; echo $?
/root/Scripts/
. Tu peux essayer de faire un ls -l /root/Scripts/
cela ne marchera pas.Tu dois placer impérativement controlTomcat dans un chemin accessible par l'utilisateur...
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- Hankyu
- Messages : 30
- Inscription : dim. 28 avr. 2013, 16:34
Re: [Systemd] Droits sur certains services uniquement (Résol
Code : Tout sélectionner
[francois@skynet ~]$ mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sys on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
dev on /dev type devtmpfs (rw,nosuid,relatime,size=4044632k,nr_inodes=1011158,mode=755)
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
/dev/mapper/arch_vg-root_lv on / type ext4 (rw,relatime,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=22,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
tmpfs on /tmp type tmpfs (rw)
/dev/sdb2 on /boot type ext2 (rw,relatime)
/dev/mapper/arch_vg-home_lv on /home type ext4 (rw,relatime,data=ordered)
/dev/mapper/arch_vg-var_lv on /var type ext4 (rw,relatime,data=ordered)
/dev/mapper/arch_vg-shared_lv on /home/shared type ext4 (rw,relatime,data=ordered)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=809584k,mode=700,uid=1000,gid=100)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=100)
gvfsd-fuse on /root/.gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
Code : Tout sélectionner
[francois@skynet ~]$ stat /root/Scripts/controlTomcat
stat: impossible d'évaluer « /root/Scripts/controlTomcat »: Permission non accordée
[francois@skynet ~]$ sudo stat /root/Scripts/controlTomcat
[sudo] password for root:
Fichier : « /root/Scripts/controlTomcat »
Taille : 7387 Blocs : 16 Blocs d'E/S : 4096 fichier
Périphérique : fe00h/65024d Inœud : 1057028 Liens : 1
Accès : (6555/-r-sr-sr-x) UID : ( 0/ root) GID : ( 0/ root)
Accès : 2014-06-22 19:08:04.706562484 +0000
Modif. : 2014-06-22 15:56:37.274914219 +0000
Changt : 2014-06-22 18:27:08.195566660 +0000
Créé : -
Code : Tout sélectionner
[francois@skynet ~]$ ls -l /root/Scripts/controlTomcat
ls: impossible d'accéder à /root/Scripts/controlTomcat: Permission non accordée
[francois@skynet ~]$ sudo ls -l /root/Scripts/controlTomcat
-r-sr-sr-x 1 root root 7387 22 juin 15:56 /root/Scripts/controlTomcat
Code : Tout sélectionner
[francois@skynet ~]$ LC_ALL=C /root/Scripts/controlTomcat 0
bash: /root/Scripts/controlTomcat: Permission non accordée
[francois@skynet ~]$ sudo LC_ALL=C /root/Scripts/controlTomcat 0
[francois@skynet ~]$ systemctl status tomcat8
● tomcat8.service - Tomcat 8 servlet container
Loaded: loaded (/usr/lib/systemd/system/tomcat8.service; disabled)
Active: inactive (dead)
[francois@skynet ~]$ sudo LC_ALL=C /root/Scripts/controlTomcat 1
[francois@skynet ~]$ systemctl status tomcat8
● tomcat8.service - Tomcat 8 servlet container
Loaded: loaded (/usr/lib/systemd/system/tomcat8.service; disabled)
Active: active (running) since dim. 2014-06-22 19:39:59 UTC; 2s ago
Process: 13061 ExecStart=/usr/bin/jsvc -Dcatalina.home=${CATALINA_HOME} -Dcatalina.base=${CATALINA_BASE} -Djava.io.tmpdir=/var/tmp/tomcat8/temp -cp /usr/share/java/commons-daemon.jar:/usr/share/java/eclipse-ecj.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar -user tomcat8 -java-home ${TOMCAT_JAVA_HOME} -pidfile /var/run/tomcat8.pid -errfile SYSLOG -outfile SYSLOG $CATALINA_OPTS org.apache.catalina.startup.Bootstrap (code=exited, status=0/SUCCESS)
Main PID: 13066 (jsvc)
CGroup: /system.slice/tomcat8.service
├─13064 jsvc.exec -Dcatalina.home=/usr/share/tomcat8 -Dcatalina.base=/usr/share/tomcat8 -Djava.io.tmpdir=/var/tmp/tomcat8/temp -cp /usr/share/ja...
├─13065 jsvc.exec -Dcatalina.home=/usr/share/tomcat8 -Dcatalina.base=/usr/share/tomcat8 -Djava.io.tmpdir=/var/tmp/tomcat8/temp -cp /usr/share/ja...
└─13066 jsvc.exec -Dcatalina.home=/usr/share/tomcat8 -Dcatalina.base=/usr/share/tomcat8 -Djava.io.tmpdir=/var/tmp/tomcat8/temp -cp /usr/share/ja...

- benjarobin
- Maître du Kyudo
- Messages : 17580
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Systemd] Droits sur certains services uniquement (Résol
C'est tellement évident que je ne pensais pas que tu aurais fait une telle chose... Et moi je n'ai pas réfléchi, je n'ai jamais fait mes tests dans /root, cela ne peut pas marcher. Uniquement root peut accéder à /root.Cafeinoman a écrit :C'est grave docteur?
Depuis le début tu m'as laissé pensé que tomcat.sh était dans le même dossier que controlTomcat
Tu dois placer controlTomcat par exemple dans le même dossier que ./tomcat.shEuh, j'ai un doute je crois que c'est un peu normal que cela ne marche pas... Ton utilisateur ne peux pas aller dans /root/Scripts/. Tu peux essayer de faire un ls -l /root/Scripts/ cela ne marchera pas.
Tu dois placer impérativement controlTomcat dans un chemin accessible par l'utilisateur...
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum