Vous vous demandez simplement s'il existe un moyen de sécuriser les variables d'environnement dans un système * Nix de telle sorte qu'elles ne puissent pas être lues à partir d'un fichier texte brut, mais est disponible dans l'environnement. P>
Je sais que nous pouvons toujours utiliser des autorisations de niveau de système de fichiers pour .bstrucc / .bash_profile, mais si certaines variables (comme DB mots de passe) doivent être complètement cachées? P>
Un moyen de faire serait d'écrire une sorte de script de programme / Perl à: p>
Y a-t-il un autre moyen meilleur et plus évident d'y parvenir? P>
Merci! P>
-gaurav p>
3 Réponses :
Qui les sécurisez-vous? P>
La réponse courte est "non". L'utilisateur peut voir ses propres variables d'environnement, sauf si vous les enfreignez si soigneusement qu'ils ne peuvent jamais accéder à la coquille. Mais quel éditeur les laissez-vous utiliser? Avez-vous dit 'vim'? Oh, ils ont accès à la coquille, après tout. P>
aucun moyen. Même si vous le cachez du fichier texte, il est toujours disponible à partir de / proc / ps e code> (Autre Unix). P >
Ceci n'est pas strictement vrai - le fichier environ code> n'est pas visible par d'autres utilisateurs non-racines sur les versions modernes du noyau.
Le point est qu'il est sécurisé à l'utilisateur qui définit les variables d'environnement. Seule la racine et le propriétaire du processus qui définissaient les variables d'environnement ont accès à / PROC / $ PID / environ code>. Cependant, il pourrait également y avoir des cas où vous le souhaitez à partir de l'utilisateur lui-même - un magasin de clé peut choisir de transmettre le mot de passe / la connexion à une autre application sur les variables d'environnement. L'utilisateur peut être capable de comprendre les mots de passe via cette méthode. J'ai eu une question similaire ici: Unix.stackexchange.com/a/206219/117221
Pouvez-vous simplement désierrer la variable après que vous ayez fini d'utiliser? Sera-t-il toujours apparu dans / proc /
C'est une sorte de possible, mais très indirecte. Vous auriez besoin d'enregistrer les données sensibles dans un fichier lisible uniquement par le processus qui démarre le processus qui en a besoin dans une variable d'environnement. Mais, plus directement, la méthode appropriée pour masquer des éléments tels que les mots de passe de la base de données est de les enregistrer dans un fichier lisible uniquement par l'utilisateur et / ou le groupe que le programme les lire est exécuté. Ne vous embêtez pas de les transmettre dans une variable d'environnement (sauf que vous ne devez vraiment pas pour une raison quelconque), vous devez simplement les lire dans le fichier. P>
Par exemple, si vous exécutez un site Web et que les scripts / binaires CGI sont démarrés par Apache, qui exécute en tant qu'utilisateur: Groupe Le seul avantage à utiliser des variables d'environnement est que vous pouvez les supprimer de l'environnement avant de commencer un sous-processus, alors que si le sous-processus doit appartenir à la même utilisateur, il peut lire le fichier sécurisé. p> / proc / ### / environ code> n'est lisible que par l'utilisateur, dont un processus est en cours d'exécution. Les données sont donc en sécurité. P>
Apache: Apache code>, enregistrez le mot de passe de la base de données qui a besoin dans la CGI Un fichier appartenant à Apache: apache code> avec des autorisations telles que rw-r ----- code> ( 640 code>). Ainsi, pour quelqu'un de lire le fichier, il doit soit être soit root code>, un membre du groupe code> Apache CODE> Groupe ou en cours d'exécution du programme de lecture avec un utilisateur ou un groupe efficace de Apache code>. P>
Peut-être que vous seriez mieux de demander la faute du serveur.
// ou sécurité.stackexchange.com