Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

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

SYNOPSIS

       #include <unistd.h>

       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);

   Exigences  de  macros  de  test de fonctionnalites 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

DESCRIPTION

       Ces appels systeme modifient le proprietaire et le groupe d'un fichier.
       Ils different seulement dans la facon dont le fichier est specifie :

       * chown() modifie l'appartenance du fichier indique dans path, qui  est
         dereference s'il s'agit d'un lien symbolique.

       * 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. 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 obligatoire sur le fichier, et n'est donc pas efface par un
       chown().

VALEUR RENVOY'EE

       S'il reussit, cet appel systeme renvoie 0. S'il echoue, il  renvoie  -1
       et remplit errno en consequence.

ERREURS

       Suivant  le type de systeme de fichiers, plusieurs erreurs peuvent etre
       renvoyees. Les plus courantes pour chown() sont les suivantes :

       EACCES L'acces a  un  element  du  chemin  est  interdit.  (Voir  aussi
              path_resolution(7).)

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

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

       ENAMETOOLONG
              path 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.

       EPERM  Le processus appelant n'a pas les permissions necessaires  (voir
              plus haut) pour modifier le proprietaire et/ou le groupe.

       EROFS  Le fichier specifie reside sur un systeme de fichiers en lecture
              seule.

       Les erreurs courantes pour fchown() sont les suivantes :

       EBADF  Le descripteur de fichier est invalide.

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

       ENOENT Voir plus haut.

       EPERM  Voir plus haut.

       EROFS  Voir plus haut.

CONFORMIT'E

       BSD 4.4, SVr4, POSIX.1-2001.

       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).

NOTES

       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.

       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.

       Dans  Linux 2.6.25,  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.

       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.

       Dans  les versions de Linux anterieures a 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 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.

EXEMPLE

       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.

       #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 <proprietaire> <fichier>\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

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

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.32 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.