Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


setreuid(2) — Linux manual page

NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |VERSIONS |STANDARDS |HISTORY |SEE ALSO |COLOPHON

setreuid(2)                System Calls Manualsetreuid(2)

NAME        top

       setreuid, setregid - set real and/or effective user or group ID

LIBRARY        top

       Standard C library (libc,-lc)

SYNOPSIS        top

#include <unistd.h>int setreuid(uid_truid, uid_teuid);int setregid(gid_trgid, gid_tegid);   Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):setreuid(),setregid():           _XOPEN_SOURCE >= 500               || /* Since glibc 2.19: */ _DEFAULT_SOURCE               || /* glibc <= 2.19: */ _BSD_SOURCE

DESCRIPTION        top

setreuid() sets real and effective user IDs of the calling       process.       Supplying a value of -1 for either the real or effective user ID       forces the system to leave that ID unchanged.       Unprivileged processes may only set the effective user ID to the       real user ID, the effective user ID, or the saved set-user-ID.       Unprivileged users may only set the real user ID to the real user       ID or the effective user ID.       If the real user ID is set (i.e.,ruid is not -1) or the effective       user ID is set to a value not equal to the previous real user ID,       the saved set-user-ID will be set to the new effective user ID.       Completely analogously,setregid() sets real and effective group       ID's of the calling process, and all of the above holds with       "group" instead of "user".

RETURN VALUE        top

       On success, zero is returned.  On error, -1 is returned, anderrno       is set to indicate the error.Note: there are cases wheresetreuid() can fail even when the       caller is UID 0; it is a grave security error to omit checking for       a failure return fromsetreuid().

ERRORS        top

EAGAINThe call would change the caller's real UID (i.e.,ruid              does not match the caller's real UID), but there was a              temporary failure allocating the necessary kernel data              structures.EAGAINruid does not match the caller's real UID and this call              would bring the number of processes belonging to the real              user IDruid over the caller'sRLIMIT_NPROCresource limit.              Since Linux 3.1, this error case no longer occurs (but              robust applications should check for this error); see the              description ofEAGAINinexecve(2).EINVALOne or more of the target user or group IDs is not valid in              this user namespace.EPERMThe calling process is not privileged (on Linux, does not              have the necessary capability in its user namespace:CAP_SETUIDin the case ofsetreuid(), orCAP_SETGIDin the              case ofsetregid()) and a change other than (i) swapping              the effective user (group) ID with the real user (group)              ID, or (ii) setting one to the value of the other or (iii)              setting the effective user (group) ID to the value of the              saved set-user-ID (saved set-group-ID) was specified.

VERSIONS        top

       POSIX.1 does not specify all of the UID changes that Linux permits       for an unprivileged process.  Forsetreuid(), the effective user       ID can be made the same as the real user ID or the saved set-user-       ID, and it is unspecified whether unprivileged processes may set       the real user ID to the real user ID, the effective user ID, or       the saved set-user-ID.  Forsetregid(), the real group ID can be       changed to the value of the saved set-group-ID, and the effective       group ID can be changed to the value of the real group ID or the       saved set-group-ID.  The precise details of what ID changes are       permitted vary across implementations.       POSIX.1 makes no specification about the effect of these calls on       the saved set-user-ID and saved set-group-ID.

STANDARDS        top

       POSIX.1-2008.

HISTORY        top

       POSIX.1-2001, 4.3BSD (first appeared in 4.2BSD).       Setting the effective user (group) ID to the saved set-user-ID       (saved set-group-ID) is possible since Linux 1.1.37 (1.1.38).       The original Linuxsetreuid() andsetregid() system calls       supported only 16-bit user and group IDs.  Subsequently, Linux 2.4       addedsetreuid32() andsetregid32(), supporting 32-bit IDs.  The       glibcsetreuid() andsetregid() wrapper functions transparently       deal with the variations across kernel versions.C library/kernel differences       At the kernel level, user IDs and group IDs are a per-thread       attribute.  However, POSIX requires that all threads in a process       share the same credentials.  The NPTL threading implementation       handles the POSIX requirements by providing wrapper functions for       the various system calls that change process UIDs and GIDs.  These       wrapper functions (including those forsetreuid() andsetregid())       employ a signal-based technique to ensure that when one thread       changes credentials, all of the other threads in the process also       change their credentials.  For details, seenptl(7).

SEE ALSO        top

getgid(2),getuid(2),seteuid(2),setgid(2),setresuid(2),setuid(2),capabilities(7),credentials(7),user_namespaces(7)

COLOPHON        top

       This page is part of theman-pages (Linux kernel and C library       user-space interface documentation) project.  Information about       the project can be found at        ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report       for this manual page, see       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.       This page was obtained from the tarball man-pages-6.15.tar.gz       fetched from       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on       2025-08-11.  If you discover any rendering problems in this HTML       version of the page, or you believe there is a better or more up-       to-date source for the page, or you have corrections or       improvements to the information in this COLOPHON (which isnot       part of the original manual page), send a mail to       man-pages@man7.orgLinux man-pages 6.15            2025-05-17setreuid(2)

Pages that refer to this page:execve(2)getgid(2)getresuid(2)getuid(2)seteuid(2)setgid(2)setresuid(2)setuid(2)syscalls(2)capabilities(7)credentials(7)nptl(7)user_namespaces(7)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp