Maison  >  Article  >  développement back-end  >  Dois-je ajouter des autorisations exécutables lors de l’exécution d’un script Python ?

Dois-je ajouter des autorisations exécutables lors de l’exécution d’un script Python ?

王林
王林avant
2023-04-26 18:19:081462parcourir

Analyse de cas

Ce problème est un peu contre-intuitif à décrire. Des autorisations exécutables ne devraient-elles pas être requises pour exécuter un fichier ? Regardons d'abord un exemple :

# module1.py
def test():
    print ('hello world!')
 
if __name__ == '__main__':
    test()

Il s'agit d'un fichier nommé module1.py. Ce fichier n'a que des autorisations de lecture :

[dechin@dechin-manjaro excute]$ ll
-r--r- -r--. 1 dechin dechin 78 15 janvier 17:06 module1.py

Nous pouvons directement utiliser python pour exécuter ce fichier :

[dechin@dechin-manjaro excute]$ python3 module1.py
bonjour tout le monde !

Nous avons trouvé que ce fichier peut être exécuté même s'il ne dispose que d'autorisations de lecture. Afin de vérifier strictement, nous créons ici un autre mode de test pour importer le fichier python via l'importation. Ne nécessite-t-il pas d'autorisation exécutable ?

# module2.py
from module1 import test
 
if __name__ == '__main__':
    test()

De même, notre fichier nouvellement créé ne dispose pas d'autorisations d'exécutable :

[dechin@dechin-manjaro excute]$ ll
-r--r--r-- 1 dechin dechin 78 15 janvier 17 : 06 module1. py
-r--r--r-- 1 dechin dechin 64 15 janvier 17:44 module2.py

Exécutons le fichier module2.py :

[dechin@dechin-manjaro excute ]$ python3 module2. py
bonjour tout le monde !

Ensuite, notre test est terminé. Après vérification, l'exécution de fichiers py ordinaires ne nécessite pas d'autorisations exécutables, ce qui a certaines contraintes sur notre effet de minimisation des autorisations.

Explication du principe

Il y a une réponse sur stackoverrun. L'auteur cedbeu le décrit ainsi : python lui-même assume le rôle d'un analyseur de langage. Le fichier py est juste un fichier texte. python et non créé par l'utilisateur.py fichier. Par conséquent, même si les autorisations exécutables du fichier py sont supprimées, le fichier py peut toujours être exécuté via python. Cependant, si nous supprimons les autorisations exécutables de python, nous ne pourrons pas effectuer cette tâche normalement.

Test étendu

Si le fichier py est compilé dans des fichiers au format pyc et pyo, l'exécution de la tâche à ce moment nécessite-t-elle des autorisations exécutables ? Testez d'abord le fichier pyc :

[dechin@dechin-manjaro excute]$ python3 -m py_compile module1.py

Après avoir exécuté la compilation, nous trouverons un dossier __pycache__ dans le répertoire courant, le pyc compilé Les fichiers sont stocké dans ce répertoire :

[dechin@dechin-manjaro excute]$ tree
.
├── module1.py
├── module2.py
└── __pycache__
└── module1.cpython- 38.pyc

1 répertoire, 3 fichiers
[dechin@dechin-manjaro excute]$ cd __pycache__/
[dechin@dechin-manjaro __pycache__]$ ll
Utilisation totale 4
-rw-r--r-- 1 dechin dechin 259 janvier 15 18:01 module1.cpython-38.pyc

Ici, nous voyons que le nom du fichier pyc aura un suffixe fixe, et il n'y a pas non plus d'autorisation exécutable. Ici, nous utilisons la même commande pour exécuter le fichier pyc. :

[dechin@dechin-manjaro __pycache__]$ ll
-r--r--r-- 1 dechin dechin 259 15 janvier 18:01 module1.cpython-38.pyc
-rw-r--r - - 1 dechin dechin 259 15 janvier 18:13 module1.pyc
-r--r--r-- 1 dechin dechin 64 15 janvier 18:09 module2.py
[dechin@dechin-manjaro __pycache__]$ python3 module1.cpython -38.pyc
bonjour tout le monde !
[dechin@dechin-manjaro __pycache__]$ python3 module2.py
bonjour tout le monde !

Ici, nous pouvons savoir si le fichier pyc est exécuté directement ou renommé module1 après l'importation de pyc. via module2.py, il peut être exécuté normalement et ne dispose pas d'autorisations exécutables. Ensuite, essayons à nouveau le fichier pyo :

[dechin@dechin-manjaro excute]$ python3 -O -m py_compile module1.py

Exécutez le fichier pyc avec opt :

[dechin@dechin-manjaro __pycache__ ]$ python3 module1.cpython-38.opt-1.pyc
bonjour tout le monde !

De même, il peut être exécuté normalement même sans autorisations exécutables.

Easter egg technique

Même si nous renommeons de force le fichier pyc en fichier py, cela n'affectera pas l'exécution de la tâche :

[dechin@dechin-manjaro __pycache__]$ cp module1.cpython-38.opt-1 .pyc module1 .py
[dechin@dechin-manjaro __pycache__]$ ll
Utilisation totale 20
-rw-r--r-- 1 dechin dechin 259 15 janvier 18:17 module1.cpython-38.opt-1.pyc
- r--r--r-- 1 dechin dechin 259 15 janvier 18:01 module1.cpython-38.pyc
-rw-r--r-- 1 dechin dechin 259 15 janvier 18:20 module1.py
-rw-r--r-- 1 dechin dechin 259 15 janvier 18:13 module1.pyc
-r--r--r-- 1 dechin dechin 64 15 janvier 18:09 module2.py
[dechin@ dechin- manjaro __pycache__]$ python3 module1.py
bonjour tout le monde !

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