Limiter les commandes d'un utilisateur

Bonjour à tous,

Dans le cadre d’un projet perso, je souhaite offrir la possibilité à certains visiteurs authentifiés l’exécution de commande et scripts directement sur mon serveur debian (relance de service, changement de mot de passe, etc).

Quelle est selon vous la manière de faire la plus sécurisée ? J’ai cru comprendre qu’utiliser la lib_ssh2 associé à un compte SSH donc les commandes sont limitées par un truc genre lshell à l’air intéressant cependant lshell n’est plus mis à jour depuis longtemps.

Je pense que c’est mieux de faire ainsi que d’autoriser www-data dans le sudoers. Qu’en pensez vous ?

Merci pour vos conseils.

Perso moi j’aurais mis l’utilisateur en question dans le sudoers avec seulement les commandes autorisé.

Oui mais ça lui laisse la possibilité d’exécuter des trucs arbitraires dans sa session (au hasard : cat /dev/zero >/dev/null, parfait pour bien charger une machine).
Je pense que notre ami veut autoriser ses utilisateurs à n’exécuter qu’un tout petit nombre de commandes et rien d’autre.

Si tu veux vraiment tout verrouiller, fais en sorte que le “login shell” de tes utilisateurs pointe en réalité vers un script à toi (useradd -s), le script en question étant un menu interactif (choix 1,2,3…). Là ils auront pas d’autre choix que de faire ce qu’ils sont autorisés à faire, et s’ils arrêtent le script leur session SSH se déconnecte automatiquement (comme s’ils avaient fait exit dans une session bash).

Je pense aussi, ça évite toute la batterie de failles liées au serveur web et à l’interface web elle-même.

Il y a aussi la possiblité de programmer des scripts cgi (ou en langage C) qui disposent du bit suid pour pouvoir exécuter des commandes en root

cf ce tuto qui m’avait bien aidé :

blog.khemael.net/2010/08/26/de-l … -en-php/2/

syam a parfaitement compris ma problématique si ce n’est qu’au final je souhaite créer un utilisateur dédié à l’exécution de commandes maitrisées via un tunnel ssh depuis une page .php (via libssh2) !

La solution en C est je le pense, une excellente solution, cependant je ne me vois pas coder en C chaque commande “ls”, “htdigest”, “service mon_service restart”, etc (je perdrais trop de temps).

En tout cas, merci pour vos retours. Je dois reconnaitre être assez surpris que la limitation d’utilisateur Linux soit si peu documentée…

Ah ben dans ce cas là, j’avais mal compris et passer par sudo est certainement le plus simple à mettre en place (et pas moins sécurisé, du moment que c’est une page PHP qui contrôle le tout ça ne change rien).
Pour éviter de lister 36.000 commandes dans le sudoers, tu peux faire un script global pour toutes tes commandes, du genre :

#!/bin/sh case "$1" in restart-machin) service machin restart ;; htdigest) htdigest avec les arguments qui vont bien ;; *) echo "Commande non reconnue" ;; esac
Et dans sudoers tu autorises uniquement www-data à exécuter (sans mot de passe) ce script et rien d’autre.

Terrible ça me convient !

C’est moi où les adminsys documentent bien leurs travaux/recherches/projets perso alors que les dev (php notamment) rédige rarement des “How to” ?