def fchmod(fd: int, mode: int) -> None
0o
.
La gestion des droits Unix/Linux étant basée sur une représentation en base octale, je vous recommande conserver cette façon de faire pour spécifier les nouveaux droits d'accès de votre fichier (ou de votre dossier).
1 2 |
fd = os.open("file_name", os.O_RDONLY) os.fchmod(fd, 0o755) # -rwxr-xr-x |
Pour autant, il est aussi possible de spécifier les droits d'accès via un masque binaire et un jeu de constantes proposé par le module « stat ». Voici un exemple d'utilisation de cette possibilité.
1 2 3 |
rights = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | IROTH | IXOTH fd = os.open("file_name", os.O_RDONLY) os.fchmod(fd, rights) # -rwxr-xr-x |
Le tableau suivant présente les constantes relatives aux droits d'accès sur un fichier (ou un dossier) disponibles sur un système d'exploitation compatible Unix/Linux.
Nom de la constante | Valeur numérique | Description |
---|---|---|
Constantes applicables au propriétaire du fichier | ||
stat.S_IRUSR | 0o0400 | Accès en lecture pour le propriétaire du fichier. |
stat.S_IWUSR | 0o0200 | Accès en écriture pour le propriétaire du fichier. |
stat.S_IXUSR | 0o0100 | Accès en exécution pour le propriétaire du fichier (ou droit de traverser pour un dossier). |
stat.S_IRWXU | 0o0700 |
Accès en lecture, écriture et exécution pour le propriétaire du fichier. Equivaut à stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR .
|
Constantes applicables au groupe primaire du fichier | ||
stat.S_IRGRP | 0o0040 | Accès en lecture pour le groupe primaire du fichier. |
stat.S_IWGRP | 0o0020 | Accès en écriture pour le groupe primaire du fichier. |
stat.S_IXGRP | 0o0010 | Accès en exécution pour le groupe primaire du fichier (ou droit de traverser pour un dossier). |
stat.S_IRWXG | 0o0070 |
Accès en lecture, écriture et exécution pour le groupe primaire du fichier. Equivaut à stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP .
|
Constantes applicables aux autres utilisateurs du fichier | ||
stat.S_IROTH | 0o0004 | Accès en lecture pour les autres utilisateurs du fichier. |
stat.S_IWOTH | 0o0002 | Accès en écriture pour les autres utilisateurs du fichier. |
stat.S_IXOTH | 0o0001 | Accès en exécution pour les autres utilisateurs du fichier (ou droit de traverser pour un dossier). |
stat.S_IRWXO | 0o0007 |
Accès en lecture, écriture et exécution pour les autres utilisateurs du fichier. Equivaut à stat.S_IROTH | stat.S_IWOTH | stat.S_IXOTH .
|
Autres constantes | ||
stat.S_ISUID | 0o4000 | Défini l'identifiant utilisateur (UID) effectif d'un processus lors de son exécution. |
stat.S_ISGID | 0o2000 | Défini l'identifiant de groupe (GID) effectif d'un processus lors de son exécution. |
stat.S_ENFMT | 0o2000 | Verrouillage strict (partagé avec S_ISGID) - System V uniquement. |
stat.S_ISVTX | 0o1000 | Défini le « Sticky Bit » (attribut de suppression restreinte). S'il est apposé sur un répertoire et si la modification est permise (w), alors seul le propriétaire du dossier peut y supprimer des fichiers. Les autres utilisateurs autorisés ne peuvent que modifier le contenu du répertoire (mais sans possibilité de suppression de fichiers). |
Change the access permissions of the file given by file descriptor fd. Equivalent to os.chmod(fd, mode).
Paramètre | Description |
---|---|
fd : int |
Le descripteur du fichier pour qui changer les droits. |
mode : int |
Les nouveaux droits d'accès du fichier. |
Cette méthode ne renvoie aucune valeur.
PermissionError :Une exception de ce type sera déclenchée si vous n'avez pas les droits d'accès au fichier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import os import sys path = "demo.txt" try: with open(path, "w") as the_file: print("Ok", file=the_file) except IOError: print("Impossible de créer le fichier de démonstration", file=sys.stderr) exit(-1) # On change à plusieurs reprises les droits d'accès et on les affiche. try: fd = os.open(path, os.O_RDONLY) os.fchmod(fd, 0o600) os.system(f"ls -l {path}") os.fchmod(fd, 0o640) os.system(f"ls -l {path}") os.fchmod(fd, 0o644) os.system(f"ls -l {path}") os.fchmod(fd, 0o755) os.system(f"ls -l {path}") except PermissionError: print("Tu n'as pas les autorisations nécessaires", file=sys.stderr) except OSError: # La fonction open peut, elle aussi, échouer print("Ca ne marche pas et je ne t'en dirais pas plus ;-)", file=sys.stderr) |
Et voici les résultats produits par cet exemple.
$> python sample.py -rw-------. 1 dominique dominique 3 5 janv. 10:13 demo.txt -rw-r-----. 1 dominique dominique 3 5 janv. 10:13 demo.txt -rw-r--r--. 1 dominique dominique 3 5 janv. 10:13 demo.txt -rwxr-xr-x. 1 dominique dominique 3 5 janv. 10:13 demo.txt $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :