Man page - chown(2)

Packages contains this manual

Available languages:

en fr pl ja ru de

Manual

chown

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
fchownat()
VALEUR RENVOYÉE
ERREURS
VERSIONS
STANDARDS
HISTORIQUE
NOTES
Propriétaire des nouveaux fichiers
Notes de la glibc
NFS
Détails historiques
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

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 FS_IOC_SETFLAGS (2const)).

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