Provided by: manpages-fr-dev_4.13-4_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 glibc 2.10 :
               _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 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  reçoit  une
       valeur adéquate.

ERREURS

       Suivant  le  type  de  système de fichiers, d'autres erreurs que celles listées ci-dessous
       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 nom_chemin pointe en dehors de l'espace d'adressage accessible.

       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.

       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 marqué comme immuable ou en ajout seulement (voir ioctl_iflags(2)).

       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 fd est non valable.

       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 non valable.

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

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.10 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 ⟨⟩.