Provided by:
manpages-fr-dev_3.32d0.2p4-1_all 
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> >>.