Linux

Fermé
eliza_b Messages postés 340 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 août 2014 - 20 janv. 2009 à 17:18
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 - 23 janv. 2009 à 17:51
Bonjour à tous,

J'ai besoin de votre aide.

Voici mon probléme.

Je suis sous linux et en tant que stagiaire, je dois faire un script qui permet de limiter les droits de lancement de certains services. alors je m'explique: je dois faire de tel sorte que quand un utilisateur (qui est sur le réseau) se connecte, il pourra voire les services (exemple:ftp, telnet...) mais ne pourra pas les lancé: du genre quan il le lance, il aurra un message comme koi, il n'a pas les droits. Je sais pas comment m'y prendre.

Merci d'avance,


PS: je suis sous centos.
A voir également:

3 réponses

mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
20 janv. 2009 à 18:58
De base c'est normalement déjà le cas. Sous debian par exemple les scripts permettant de lancer, relancer, ou stopper dans un service sont dans /etc/init.d :
(mando@aldur) (~) $ ls -l /etc/init.d/*
-rwxr-xr-x 1 root root  2344 nov 14 11:55 /etc/init.d/acpid
-rwxr-xr-x 1 root root  8820 fév 26  2008 /etc/init.d/alsa-utils
-rwxr-xr-x 1 root root  6464 jui  7  2008 /etc/init.d/apache2
...

Comme tu le vois ces scripts appartiennent à root et au groupe root. Or un utilisateur normal ne s'appelle pas root et n'appartient pas au groupe root (voir /etc/groups) :
(mando@aldur) (~) $ groups
mando dialout cdrom floppy audio video plugdev scard

Tu connais sans doutes les notions de droits sous linux (r: read, w:write, x:execute). Pour un fichier on distingue trois triplets rwx : dans l'ordre, le propriétaire (ici root), le groupe (ici le groupe root), et les autres. Si tu regardes les droits dans ce que je t'ai reporté, seul l'utilisateur root peux écrire dans ces scripts, et tout le monde (propriétaire+groupe+les autres) peuvent lire leur contenu et les exécuter.

Note que tu peux changer le propriétaire d'un fichier ou le groupe associé à un fichier avec les commandes chown et chgrp (à condition d'en être propriétaire ou d'être root). Pour plus d'informations :
man chown
man chgrp

Dans ton cas il suffirait de retirer les droits en exécution sur les scripts qui ne doivent pas être lancés à l'aide de la commande chmod. Mais en soit ça n'a pas d'intérêt car un script ne fait qu'appeler d'autres commandes que l'on peut taper manuellement. C'est pour ca que debian ne restreint pas l'exécution des scipts des service, le script plantera lamentablement s'il est lancé par un utilisateur qui n'a pas assez de droits :
(mando@aldur) (~) $ /etc/init.d/apache2 restart
Restarting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
 failed!
...
(root@aldur) (~) # /etc/init.d/apache2 restart
Restarting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting .apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
.
(root@aldur) (~) #

De manière générale c'est une mauvaise idée de tenter de limiter les droits d'un utilisateur en charcutant les droits, le propriétaire ou les groupes, en général ils sont correctement configurés et il ne faut pas y toucher. Car tu risques de faire des bêtises et en plus, rien n'empêche un utilisateur d'installer dans son home son propre serveur ftp si ca l'amuse. De plus un utilisateur ne peut a priori pas intervenir sur un serveur lancé par root. Si le but c'est juste de l'empêcher de lancer un serveur ftp il vaut mieux intervenir sur la configuration du pare-feu (iptables...).

Bonne chance
0
eliza_b Messages postés 340 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 août 2014 10
21 janv. 2009 à 12:01
Bonjour,

Merci à mamiemando pour ta réponse,

Je pense que je me suis pas bien exprimé,

Voilà, ce que je demande c'est de bloquer le lancement de certains services à un utilisateur qui avait le droit de les lancer auparavant .
0
eliza_b Messages postés 340 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 20 août 2014 10
23 janv. 2009 à 16:27
Bonjour mamiemando,
Vas y aide moi stp. Je galère la depuis l'autre jour,

Merci d'avance,
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 783
23 janv. 2009 à 17:51
Pour moi restreindre un service revient à restreindre les droits sur les exécutables concernés et/ou leur script de lancement. Ces droits se voient avec un "ls -l" et se corrigent à l'aide des commandes "chown", "chgrp" et "chmod". Pour plus d'infos :
man ls
man chown
man chgrp
man chmod

En temps normal tu n'as pas à toucher à ces droits, car ils sont correctement configurés de base. Par exemple dans l'exemple que je t'ai donné on voit que mando n'a pas les droits suffisant pour (re)lancer correctement un serveur apache. Tu peux étoffer les scripts de lancement de service pour contrôler qui les lance.

Exemple :
#!/bin/bash
whoami=`whoami`
echo "$whoami lance le script"
if [ $whoami != "root" ]; then
    echo "droits insuffisants"
    exit
fi

echo "suite du script"

Mais en soit ce n'est pas top de modifier ces scripts car ils ne font qu'appeler par la suite un binaire qui peuvent être appelés directement par l'utilisateur, et ils sont susceptibles d'être écrasés par des mises à jour ultérieures. Il faut alors soit corriger les droits de ces binaires (dangereux) soit laisser le script planter lamentablement faute de droits suffisants (ce que fait par exemple apache dans l'exemple que je t'ai donné).

Le principe reste le même quelque soit le serveur que tu lances (telnet ou ssh) (ce qui est a priori ce que tu entends par service). Si tu souhaites également restreindre les droits en tant que client (telnet ou ssh) il faut corriger les droits des binaires correspondants mais encore une fois c'est une mauvaise idée.

Dans tous les cas il vaut mieux bloquer un utilisateur au niveau du pare-feu de la machine qu'au niveau des scripts ou des binaires car il ne pourra pas y couper.

Bonne chance
0