2017-08-25 8 views
1

Je souhaite autoriser les utilisateurs à exécuter un script bash contenant des données sensibles. Ainsi, je ne veux pas qu'ils aient des autorisations de lecture. Une solution « directe » seems to be impossible, mais je peux avoir trouvé une solution de contournement dans le expect man page:Exécuter un script sans lire les autorisations

Create the Expect script (that contains the secret data) as usual. Make its permissions be 750 (-rwxr-x---) and owned by a trusted group, i.e., a group which is allowed to read it. If necessary, create a new group for this purpose. Next, create a /bin/sh script with permissions 2751 (-rwxr-s--x) owned by the same group as before.

J'ai essayé de reproduire ce comme suit: Dans un dossier, j'ai deux scripts:

scripts Sh:

#!/bin/sh 
echo "targetscript echo" 

runscript.sh:

#!/bin/sh 
echo "runscript echo" 
groups 
./script.sh 

Je leur ai donné les droits comme suggéré dans la page de manuel:

groupadd scriptrunner 
chown {myusername}:scriptrunner runscript.sh 
chmod 2751 runscript.sh 
chown root:scriptrunner script.sh 
chmod 750 script.sh 

La sortie de ls -l semble bien se passer:

-rwxr-s--x. 1 {myusername} scriptrunner 51 Aug 25 13:04 runscript.sh 
-rwxr-x---. 1 root   scriptrunner 35 Aug 25 13:01 script.sh 

Cependant, quand je lance ./runscript.sh sans racine, je reçois l'erreur suivante :

runscript echo 
{myusername} wheel 
./runscript.sh: line 4: ./script.sh: Permission denied 

Je ne sais pas ce qui s'est mal passé. Quelqu'un peut-il m'aider?

+0

L'utilisateur qui exécute le script est-il un membre du groupe "scriptrunner"? –

+0

S'il existe des données sensibles, elles doivent être cryptées, même si vous avez réussi à exécuter votre script sans autorisation de lecture ou si vous l'avez converti en fichier exécutable binaire (ELF). Les données pourraient être visualisées en utilisant un outil comme 'truss',' strace' ou 'ptrace' par quiconque utilisant le même nom d'utilisateur qui exécute le processus. Une solution possible consiste à faire exécuter des requêtes à un démon fonctionnant sous un autre nom d'utilisateur. – cdarke

Répondre

2

Je vais revenir au problème racine car je pense qu'il est plus facile à résoudre sans attendre le piratage. Donc, ce dont vous avez besoin est d'avoir l'autorisation d'exécution sur votre script, mais pas l'autorisation de lecture. Ce n'est possible pour les fichiers binaires (non interprétées scripts) - voir les détails ici https://unix.stackexchange.com/questions/34202/can-a-script-be-executable-but-not-readable

peut-être donc vous serez mieux d'abord compiler votre script bash dans un fichier binaire (avec SHC - voir ici https://unix.stackexchange.com/questions/64762/how-to-convert-a-shell-script-into-a-binary-executable) puis définissez la n'exécuter que l'autorisation sur le binaire. Ensuite, vos utilisateurs devraient être en mesure d'exécuter (mais pas lire) le binaire.