Il est difficile de gérer ce genre de permission au niveau des permissions du système de fichiers.
Ca doit pouvoir se faire à coup de selinux et consors, mais c'est certainement bien compliqué pour peu de chose.
La solution vers laquelle je m'orienterai pour ma part serait un shell restrictif qui autorise ou non l'execution des commandes en question.
Ca se code très bien en shell.
Exemple:
while (( ! $do_exit)) ; do
echo "exit or uname ?"
read cmd;
if [ "$cmd" != "exit" ] && [ "$cmd" != "uname" ] ; then
echo "$cmd not allowed";
elif [ "$cmd" == "exit" ] ; then
do_exit=1;
else
uname;
fi;
done
[binarym@gco]:~% su - test
Password:
Pas de répertoire, connexion avec HOME=/
exit or uname ?
uname
Linux
exit or uname ?
ls
ls not allowed
exit or uname ?
uname -a
uname -a not allowed
exit or uname ?
uname | ls
uname | ls not allowed
exit or uname ?
exit
# Shell restrictif
Posté par LaBienPensanceMaTuer . En réponse au message compte utilisateur. Évalué à 5.
Ca doit pouvoir se faire à coup de selinux et consors, mais c'est certainement bien compliqué pour peu de chose.
La solution vers laquelle je m'orienterai pour ma part serait un shell restrictif qui autorise ou non l'execution des commandes en question.
Ca se code très bien en shell.
Exemple:
[binarym@gco]:~% grep test /etc/passwd 15:18
test:x:1001:1001::/home/test:/tmp/rshell.sh
[binarym@gco]:~% cat /tmp/rshell.sh
#!/bin/sh
do_exit=0
while (( ! $do_exit)) ; do
echo "exit or uname ?"
read cmd;
if [ "$cmd" != "exit" ] && [ "$cmd" != "uname" ] ; then
echo "$cmd not allowed";
elif [ "$cmd" == "exit" ] ; then
do_exit=1;
else
uname;
fi;
done
[binarym@gco]:~% su - test
Password:
Pas de répertoire, connexion avec HOME=/
exit or uname ?
uname
Linux
exit or uname ?
ls
ls not allowed
exit or uname ?
uname -a
uname -a not allowed
exit or uname ?
uname | ls
uname | ls not allowed
exit or uname ?
exit
Voilà.