Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       chown, fchown, lchown, fchownat - Modifier l'appartenance d'un fichier

SYNOPSIS

       #include <unistd.h>

       int chown(const char *pathname, uid_t owner, gid_t group);
       int fchown(int fd, uid_t owner, gid_t group);
       int lchown(const char *pathname, uid_t owner, gid_t group);

       #include <fcntl.h> /* Définition des constantes AT_* */
       #include <unistd.h>

       int fchownat(int dirfd, const char *pathname,
                    uid_t owner, gid_t group, int flags);

   Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

       fchown(), lchown() :
           _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
           || /* Depuis la glibc 2.12 : */ _POSIX_C_SOURCE >= 200809L

       fchownat() :
           Depuis la glibc 2.10 :
               _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
           Avant la glibc 2.10 :
               _ATFILE_SOURCE

DESCRIPTION

       Ces  appels  système  modifient  le  propriétaire  et le groupe d'un fichier. Les appels système chown(),
       fchown() et lchown() diffèrent seulement dans la façon dont le fichier est indiqué :

       * chown() modifie l'appartenance du fichier indiqué dans pathname, qui est déréférencé s'il  s'agit  d'un
         lien symbolique.

       * fchown() modifie l'appartenance du fichier référencé par le descripteur de fichier ouvert fd.

       * lchown() est comme chown(), mais ne déréférence pas les liens symboliques.

       Seul  un  processus  privilégié  (sous Linux : un processus qui a la capacité CAP_CHOWN) peut modifier le
       propriétaire d'un fichier. Le propriétaire peut modifier le groupe du fichier pour n'importe quel  groupe
       auquel  il appartient. Un processus privilégié (sous Linux : avec la capacité CAP_CHOWN) peut modifier le
       groupe arbitrairement.

       Si l'argument owner ou group vaut -1, l'élément correspondant n'est pas changé.

       Quand le propriétaire, ou le groupe d'un fichier exécutable sont modifiés par un  utilisateur  ordinaire,
       les  bits  S_ISUID  et S_ISGID sont effacés. POSIX ne précise pas s'il faut agir de même lorsque c'est le
       superutilisateur qui invoque chown(). Le comportement de Linux dans ce cas dépend de la version du noyau.
       Si le fichier n'est pas exécutable par les membres de son groupe (c'est-à-dire un fichier pour lequel  le
       bit  S_IXGRP  n'est  pas  positionné),  le bit S_ISGID indique la présence d'un verrou obligatoire sur le
       fichier, et n'est donc pas effacé par un chown().

   fchownat()
       L'appel système fchownat() fonctionne exactement comme  chown(),  les  seules  différences  étant  celles
       décrites ici.

       Si  pathname  est  un  chemin  relatif,  il  est  interprété  par  rapport au répertoire référencé par le
       descripteur de fichier dirfd (plutôt que relativement au  répertoire  de  travail  courant  du  processus
       appelant, comme cela est fait par chown() pour un chemin relatif).

       Si  pathname est relatif et si dirfd est la valeur spéciale AT_FDCWD, pathname est interprété comme étant
       relatif au répertoire courant du processus appelant (comme chown()).

       Si pathname est un chemin absolu, dirfd est ignoré.

       L'argument flags est un masque construit en réalisant un OU logique entre zéro ou plusieurs  des  valeurs
       suivantes :

       AT_EMPTY_PATH (depuis Linux 2.6.39)
              Si  pathname  est  une  chaîne vide, opérer sur le fichier référencé par dirfd (qui peut avoir été
              obtenu en utilisant open(2) avec le drapeau O_PATH). Dans ce cas, dirfd peut référer à  tout  type
              de  fichier, pas uniquement un répertoire. Si dirfd vaut AT_FDCWD, l'appel opère sur le répertoire
              en cours. Ce drapeau est spécifique à  Linux,  _GNU_SOURCE  doit  être  définie  pour  obtenir  sa
              définition.

       AT_SYMLINK_NOFOLLOW
              Si  pathname est un lien symbolique, ne pas le déréférencer, mais renvoyer des informations sur le
              lien lui-même, comme le fait lchown(). (Par défaut, fchownat() suit les liens  symboliques,  comme
              chown().)

       Consultez openat(2) pour une explication de la nécessité de fchownat().

VALEUR RENVOYÉE

       S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et remplit errno en conséquence.

ERREURS

       Suivant  le  type  de  système  de  fichiers,  d'autres erreurs que celles listées ci-desous peuvent être
       renvoyées.

       Les erreurs les plus courantes pour chown() sont les suivantes :

       EACCES L'accès à un élément du chemin est interdit. (Voir aussi path_resolution(7).)

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

       ELOOP  Trop de liens symboliques ont été rencontrés en parcourant pathname.

       ENAMETOOLONG
              pathname est trop long.

       ENOENT Le fichier n'existe pas.

       ENOMEM Pas assez de mémoire pour le noyau.

       ENOTDIR
              Un élément du chemin d'accès n'est pas un répertoire.

       EPERM  Le processus appelant n'a pas les permissions  nécessaires  (voir  plus  haut)  pour  modifier  le
              propriétaire et/ou le groupe.

       EROFS  Le fichier indiqué réside sur un système de fichiers en lecture seule.

       Les erreurs courantes pour fchown() sont les suivantes :

       EBADF  Le descripteur de fichier est invalide.

       EIO    Une erreur d'entrée-sortie bas niveau s'est produite durant la modification de l'inœud.

       ENOENT Voir plus haut.

       EPERM  Voir plus haut.

       EROFS  Voir plus haut.

       Les  mêmes  erreurs  qui  apparaissent  pour  chown()  peuvent  apparaître  pour  fchownat(). Les erreurs
       supplémentaires suivantes peuvent également se produire pour fchownat() :

       EBADF  dirfd n'est pas un descripteur de fichier valable.

       EINVAL flags contient un attribut invalide.

       ENOTDIR
              pathname est relatif, et le descripteur de fichier dirfd est  associé  à  un  fichier,  pas  à  un
              répertoire.

VERSIONS

       fchownat() a été ajouté au noyau Linux dans sa version 2.6.16 ; la glibc le gère depuis la version 2.4.

CONFORMITÉ

       chown(), fchown(), lchown() : 4.4BSD, SVr4, POSIX.1-2001, POSIX.1-2008.

       La  version  BSD 4.4  ne peut être appelée que par le superutilisateur (ce qui signifie qu'un utilisateur
       ordinaire ne peut pas céder la propriété d'un fichier).

       fchownat() : POSIX.1-2008.

NOTES

       Les appels système chown(), fchown() et lchown() originaux de Linux  ne  géraient  que  des  identifiants
       d'utilisateur  et  de  groupe  sur  16 bits.  En conséquence, Linux 2.4 a ajouté chown32(), fchown32() et
       lchown32() qui prennent en charge des identifiants 32 bits. Les fonctions chown(), fchown()  et  lchown()
       de la glibc qui les encapsulent gèrent de manière transparente ces différences entre noyaux.

       Lorsqu'un  nouveau  fichier est créé (par exemple avec open(2) ou mkdir(2)), son propriétaire est le même
       que l'UID du système de fichiers du  processus  créateur.  Le  groupe  du  fichier  dépend  de  plusieurs
       facteurs,  incluant  le  type  du  système  de  fichiers, les options utilisées pour monter le système de
       fichiers, et si le bit de permission SGID est activé pour le répertoire parent. Si le système de fichiers
       accepte les options -o grpid (ou de façon identique -o bsdgroups) et -o nogrpid (ou  de  façon  identique
       -o sysvgroups) de mount(8), les règles sont alors les suivantes :

       * Si  le  système de fichiers est monté avec l'option -o grpid, le groupe du nouveau fichier est celui du
         répertoire parent.

       * Si le système de fichiers est monté avec l'option -o nogrpid et si le bit SGID  est  déactivé  pour  le
         répertoire parent, le groupe du nouveau fichier est le GID du système de fichiers du processus.

       * Si  le  système  de  fichiers  est  monté avec l'option -o nogrpid et si le bit SGID est activé pour le
         répertoire parent, le groupe du nouveau fichier est celui du répertoire parent.

       Dans Linux 2.6.25, les options de montage -o grpid et -o nogrpid sont acceptées par ext2, ext3,  ext4  et
       XFS.  Les  systèmes de fichiers qui n'acceptent pas ces options de montage suivent les règles de l'option
       -o nogrpid.

       La  sémantique  de  chown()  est  volontairement  modifiée  sur  les  systèmes  de  fichiers  NFS  où  la
       correspondance  d'UID  est  activée.  De plus, c'est la sémantique de tous les appels système accédant au
       contenu des fichiers qui est modifiée, puisque chown() peut déclencher une interdiction immédiate d'accès
       à des fichiers déjà ouverts. Un cache situé du côté client peut  induire  un  délai  entre  l'instant  où
       l'appartenance du fichier est modifiée et le moment où l'accès est effectivement accordé à l'utilisateur.

       Dans  les  versions  de  Linux  antérieures  à  2.1.81  (sauf  2.1.46),  chown() ne suivait pas les liens
       symboliques. Depuis cette version, chown() suit les liens symboliques,  et  il  existe  un  nouvel  appel
       système,  lchown(), qui ne les suit pas. Depuis Linux 2.1.86, ce nouvel appel système (qui a donc la même
       sémantique que l'ancien chown()) a pris son numéro de syscall, et chown() a reçu un nouveau numéro.

EXEMPLE

       Le programme suivant change le propriétaire d'un fichier fourni comme second paramètre  de  la  ligne  de
       commande,  en  l'attribuant au propriétaire fourni en premier argument. Le nouveau propriétaire peut être
       précisé par une valeur numérique 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 système.

   Source du programme
       #include <pwd.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       int
       main(int argc, char *argv[])
       {
           uid_t uid;
           struct passwd *pwd;
           char *endptr;

           if (argc != 3 || argv[1][0] == '\0') {
               fprintf(stderr, "%s <propriétaire> <fichier>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           uid = strtol(argv[1], &endptr, 10);  /* Permet une chaîne numérique */

           if (*endptr != '\0') {         /* N'était pas une chaîne numérique */
               pwd = getpwnam(argv[1]);    /* Essai de récupérer 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

       chmod(2), flock(2), path_resolution(7), symlink(7)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe      Blaess      <http://www.blaess.fr/christophe/>      (1996-2003),       Alain       Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de  traduction de
       Debian (2006-2009).

       Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org>  ou  par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».

Linux                                             19 mars 2014                                          CHOWN(2)