Droits - SUID

Résolu
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   -  
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un problème pour régler les droits d'un fichier.
Caractéristiques :
-fichier shell (sh)
-appartenant à root
-Contient des commandes nécéssitant d'être super-utilisateur
-L'utilisateur ne doit pas pouvoir lire dans ce fichier

J'aimerai qu'un utilisateur quelconque puisse l'utiliser.
J'ai essayé avec
chmod 4711 fichier.sh, seulement je pense que la pseudo-execution de l'utilisateur ne suffit pas, il faut la lecture du super-utilisateur.

Comment faire ?
Je vous remercie d'avance.

10 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

-Contient des commandes nécéssitant d'être super-utilisateur
Il faut aussi penser pour les commandes contenu dans ton script.
Même si l'utilisateur peut lancer le script, s'il ne peux pas exécuter les commandes contenues dans le script .....
Tu vois ce que je veux dire?!

Pour invoquer un script shell, il faut avoir les droits de lecture et d'exécution.

La lecture puisque le shell doit lire les commandes à interpreter.

0
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   342
 
Salut lami20j

Oui, je vois ce que tu veux dire, je vais te donner mon exemple :
---------Script sensé etre executable pour tous--------
#!/bin/sh

#Pour demarrer WPA_SUPPLICANT avec parametres

wpa_supplicant -c/etc/wpa_supplicant.conf -w -Dwext -ieth1 &
ifup eth1
dhclient
---------------------------------------------------------------------

Le fichier wpa_supplicant.conf ne doit pas etre lisible ! Il contient le mot de passe du réseau en clair (droits 700).

Saurais-tu comment faire ?

PS : Après tout j'ai dit une bétise, le script que l'on execute peut être lisible
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Regarde un exemple
debian:/bin# cat /etc/nolire
password
debian:/bin# cat /usr/bin/fw.sh
#!/bin/sh

cat /etc/nolire

je crée un fichier dans /etc et ce n'est que root qui a accès
ensuite j'écrit un script dans /usr/bin

Voici les droits

debian:/bin# ls -l /etc/nolire
-rwx------ 1 root root 9 2007-02-25 19:56 /etc/nolire
debian:/bin# ls -l /bin/cat
-rwxr-xr-x 1 root root 21448 2006-08-31 14:25 /bin/cat
debian:/bin# ls -l /usr/bin/fw.sh
-rwxr-xr-x 1 root root 28 2007-02-25 19:57 /usr/bin/fw.sh


En fait c'est le cat qui a besoin de droit spéciaux puisque c'est lui qui va essayer de lire le fichier detenu par root
debian:/bin# chmod -v 4755 /bin/cat
Le mode d'accès de `/bin/cat' a été modifié à 4755 (rwsr-xr-x).


Donc je pense que dans ton cas il faut penser aux droits d'accès pour la commande wpa_supplicant puisque c'est elle qui va accèder au fichier wpa_supplicant.conf et pas l'utilisateur.
0
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   342
 
Ok, merci, ça fonctionne comme cela.

Je n'ai pas besoin de plus, mais par curiosité je voudrais savoir si il n'y a que cette possibilité ?
Car du coup ici, l'utilisateur peut executer wpa_supplicant et se connecter à n'importe quel réseaux .... :/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

mais, tu veux que les utilisateurs l'exécutent ou pas?
puisque si tu veux que le script soit exécuter que par root alors tu n'as qu'a regler les droits en conséquence.

si tu veux accorder des droits seulement à certains utilisateurs tu peux créer un groupe pour ça et tu fais les utilisateurs membres de ce groupe.

sinon tu peux aussi utiliser les ACLs
0
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   342
 
Non, le truc c'est qu'avec ce que je voulais faire, un utilisateur quelconque pouvait executer wpa_supplicant avec UN fichier de configuration défini (-c/etc/wpa_supplicant.conf) défini dans le script non modifiable. Si j'active le SUID alors il pourra taper
wpa_supplicant -c~/un_fichier_pas_bien.conf
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Je crois que tu n'as pas le choix, c'est le risque de SUID
A savoir que si jamais sur ton OS il y a une commnade de lecture de fichier avec le SUID, même le fichier de config pourra être lu

je pense que pour certains taches c'est bien d'être root et pas un utilisateur quelconque
0
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   342
 
Ah ok. Je te remercie pour tes réponses.
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
je pense que tu peux mettre problème résolu :-)
si jamais je trouve autre chose (les droits c'est un sujet qui m'interesse ;-)) je te tiendrai au courant.
0
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   342
 
:) Merci, bonne soirée !
0
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   342
 
On m'a donné une solution : écrire un programme executable.

Tu te sers de exec ou execv pour executer les commandes shell critiques.
Et ça passe (avec un petit coup du bit suid) :)
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
c'est la 1ère chose que j'ai pensé :-)

il me semble que tu fait du C donc tu n'as qu'à écrire ton script :-))
0
ekra Messages postés 1870 Date d'inscription   Statut Membre Dernière intervention   342
 
Oui, c'est déjà fait.

Merci de ton aide !
Au prochain problème ;)

Résumé :
Pour qu'un utilisateur quelquonque puisse executer une série d'actions prédéfinies requirant des privilèges (root) , passer par un programme qui n'est pas de type script shell : ex C avec "exec()". Le propriétaire sera dans cet exemple root, et activera le bit SUID.
0