Sous-routine chmod, fchmod ou fchmodat

Objectif

Modifie les bits du mode de fichier de base de l'objet du système de fichiers.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <sys/stat.h>
int chmod (Path Mode)
const char *Path;
mode_t Mode;
int fchmod (FileDescriptorMode)
int FileDescriptor;
mode_t Mode;
int fchmodat (DirFileDescriptorPathMode, Flag)
int DirFileDescriptor;
const char *Path;
mode_t Mode;
int  Flag;

Descriptif

La sous-routine chmod définit les droits d'accès du fichier spécifié par le paramètre Chemin . Si Network File System (NFS) est installé sur votre système, ce chemin peut se croiser dans un autre noeud.

Utilisez la sous-routine fchmod pour définir les droits d'accès d'un fichier ouvert désigné par le paramètre FileDescriptor .

Si FileDescriptor fait référence à un objet de mémoire partagée, la sous-routine fchmod affecte les bits d'autorisation de fichier S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTHet S_IWOTH .

Les informations de contrôle d'accès sont définies en fonction du paramètre Mode . Notez que ces routines remplaceront toute liste de contrôle d'accès existante associée à l'objet du système de fichiers.

Le sous-programme fchmodat est équivalent au sous-programme chmod si le paramètre Path spécifie un chemin absolu ou si le paramètre DirFileDescriptor a la valeur AT_FDCWD. Le fichier à modifier est déterminé par le chemin relatif du répertoire associé au paramètre DirFileDescriptor au lieu du répertoire de travail actuel. Si le répertoire est ouvert sans l'indicateur d'ouverture O_SEARCH , la sous-routine vérifie si les recherches de répertoire sont autorisées à l'aide des droits d'accès en cours du répertoire. Si le répertoire est ouvert avec l'indicateur d'ouverture O_SEARCH , la sous-routine n'effectue pas la vérification.

Paramètres

Article Descriptif
FileDescriptor Indique le descripteur de fichier d'un fichier ouvert ou d'un objet de mémoire partagée.
aff Indique le modèle de bit qui détermine les droits d'accès. Le paramètre Mode est construit en affectant logiquement une ou plusieurs des valeurs suivantes, qui sont définies dans le fichier sys/mode.h :
S_ISUID
Active l'attribut setuid pour un fichier exécutable. Un processus exécutant ce programme acquiert les droits d'accès du propriétaire du fichier.
S_IDISG
Active l'attribut setgid pour un fichier exécutable. Un processus exécutant ce programme acquiert les droits d'accès du groupe du fichier. Active également l'attribut d'héritage de groupe pour un répertoire. Les fichiers créés dans ce répertoire ont un groupe égal au groupe du répertoire.

Les attributs suivants s'appliquent uniquement aux fichiers directement exécutables. Ils n'ont aucune signification lorsqu'ils sont appliqués à des fichiers texte exécutables tels que des scripts shell et des scripts awk .

S_ISVTX
Active l'attribut link/unlink pour un répertoire. Les fichiers ne peuvent pas être liés dans ce répertoire. Les fichiers ne peuvent être dissociés que si le processus demandeur dispose d'un droit d'accès en écriture sur le répertoire et qu'il est le propriétaire du fichier ou du répertoire.
S_ISVTX
Active l'attribut save text pour un fichier exécutable. Le mappage du programme n'est pas supprimé après utilisation. Cet attribut ne peut être activé que par l'utilisateur root. Lorsqu'il est spécifié par une autre personne, cet attribut est ignoré.
S_ENFMT
Active le verrouillage d'enregistrement en mode d'application pour un fichier standard. Les verrous de fichier demandés avec la sous-routine lockf sont appliqués.
S_IRUSR
Permet au propriétaire du fichier de le lire.
S_IWUSR
Permet au propriétaire du fichier d'y écrire des données.
S_IXUSR
Permet au propriétaire du fichier de l'exécuter (ou d'effectuer une recherche dans le répertoire).
S_IRGRP
Permet au groupe du fichier de le lire.
S_IWGRP
Permet au groupe du fichier d'y écrire des données.
S_IXGRP
Permet au groupe du fichier de l'exécuter (ou d'effectuer une recherche dans le répertoire).
S_IROTH
Permet à d'autres personnes de lire le fichier.
S_IWOTH
Permet à d'autres personnes d'écrire dans le fichier.
S_IXOTH
Permet à d'autres d'exécuter le fichier (ou de rechercher dans le répertoire).

Il existe d'autres valeurs de mode qui peuvent être définies avec la sous-routine mknod mais pas avec la sous-routine chmod .

PATH Indique le nom de chemin du fichier. Pour fchmodat, si DirFileDescriptor est spécifié et que Path est relatif, DirFileDescriptor spécifie le répertoire de travail courant effectif pour Path.
DirFileDescriptor Indique le descripteur de fichier d'un répertoire ouvert, qui est utilisé comme répertoire de travail en cours effectif pour le paramètre Chemin . Si DirFileDescriptor est égal à AT_FDCWD, le paramètre DirFileDescriptor est ignoré et l'argument Path spécifie le fichier complet.
Indicateur Indique un argument de zone de bit. Si le paramètre Indicateur contient le bit AT_SYMLINK_NOFOLLOW et que le paramètre Chemin spécifie un lien symbolique, le mode du lien symbolique est modifié.

Valeurs renvoyées

Une fois l'opération terminée, les sous-routines chmod, fchmodet fchmodat renvoient la valeur 0. Si la sous-routine chmod, fchmod ou fchmodat échoue, la valeur -1 est renvoyée et la variable globale errno est définie pour identifier l'erreur.

Codes d'erreur

La sous-routine chmod ou fchmodat échoue et les droits d'accès aux fichiers restent inchangés si l'une des conditions suivantes est vérifiée:

Article Descriptif
REP_ENOT Un composant du préfixe Path n'est pas un répertoire.
EACCES Le droit de recherche est refusé sur un composant du préfixe Path .
EFAULT Le paramètre Chemin pointe vers un emplacement en dehors de l'espace adresse alloué du processus.
ELOOP Trop de liens symboliques ont été détectés lors de la conversion du paramètre Chemin .
ENOENT Le fichier nommé n'existe pas.
ENAMETOOLONG Un composant du paramètre Chemin a dépassé 255 caractères, ou la totalité du paramètre Chemin a dépassé 1023 caractères.
La sous-routine fchmod échoue et les droits d'accès aux fichiers restent inchangés si les conditions suivantes sont remplies:
Article Descriptif
EBADF La valeur du paramètre FileDescriptor n'est pas valide.
   
La sous-routine chmod, fchmod ou fchmodat échoue et les informations de contrôle d'accès d'un fichier restent inchangées si l'une des conditions suivantes est vérifiée:
Article Descriptif
EPERM L'ID utilisateur effectif ne correspond pas au propriétaire du fichier et le processus ne dispose pas des privilèges appropriés.
EROFS Le fichier nommé se trouve sur un système de fichiers en lecture seule.
EIO Une erreur d'E-S s'est produite lors de l'opération.

Si NFS est installé sur votre système, les sous-programmes chmod et fchmod peuvent également échouer si les conditions suivantes sont remplies:

Article Descriptif
ESTALE Le répertoire racine ou en cours du processus se trouve dans un système de fichiers virtuel qui a été démonté.
ETIMEDOUT Le délai de connexion a expiré.

La sous-routine fchmodat échoue et les droits d'accès aux fichiers restent inchangés si l'une des conditions suivantes est vérifiée:

Article Descriptif
EBADF Le paramètre Path ne spécifie pas un chemin absolu et l'argument DirFileDescriptor n'est ni AT_FDCWD ni un descripteur de fichier valide.
EINVAL La valeur de l'argument Flag n'est pas valide.
REP_ENOT Le paramètre Path n'est pas un chemin absolu et DirFileDescriptor est un descripteur de fichier mais n'est pas associé à un répertoire.

Security

Contrôle d'accès: l'appelant doit disposer du droit de recherche pour tous les composants du préfixe Path .

Si vous recevez l'erreur EBUSY , activez l'attribut verrouillage appliqué dans le paramètre Mode et renouvelez l'opération. L'attribut verrouillage appliqué ne doit jamais être utilisé sur un fichier faisant partie de la base informatique sécurisée.