Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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

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

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

   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.

       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  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 <sys/types.h>
       #include <unistd.h>

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

           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)

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