8
votes

Linux - Variables d'environnement de sécurisation

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.

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?

Un moyen de faire serait d'écrire une sorte de script de programme / Perl à:

  1. Prenez des entrées d'un fichier texte brut et de chiffrer / hachage le contenu (puis de vous débarrasser du fichier texte brut)
  2. Utilisez la même chose pour déchiffrer le fichier d'exécution du fichier et exporter les valeurs de la sortie déchiffrée. (Je sais que ce programme peut être utilisé pour vider les valeurs déchiffrées quelque part, mais je ne suis pas préoccupé par cela pour le moment)

    Y a-t-il un autre moyen meilleur et plus évident d'y parvenir?

    Merci!

    -gaurav


2 commentaires

Peut-être que vous seriez mieux de demander la faute du serveur.


// ou sécurité.stackexchange.com


3 Réponses :


2
votes

Qui les sécurisez-vous?

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.


0 commentaires

5
votes

aucun moyen. Même si vous le cachez du fichier texte, il est toujours disponible à partir de / proc / / environ (Linux) ou ps e (Autre Unix).


3 commentaires

Ceci n'est pas strictement vrai - le fichier environ 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 . 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 / / environ ?



1
votes

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. / proc / ### / environ n'est lisible que par l'utilisateur, dont un processus est en cours d'exécution. Les données sont donc en sécurité.

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.

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 Apache: Apache , enregistrez le mot de passe de la base de données qui a besoin dans la CGI Un fichier appartenant à Apache: apache avec des autorisations telles que rw-r ----- ( 640 ). Ainsi, pour quelqu'un de lire le fichier, il doit soit être soit root , un membre du groupe Apache Groupe ou en cours d'exécution du programme de lecture avec un utilisateur ou un groupe efficace de Apache .

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é.


0 commentaires