chown(2) System Calls Manual chown(2) NOM chown, fchown, lchown, fchownat - Modifier l'appartenance d'un fichier BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int chown(const char *path, uid_t owner, gid_t group); int fchown(int fd, uid_t owner, gid_t group); int lchown(const char *path, uid_t owner, gid_t group); #include /* Definition des constantes AT_* */ #include int fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : fchown(), lchown() : /* Depuis la glibc 2.12: */ _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 500 || /* Versions de la glibc <= 2.19: */ _BSD_SOURCE fchownat() : Depuis la glibc 2.10 : _POSIX_C_SOURCE >= 200809L avant la glibc 2.10 : _ATFILE_SOURCE DESCRIPTION Ces appels systeme modifient le proprietaire et le groupe d'un fichier. Les appels systeme chown(), fchown() et lchown() different seulement dans la facon dont le fichier est indique : - chown() changes the ownership of the file specified by path, which is dereferenced if it is a symbolic link. - fchown() modifie l'appartenance du fichier reference par le descripteur de fichier ouvert fd. - lchown() est comme chown(), mais ne dereference pas les liens symboliques. Seul un processus privilegie (sous Linux : un processus qui a la capacite CAP_CHOWN) peut modifier le proprietaire d'un fichier. Le proprietaire peut modifier le groupe du fichier pour n'importe quel groupe auquel il appartient. Un processus privilegie (sous Linux : avec la capacite CAP_CHOWN) peut modifier le groupe arbitrairement. Si l'argument owner ou group vaut -1, l'element correspondant n'est pas change. Quand le proprietaire ou le groupe d'un fichier executable sont modifies par un utilisateur ordinaire, les bits S_ISUID et S_ISGID sont effaces. POSIX ne precise pas s'il faut agir de meme lorsque c'est le superutilisateur qui invoque chown(). Le comportement de Linux dans ce cas depend de la version du noyau et depuis la version 2.2.13, root est traite comme les autres utilisateurs. Si le fichier n'est pas executable par les membres de son groupe (c'est-a-dire un fichier pour lequel le bit S_IXGRP n'est pas positionne), le bit S_ISGID indique la presence d'un verrou imperatif sur le fichier, et n'est donc pas efface par un chown(). Quand le proprietaire ou le groupe d'un fichier executable est modifie (quel que soit l'utilisateur), tous les parametres de capacites du fichier sont effaces. fchownat() L'appel systeme fchownat() fonctionne exactement comme chown(), les seules differences etant celles decrites ici. If path is relative, then it is interpreted relative to the directory referred to by the file descriptor dirfd (rather than relative to the current working directory of the calling process, as is done by chown() for a relative pathname). If path is relative and dirfd is the special value AT_FDCWD, then path is interpreted relative to the current working directory of the calling process (like chown()). Si path est absolu, alors dirfd est ignore. L'argument flags est un masque de bits construit en realisant un OU logique entre zero ou plusieurs des valeurs suivantes : AT_EMPTY_PATH (depuis Linux 2.6.39) If path is an empty string, operate on the file referred to by dirfd (which may have been obtained using the open(2) O_PATH flag). In this case, dirfd can refer to any type of file, not just a directory. If dirfd is AT_FDCWD, the call operates on the current working directory. This flag is Linux-specific; define _GNU_SOURCE to obtain its definition. AT_SYMLINK_NOFOLLOW If path is a symbolic link, do not dereference it: instead operate on the link itself, like lchown(). (By default, fchownat() dereferences symbolic links, like chown().) Consultez openat(2) pour une explication de la necessite de fchownat(). VALEUR RENVOYEE En cas de succes, zero est renvoye. En cas d'erreur, -1 est renvoye et errno est definie pour preciser l'erreur. ERREURS Suivant le type de systeme de fichiers, d'autres erreurs que celles listees ci-desous peuvent etre renvoyees. Les erreurs les plus courantes pour chown() sont les suivantes : EACCES L'acces a un element du chemin est interdit. (Voir aussi path_resolution(7).) EBADF (fchown()) Le descripteur de fichier fd est non valable. EBADF (fchownat()) path is relative but dirfd is neither AT_FDCWD nor a valid file descriptor. EFAULT path pointe en dehors de l'espace d'adressage accessible. EINVAL (fchownat()) flags contient un attribut non valable. EIO (fchown()) Une erreur d'entree-sortie bas niveau s'est produite durant la modification de l'inoeud. ELOOP path contient une reference circulaire (a travers un lien symbolique) ENAMETOOLONG path est trop long. ENOENT Le fichier n'existe pas. ENOMEM La memoire disponible du noyau n'etait pas suffisante. ENOTDIR Un element du chemin d'acces n'est pas un repertoire. ENOTDIR (fchownat()) path is relative and dirfd is a file descriptor referring to a file other than a directory. EPERM Le processus appelant n'a pas les permissions necessaires (voir plus haut) pour modifier le proprietaire et/ou le groupe. EPERM Le fichier est indique comme immuable ou uniquement completable (voir FS_IOC_SETFLAGS(2const)). EROFS Le fichier indique reside sur un systeme de fichiers en lecture seule. VERSIONS La version BSD 4.4 ne peut etre appelee que par le superutilisateur (ce qui signifie qu'un utilisateur ordinaire ne peut pas ceder la propriete d'un fichier). STANDARDS POSIX.1-2008. HISTORIQUE chown() fchown() lchown() 4.4BSD, SVr4, POSIX.1-2001. fchownat() POSIX.1-2008. Linux 2.6.16, glibc 2.4. NOTES Proprietaire des nouveaux fichiers Lorsqu'un nouveau fichier est cree (par exemple avec open(2) ou mkdir(2)), son proprietaire est le meme que l'UID du systeme de fichiers du processus createur. Le groupe du fichier depend de plusieurs facteurs, incluant le type du systeme de fichiers, les options utilisees pour monter le systeme de fichiers, et si le bit de permission SGID est active pour le repertoire parent. Si le systeme de fichiers accepte les options -o grpid (ou de facon identique -o bsdgroups) et -o nogrpid (ou de facon identique -o sysvgroups) de mount(8), les regles sont alors les suivantes : - Si le systeme de fichiers est monte avec l'option -o grpid, le groupe du nouveau fichier est celui du repertoire parent. - Si le systeme de fichiers est monte avec l'option -o nogrpid et si le bit SGID est deactive pour le repertoire parent, le groupe du nouveau fichier est le GID du systeme de fichiers du processus. - Si le systeme de fichiers est monte avec l'option -o nogrpid et si le bit SGID est active pour le repertoire parent, le groupe du nouveau fichier est celui du repertoire parent. A partir de Linux 4.12, les options de montage -o grpid et -o nogrpid sont acceptees par ext2, ext3, ext4 et XFS. Les systemes de fichiers qui n'acceptent pas ces options de montage suivent les regles de l'option -o nogrpid. Notes de la glibc On older kernels where fchownat() is unavailable, the glibc wrapper function falls back to the use of chown() and lchown(). When path is relative, glibc constructs a pathname based on the symbolic link in /proc/self/fd that corresponds to the dirfd argument. NFS La semantique de chown() est volontairement modifiee sur les systemes de fichiers NFS ou la correspondance d'UID est activee. De plus, c'est la semantique de tous les appels systeme accedant au contenu des fichiers qui est modifiee, puisque chown() peut declencher une interdiction immediate d'acces a des fichiers deja ouverts. Un cache situe du cote client peut induire un delai entre l'instant ou l'appartenance du fichier est modifiee et le moment ou l'acces est effectivement accorde a l'utilisateur. Details historiques Les appels systeme chown(), fchown() et lchown() originaux de Linux ne geraient que des identifiants d'utilisateur et de groupe sur 16 bits. En consequence, Linux 2.4 a ajoute chown32(), fchown32() et lchown32() qui prennent en charge des identifiants 32 bits. Les fonctions chown(), fchown() et lchown() de la glibc qui les encapsulent gerent de maniere transparente ces differences entre noyaux. Avant Linux 2.1.81 (sauf 2.1.46), chown() ne suivait pas les liens symboliques. Depuis Linux 2.1.81, chown() suit les liens symboliques, et il existe un nouvel appel systeme, lchown(), qui ne les suit pas. Depuis Linux 2.1.86, ce nouvel appel systeme (qui a donc la meme semantique que l'ancien chown()) a pris son numero de syscall, et chown() a recu un nouveau numero. EXEMPLES Le programme suivant change le proprietaire d'un fichier fourni comme second parametre de la ligne de commande, en l'attribuant au proprietaire fourni en premier argument. Le nouveau proprietaire peut etre precise par une valeur numerique ou par le nom de l'utilisateur (qui sera converti en UID avec getpwnam(3) pour rechercher dans le fichier des mots de passe du systeme). Source du programme #include #include #include #include #include int main(int argc, char *argv[]) { char *endptr; uid_t uid; struct passwd *pwd; if (argc != 3 || argv[1][0] == '\0') { fprintf(stderr, "%s \n", argv[0]); exit(EXIT_FAILURE); } uid = strtol(argv[1], &endptr, 10); /* Permet une chaine numerique */ if (*endptr != '\0') { /* N'etait pas une chaine numerique */ pwd = getpwnam(argv[1]); /* Essai de recuperer l'UID de l'utilisateur */ if (pwd == NULL) { perror("getpwnam"); exit(EXIT_FAILURE); } uid = pwd->pw_uid; } if (chown(argv[2], uid, -1) == -1) { perror("chown"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } VOIR AUSSI chgrp(1), chown(1), chmod(2), flock(2), path_resolution(7), symlink(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.15 17 mai 2025 chown(2)