Maison  >  Article  >  développement back-end  >  Comment utiliser fdopen pour minimiser les autorisations sur les fichiers générés par le processus Python

Comment utiliser fdopen pour minimiser les autorisations sur les fichiers générés par le processus Python

王林
王林avant
2023-04-28 22:22:051060parcourir

Contexte des exigences

Lorsque nous utilisons Python pour créer, lire et écrire des fichiers, nous prêtons rarement attention à la configuration des autorisations des fichiers créés. Pour certains systèmes hautement sécurisés, si les autorisations de fichiers que nous créons ont des autorisations de lecture pour d'autres utilisateurs ou d'autres utilisateurs du même groupe d'utilisateurs, cela peut entraîner un risque de fuite d'informations inutiles. Par conséquent, en plus de créer un environnement personnel plus sécurisé et privé (comme un environnement de conteneur, etc.), nous pouvons également minimiser les autorisations sur la configuration des fichiers générés.

Méthodes courantes et leur analyse des défauts

La méthode couramment utilisée pour créer, lire et écrire des fichiers Python consiste à créer un fichier directement via la fonction d'ouverture intégrée. S'il est créé à l'aide de la syntaxe with, l'objet ouvert sera automatiquement fermé après la fin de l'instruction. Si vous utilisez directement la fonction d'ouverture pour définir un objet, vous devez effectuer manuellement l'opération de fermeture à la fin de la tâche. Ce qui suit montre l'utilisation de la fonction intégrée open et ses attributs d'opération de fichier. Tout d'abord, créez un fichier nommé file-test.py :

# file-test.py
 
with open('test1.txt', 'w') as file:
    file.write('hello world!')

Le contenu de la tâche est : Créez un fichier nommé test1.txt dans le fichier actuel. répertoire et effacez-le. Après le contenu du fichier, écrivez la chaîne hello world! Ensuite, utilisez python3 pour exécuter le fichier :

[dechin@dechin-manjaro os_security]$ python3 file-test.py
[dechin@dechin-manjaro os_security]$ ll
Utilisation totale 8
-rw-r--r - - 1 dechin dechin 83 25 janvier 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 janvier 25 13:43 test1.txt

Ici, nous avons constaté qu'il avait réussi après l'exécution Le fichier test1.txt est généré et ses autorisations sont configurées sur 644, ce qui est cohérent avec le fichier-test.py créé précédemment. Quand je ne connaissais pas le principe d'implémentation de la fonction intégrée open, je pensais à l'origine que la configuration des autorisations de fichier générées était cohérente avec le fichier py actuel. Cependant, après des tests plus approfondis, les autorisations du fichier py ont été configurées sur 440, puis réexécuté le fichier :

[dechin@dechin-manjaro os_security]$ chmod 440 file-test.py
[dechin@dechin-manjaro os_security]$ ll
Utilisation totale 8
-r--r----- 1 dechin dechin 83 25 janvier 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 janvier 25 13 : 43 test1.txt
[dechin@dechin-manjaro os_security]$ rm test1.txt
[dechin@dechin-manjaro os_security]$ python3 file-test.py
[dechin@dechin-manjaro os_security]$ ll
Utilisation totale 8
-r--r----- 1 dechin dechin 83 25 janvier 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 janvier 25 13:44 test1.txt

Ici, nous pouvons voir à partir des résultats des tests que le type de fichier généré par la fonction open intégrée de Python n'a rien à voir avec le fichier py source. Pour savoir si l'exécution de ce fichier py nécessite des autorisations exécutables, vous pouvez vous référer à ce blog.

Méthode de création de fichiers python améliorée

Grâce à la bibliothèque fdopen et à la spécification d'autorisations spéciales, nous pouvons définir les autorisations d'accès aux fichiers générés. Un exemple de code python est présenté ci-dessous :

# fdopen-test.py
 
import os
import stat
 
file_name = 'test2.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')

Après l'exécution, nous pouvons le trouver dans le fichier actuel. répertoire Un fichier nommé test2.txt est généré et ses autorisations sont configurées sur 600, par rapport au mode = stat.S_IRUSR | stat.S_IWUSR que nous avons défini dans le code. Ici, nous expliquons d'abord certains paramètres : os.O_WRONLY signifie ouvrir en mode écriture seule, os.O_CREAT signifie créer et ouvrir un nouveau fichier, os.O_EXCL signifie signaler une erreur si le fichier existe déjà. Les autorisations configurées en mode correspondent respectivement à la configuration rwx, et USR, GRP et OTH ont des configurations subdivisées respectivement pour les utilisateurs, les groupes d'utilisateurs et les autres utilisateurs, afin que nous puissions réaliser tous les types de configurations d'autorisations en modifiant les paramètres de mode.

Nous pouvons essayer d'ajuster le mode dans le cas d'utilisation ci-dessus, comme l'ajout d'une autorisation exécutable à 700 :

# fdopen-test.py
 
import os
import stat
 
file_name = 'test3.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')

Ou, nous devons ajouter des autorisations d'accès pour les autres utilisateurs du groupe d'utilisateurs, telles que les autorisations 640 :

# fdopen-test.py
 
import os
import stat
 
file_name = 'test4.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')

Même nous pouvons écrire les autorisations de fichiers 644 natives du système :

# fdopen-test.py
 
import os
import stat
 
file_name = 'test5.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')

Enfin, jetons un coup d'œil aux résultats obtenus après l'exécution des exemples python ci-dessus :

[dechin@dechin-manjaro os_security]$ ll
Utilisation totale 28
-rw-r--r-- 1 dechin dechin 269 25 janvier 14:58 fdopen-test.py
-r--r----- 1 dechin dechin 84 25 janvier 14:11 file- test.py
- rw-r--r-- 1 dechin dechin 12 janvier 25 13:44 test1.txt
-rw------- 1 dechin dechin 12 janvier 25 14:44 test2.txt
-rwx----- - 1 dechin dechin 12 janvier 25 14:48 test3.txt
-rw-r----- 1 dechin dechin 12 janvier 25 14:56 test4.txt
-rw-r- -r-- 1 dechin dechin 12 janvier 25 14:58 test5.txt

D'après les résultats, nous pouvons voir que tous les fichiers générés test*.txt sont générés en fonction de notre configuration d'autorisation de fichier attendue. À ce stade, nous allons tous les objectifs attendus ont été atteints.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer