Provided by: manpages-fr-dev_4.15.0-9_all bug

NOM

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

SYNOPSIS

       #include <unistd.h>

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

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

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

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

       fchown(), lchown() :
           /* Depuis la glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
               || _XOPEN_SOURCE >= 500
               || /* Versions de Glibc <= 2.19: */ _BSD_SOURCE

       fchownat() :
           Depuis la version 2.10 de la glibc :
               _POSIX_C_SOURCE >= 200809L
           Avant la version 2.10 de la glibc :
               _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 chemin, 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 et depuis la version 2.2.13,  root  est
       traité  comme  les autres utilisateurs. 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 impératif sur le fichier, et n'est donc pas
       effacé par un chown().

       Quand le propriétaire ou le groupe d'un fichier exécutable  est  modifié  (quel  que  soit
       l'utilisateur), tous les paramètres de capacités du fichier sont effacés.

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

       Si chemin 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 chemin est relatif et si dirfd est la valeur spéciale AT_FDCWD, chemin  est  interprété
       comme étant relatif au répertoire courant du processus appelant (comme chown()).

       Si pathname est absolu, alors dirfd est ignoré.

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

       AT_EMPTY_PATH (depuis Linux 2.6.39)
              Si chemin 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 chemin 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

       En cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé et errno  est  définie
       pour préciser l'erreur.

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

       EBADF  (fchown()) Le descripteur de fichier fd est non valable.

       EBADF  (fchownat())   pathname  est  relatif  mais  dirfd  ne  vaut  ni  AT_FDCWD,  ni  un
              descripteur de fichier valable.

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

       EINVAL (fchownat()) flags contient un attribut non valable.

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

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

       ENAMETOOLONG
              nom_chemin est trop long.

       ENOENT Le fichier n'existe pas.

       ENOMEM La mémoire disponible du noyau n'était pas suffisante.

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

       ENOTDIR
              (fchownat()) pathname est relatif et dirfd est un descripteur  de  fichier  faisant
              référence à un fichier qui n'est pas un dossier.

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

       EPERM  Le  fichier  est  indiqué  comme   immuable   ou   uniquement   complétable   (voir
              ioctl_iflags(2)).

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

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

   Propriétaire des nouveaux fichiers
       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.

       À partir de Linux 4.12, 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.

   Notes de la glibc
       Sur les anciens noyaux où fchownat() n'est pas disponible, la fonction enveloppe de  glibc
       se  rabat  sur  l'utilisation  de  chown() et de lchown(). Quand chemin est relatif, glibc
       construit un chemin à partir du lien symbolique dans /proc/self/fd  qui  correspond  à  un
       paramètre dirfd.

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

   Détails historiques
       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.

       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.

EXEMPLES

       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

       chgrp(1), chown(1), chmod(2), flock(2), path_resolution(7), symlink(7)

COLOPHON

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

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot <david@tilapin.org> et Jean-Philippe MENGUAL
       <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.