dwww Home | Manual pages | Find package

chown(2)                      System Calls Manual                     chown(2)

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 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 descrip-
          teur de fichier ouvert fd.

       •  lchown() est comme chown(), mais ne déréférence pas les liens symbo-
          liques.

       Seul  un processus privilégié (sous Linux : un processus qui a la capa-
       cité CAP_CHOWN) peut modifier le propriétaire d'un fichier. Le proprié-
       taire peut modifier le groupe du fichier pour n'importe quel groupe au-
       quel il appartient. Un processus privilégié (sous Linux : avec la capa-
       cité 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  modi-
       fiés par un utilisateur ordinaire, les bits S_ISUID et S_ISGID sont ef-
       facés. POSIX ne précise pas s'il faut agir de même lorsque c'est le su-
       perutilisateur  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écu-
       table par les membres de son groupe (c'est-à-dire un fichier  pour  le-
       quel  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  fi-
       chier 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 re-
       lativement 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, che-
       min est interprété comme étant relatif au répertoire courant du proces-
       sus 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 lo-
       gique 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 obte-
              nir 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é dans Linux 2.6.16 ; la prise en charge de la
       bibliothèque a été ajoutée dans la glibc 2.4.

STANDARDS
       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  mk-
       dir(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  fac-
       teurs,  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  nou-
          veau 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'op-
       tion -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  fi-
       chiers  qui est modifiée, puisque chown() peut déclencher une interdic-
       tion 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 sym-
       boliques.  Depuis  Linux 2.1.81, chown() suit les liens symboliques, et
       il existe un nouvel appel système, lchown(), qui ne les suit  pas.  De-
       puis  Linux  2.1.86, ce nouvel appel système (qui a donc la même séman-
       tique 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>

       "int0
       "main(int argc, char *argv[])0
       {
           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  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.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⟩.

Pages du manuel de Linux 6.03   5 février 2023                        chown(2)

Generated by dwww version 1.15 on Sat Jun 29 00:27:06 CEST 2024.