# seteuid

## NAME



           seteuid, setegid - set effective user or group ID
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <unistd.h>**
    
           **int seteuid(uid_t** _euid_**);**
           **int setegid(gid_t** _egid_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **seteuid**(), **setegid**():
               _POSIX_C_SOURCE >= 200112L
                   || /* glibc <= 2.19: */ _BSD_SOURCE
    


## DESCRIPTION



           **seteuid**() sets the effective user ID of the calling process.
           Unprivileged processes may only set the effective user ID to the
           real user ID, the effective user ID or the saved set-user-ID.
    
           Precisely the same holds for **setegid**() with "group" instead of
           "user".
    


## RETURN VALUE



           On success, zero is returned.  On error, -1 is returned, and _errno_
           is set to indicate the error.
    
           _Note_ : there are cases where **seteuid**() can fail even when the
           caller is UID 0; it is a grave security error to omit checking for
           a failure return from **seteuid**().
    


## ERRORS



           **EINVAL** The target user or group ID is not valid in this user
                  namespace.
    
           **EPERM** In the case of **seteuid**(): the calling process is not
                  privileged (does not have the **CAP_SETUID** capability in its
                  user namespace) and _euid_ does not match the current real
                  user ID, current effective user ID, or current saved set-
                  user-ID.
    
                  In the case of **setegid**(): the calling process is not
                  privileged (does not have the **CAP_SETGID** capability in its
                  user namespace) and _egid_ does not match the current real
                  group ID, current effective group ID, or current saved set-
                  group-ID.
    


## VERSIONS



           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).  On
           an arbitrary system one should check **_POSIX_SAVED_IDS**.
    
           Under glibc 2.0, **seteuid(**_euid_**)** is equivalent to **setreuid(-1,**_euid_**)**
           and hence may change the saved set-user-ID.  Under glibc 2.1 and
           later, it is equivalent to **setresuid(-1,**_euid_**, -1)** and hence does
           not change the saved set-user-ID.  Analogous remarks hold for
           **setegid**(), with the difference that the change in implementation
           from **setregid(-1,**_egid_**)** to **setresgid(-1,**_egid_**, -1)** occurred in
           glibc 2.2 or 2.3 (depending on the hardware architecture).
    
           According to POSIX.1, **seteuid**() (**setegid**()) need not permit _euid_
           (_egid_) to be the same value as the current effective user (group)
           ID, and some implementations do not permit this.
    
       **C library/kernel differences**
           On Linux, **seteuid**() and **setegid**() are implemented as library
           functions that call, respectively, setresuid(2) and setresgid(2).
    


## STANDARDS



           POSIX.1-2008.
    


* * *