J'ai un utilisateur avec un accès limité sur le système (c'est-à-dire qu'il n'est pas sudoer); appelons-le Bob .
J'ai un script ou un binaire que moi, l'administrateur système, approuvons et n'aurais aucun problème à l'exécuter en tant que root; appelons le script get-todays-passphrase.sh
. Le travail de ce script est de lire les données d'un fichier "privé" (appartenant à un utilisateur / groupe autre que Bob, ou même root) situé dans /srv/daily-passphrases
, et de ne sortir qu'une ligne spécifique du fichier: la ligne qui correspond à la date du jour .
Les utilisateurs comme Bob ne sont pas autorisés à connaître la phrase secrète de demain, même si elle est répertoriée dans le fichier. Pour cette raison, le fichier /srv/daily-passphrases
est protégé par des autorisations Unix, donc les utilisateurs non root comme Bob ne sont pas autorisés à accéder directement au fichier. Ils sont toutefois autorisés à exécuter le get-todays-passphrase.sh
script à tout moment, ce qui renvoie les données "filtrées".
Pour résumer (la version TL; DR ):
- Bob ne peut pas lire le fichier protégé
- Le script peut lire le fichier protégé
- À tout moment, Bob peut exécuter le script qui peut lire le fichier
Est-il possible de le faire avec les permissions des fichiers Unix? Ou si Bob démarre un script, le script sera-t-il toujours voué à s'exécuter avec les mêmes autorisations que Bob?
la source
Préface:
Comme cela a été souligné dans les commentaires et pour les raisons expliquées dans cette réponse, le noyau linux ignore le bit setuid / setguid lors de la manipulation d'un script. Je ne vais pas dupliquer la réponse de Benjamin mais remplacerai plutôt le script par executabe pour rendre ma réponse correcte.
Réponse courte: utilisez setgid
Étapes détaillées:
sudo chown :readpass thatfile
sudo chmod g=r,o= thatfile
sudo chmod g+s thatfile
De cette façon, votre exécutable s'exécutera avec les autorisations du groupe propriétaire et pourra ainsi lire le fichier.
la source
thatfile
avec le groupereadpass
.