CHMOD(2)

NOM
chmod, fchmod - Modifier les permissions d'acces a un fichier.

SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>

int chmod(const char *pathname, mode_t mode);
int fchmod(int fildes, mode_t mode);

DESCRIPTION
chmod change le mode d'acces du fichier pathname.
fchmod change le mode d'acces du fichier associe au descripteur filedes. Le mode est specifie par un OU binaire ( | ) entre les elements suivants (les nombres sont en octal) :

    S_ISUID 04000
        modification du numero d'utilisateur (UID) a l'execution.

    S_ISGID 02000
        modification du numero de groupe (GID) a l'execution.

    S_ISVTX 01000
        positionner le sticky bit pour conserver le code du programme en memoire apres execution.

    S_IRUSR (S_IREAD) 00400
        acces en lecture pour le proprietaire

    S_IWUSR (S_IWRITE) 00200
        acces en ecriture pour le proprietaire

    S_IXUSR (S_IEXEC) 00100
        acces en execution/parcours par le proprietaire

    S_IRGRP 00040
        acces en lecture pour le groupe

    S_IWGRP 00020
        acces en ecriture pour le groupe

    S_IXGRP 00010
        acces en execution/parcours pour le groupe

    S_IROTH 00004
        acces en lecture pour les autres

    S_IWOTH 00002
        acces en ecriture pour les autres

    S_IXOTH 00001
        acces en execution/parcours pour les autres

L'UID effectif du processus doit etre nul (root) ou doit correspondre a celui du proprietaire du fichier. Les UID et GID effectifs doivent etre appropries pour positionner les bits d'execution/parcours. Suivant le type de systeme de fichiers, les bits Set-UID et Set-GID peuvent etre effaces si un fichier est ecrit. Sur certains systeme de fichiers, seul le Super-User peut positionner le Sticky-Bit, lequel peut avoir une signification specifique (par ex: pour un repertoire, un fichier ne pourra y etre efface que par le proprietaire ou le Super-User). Sur les systemes de fichiers NFS, une restriction des autorisations d'acces aura un effet immediat y compris sur les fichiers deja ouverts, car les controles d'acces sont effectues sur le serveur, mais les fichiers sont maintenus ouverts sur le client. Par contre, un elargissement des autorisations peut ne pas etre immediat, si le client dispose d'un cache.

VALEUR RENVOYEE
chmod et fchmod renvoient 0 s'ils reussissent, ou -1 en cas d'echec, auquel cas errno contient le code d'erreur.

ERREURS
Suivant le type de systeme de fichiers, differentes erreurs peuvent etre renvoyees. Les plus courantes pour chmod sont :

EPERM
    L'UID effectif ne correspond pas au proprietaire du fichier, et n'est pas nul.

EROFS
    Le fichier se trouve sur un systeme de fichiers en lecture seule.

EFAULT
    pathname pointe en dehors de l'espace d'adressage accessible.

ENAMETOOLONG
    pathname est trop long.

ENOENT
    Le fichier n'existe pas.

ENOMEM
    Pas assez de memoire pour le noyau.

ENOTDIR
    Un element du chemin d'acces n'est pas un repertoire.

EACCES
    Le parcours d'un element du chemin de recherche est interdit.

ELOOP
    pathname contient une reference circulaire (a travers un lien symbolique)

Les erreurs les plus courantes pour fchmod sont :

EBADF
    Le descripteur de fichier est invalide.

ENOENT
    Le fichier n'existe pas.

EPERM
    L'UID effectif ne correspond pas au proprietaire du fichier, et n'est pas nul.

EROFS
    Le fichier se trouve sur un systeme de fichiers en lecture seule.

ENOMEM
    Pas assez de memoire pour le noyau.

EIO Une erreur d'entree sortie bas-niveau s'est produite durant la modification de l'i-noeud.

CONFORMITE
chmod est conforme a SVr4, SVID, POSIX, X/OPEN, 4.4BSD, mais le Sticky Bit (S_ISVTX) ne l'est pas, ni les macros S_IREAD, S_IWRITE et S_IEXEC. POSIX precise que certaines implementations peuvent ignorer S_ISUID et S_ISGID. De plus, selon POSIX, il n'est pas autorise de tenter de positionner des bits non mentionnes ci-dessus. POSIX.1 ne documente pas ENOMEM ni ELOOP.

VOIR AUSSI
open(2), chown(2), stat(2)