setfsgid - Définir le GID pour les vérifications d'accès au
système de fichiers
Bibliothèque C standard (
libc,
-lc)
#include <sys/fsuid.h>
int setfsgid(uid_t fsgid);
Sur Linux, un processus a à la fois un identifiant de groupe de
système de fichiers et un identifiant de groupe effectif. L'identifiant
de groupe de système de fichiers (spécifique à Linux) est
utilisé pour la vérification des droits lors de l'accès
aux systèmes de fichiers, alors que l'identifiant de groupe effectif
est utilisé pour d'autres types de vérifications de droits (voir
credentials(7)).
Normalement, la valeur de l'identifiant de groupe du système de fichiers
du processus est la même que celle de l'identifiant de groupe effectif.
C'est ainsi, car à chaque fois que l'identifiant de groupe effectif
d'un processus change, le noyau passe l'identifiant de groupe du
système de fichiers à la valeur de l'identifiant de groupe
effectif. Un processus peut faire diverger ses identifiants de groupe de
système de fichiers et effectif, en utilisant
setfsgid() pour
passer l'identifiant de groupe du système de fichiers à la
valeur donnée dans
fsgid.
setfsgid() ne réussira que si l'appelant est le superutilisateur
ou si
fsgid correspond au GID réel de l'appelant, à son
GID effectif, à son GID sauvé, ou encore à la valeur de
l'identifiant de l'utilisateur dans le système de fichiers au moment de
l'appel.
En cas de succès comme en cas d'échec, l'appel renvoie la
dernière valeur de l'identifiant du groupe (GID) de l'appelant dans le
système de fichiers.
Cet appel système est présent depuis Linux 1.2.
setfsgid() est spécifique à Linux et ne devrait pas
être employé dans des programmes destinés à
être portables.
Le concept d'identifiant de groupe du système de fichiers et l'appel
système
setfsgid() ont été inventés pour
des raisons historiques qui ne s'appliquent plus sur les noyaux Linux
modernes. Consultez
setfsuid(2) si vous souhaitez connaître les
raisons pour lesquelles
setfsuid(2) et
setfsgid() ne sont
désormais plus nécessaires.
L'appel système
setfsgid() originel de Linux ne gérait que
des identifiants de groupe sur 16 bits. En conséquence,
Linux 2.4 a ajouté
setfsgid32() qui prend en charge des
identifiants 32 bits. La fonction
setfsgid() de la glibc qui
l'encapsule gère de manière transparente ces différences
entre noyaux.
Dans la glibc 2.15 et les versions antérieures, lorsque l'enveloppe de
cet appel système détermine qu'elle ne peut pas passer cet
argument au noyau sans tronquer un entier (car le noyau est ancien et ne
gère pas les identifiants de groupe 32 bits), elle renverra
-1 et positionnera
errno sur
EINVAL sans essayer l'appel
système.
Aucune indication concernant l'erreur n'est renvoyée à l'appelant
et le fait que la même valeur soit retournée en cas de
succès ou d'échec ne permet pas de savoir si l'appel a
réussi ou échoué. Pour cela, l'appelant devra se
référer à la valeur renvoyée par un appel
ultérieur par exemple à
setfsgid(-1) (qui échouera
toujours). Cet appel permettra de savoir si un appel antérieur à
setfsgid() a changé l'identifiant du groupe (GID) au niveau du
système de fichiers. Au minimum,
EPERM doit être
renvoyé lorsque l'appel échoue (puisque l'appelant ne dispose
pas des privilèges
CAP_SETGID).
kill(2),
setfsuid(2),
capabilities(7),
credentials(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]>,
Frédéric Hantrais <
[email protected]> et Jean-Philippe
MENGUAL <
[email protected]>
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 à
[email protected]