CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Droits root pour exécuter uniquement 1 script

DébutPage précedente
1
Page suivantePage suivante
[Soft]Ware [Soft]Ware
MP
Niveau 47
28 juin 2024 à 16:41:00

Salut :ok:

Je suis quasiment sûr que c'est possible mais je ne sais plus comment.

Le script script.sh nécessite des droits root pour fonctionner correctement.

L'utilisateur toto est un compte Machine-To-Machine (SSH) qui n'est pas root.

Comment faire pour que toto puisse obtenir les permissions root uniquement pour exécuter ce script et rien d'autre ?

Est-ce que je peux faire ça via une configuration Sudo ? Il me semble que sudo va demander un mot de passe, ce qui n'est pas souhaitable pour un compte M2M automatique ? À moins que j'ai raté quelque chose.

Il me semble qu'il y a une autre solution, peut-être meilleure, via les droits du fichier directement, plus précisément via le bit S ou s ?

Comment est-ce qu'il faudrait configurer ces permissions alors ? J'imagine que script.sh devrait avoir comme owner:group root:toto, et le bit s je le met où ? De façon à ce que toto puisse prendre l'identité root seulement à l'exécution ?
Il faudrait aussi que toto puisse exécuter sans pouvoir modifier le script (donc permission execute mais pas write).

Est-ce que je suis sur la bonne piste ou bien je fais fausse route ?

:merci:

SeiferGamer]57 SeiferGamer]57
MP
Niveau 7
28 juin 2024 à 18:34:14

Salut mon pote https://image.noelshack.com/fichiers/2018/04/4/1516883601-pascalmcmo4.png

T'es sur la bonne piste avec le setuid bit, ça pourrait faire le taf sans que sudo demande un mot de passe. Voici comment tu peux faire ça https://image.noelshack.com/fichiers/2019/30/6/1564241042-merde-il-a-avast.png

Change le propriétaire du script ,l faut que le script soit possédé par root

sudo chown root:toto /path/to/script.sh

Configure les permissions ,donne les permissions nécessaires et mets le setuid bit:

sudo chmod 4750 /path/to/script.sh

Avec ça, quand l'utilisateur toto exécute script.sh, il aura les permissions root juste pour ce script https://image.noelshack.com/fichiers/2018/02/6/1515878370-pascalmcmo15.png

Mais dis-moi: tu fais ça dans quel cadre https://image.noelshack.com/fichiers/2021/10/4/1615417809-sans-titre.png ?

[Soft]Ware [Soft]Ware
MP
Niveau 47
29 juin 2024 à 15:11:41

Salut, merci pour la réponse :ok:

J'ai fait un test rapide avec le script suivant :

#!/bin/bash
echo "you are : $(whoami)"
service --status-all | tail -n 1

j'ai utilisé service parce qu'il ne peut fonctionner qu'avec root, et tail parce que osef de la liste complète :hap:

Les permissions du fichier sont les suivantes :

 ls -lh
-rwsr-x--- 1 root toto 72 29 juin  14:17 test.sh

Il fonctionne correctement en root :

toto@debian:~$ sudo ./test.sh
you are : root
 [ + ]  udev

Par contre ça ne fonctionne pas avec seulement le SUID :

toto@debian:~$ ./test.sh
you are : toto
./test.sh: ligne 3: service : commande introuvable

Après une recherche rapide, je me rend compte qu'en fait ce n'est pas une bonne façon de faire.
https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts
Le kernel va détecter qu'il s'agit d'un script lorsque qu'il exécute un fichier avec SUID, et refuser son exécution, car il y a un risque de propagation.

Mais finalement on peut faire pareil voire mieux avec sudo.

Alors j'ai d'abord remis les permissions du fichier comme suit:

chmod 740 test.sh
chown root:root test.sh
ls -lh
-rwxr----- 1 root root 72 29 juin  14:17 test.sh

Puis modifié le fichier /etc/sudoers :

root@debian:~# grep toto /etc/sudoers
toto    debian=(root:toto) NOPASSWD: /home/toto/test.sh

Test d'exécution du script sans sudo :

toto@debian:~$ ./test.sh
-bash: ./test.sh: Permission non accordée

Permission refusée, parfait.

Test d'exécution du script avec sudo :

toto@debian:~$ sudo ./test.sh
you are : root
 [ + ]  udev

ça fonctionne, et le mot de passe n'a pas été demandé.

Test de la commande service qui est exécutée dans le script, mais sans le script :

toto@debian:~$ service --status-all
-bash: service : commande introuvable
toto@debian:~$ sudo service --status-all
[sudo] Mot de passe de toto :
Sorry, user toto is not allowed to execute '/usr/sbin/service --status-all' as root on debian.

Sans sudo, la commande n'est pas disponible, c'est normal.
Avec sudo, cette fois le mot de passe est demandé. Et la permission est refusée.

Voilà, parfait :ok:

chaussette2fer chaussette2fer
MP
Niveau 5
22 juillet 2024 à 09:00:07

Je te conseille de faire très attention à ta manière d'utiliser le SUID, il est très facile de le détourner pour obtenir les privilèges root sur ta machine, dans le cas où un attaquant aurait déjà eu un point d'entrée. Je ne sais pas sur quelle machine tourne le script, si elle est exposée ou non etc... Mais fais quelques recherches avant de poser des SUID à tout va :) .

[Soft]Ware [Soft]Ware
MP
Niveau 47
22 juillet 2024 à 10:38:52

Le 22 juillet 2024 à 09:00:07 :
Je te conseille de faire très attention à ta manière d'utiliser le SUID, il est très facile de le détourner pour obtenir les privilèges root sur ta machine, dans le cas où un attaquant aurait déjà eu un point d'entrée. Je ne sais pas sur quelle machine tourne le script, si elle est exposée ou non etc... Mais fais quelques recherches avant de poser des SUID à tout va :) .

Bonjour,
Oui en effet c'est la conclusion que j'ai tiré sur mon dernier post.
La solution était l'utilisation du Sudo. :ok:

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment