|
NAMEsetuid , seteuid ,
setgid , setegid —
set user and group ID
LIBRARYStandard C Library (libc, -lc)SYNOPSIS#include <unistd.h>
int
int
int
int
DESCRIPTIONThesetuid () system call sets the real and effective
user IDs and the saved set-user-ID of the current process to the specified
value. The setuid () system call is permitted if the
specified ID is equal to the real user ID or the effective user ID of the
process, or if the effective user ID is that of the super user.
The The RETURN VALUESUpon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.ERRORSThe system calls will fail if:
SEE ALSOgetgid(2), getuid(2), issetugid(2), setregid(2), setreuid(2)STANDARDSThesetuid () and setgid () system
calls are compliant with the IEEE Std 1003.1-1990
(“POSIX.1”) specification with
_POSIX_SAVED_IDS not defined with the permitted
extensions from Appendix B.4.2.2. The seteuid () and
setegid () system calls are extensions based on the
POSIX concept of _POSIX_SAVED_IDS , and have been
proposed for a future revision of the standard.
HISTORYThesetuid () function appeared in
Version 1 AT&T UNIX. The
setgid () function appeared in
Version 4 AT&T UNIX.
SECURITY CONSIDERATIONSRead and write permissions to files are determined upon a call to open(2). Once a file descriptor is open, dropping privilege does not affect the process's read/write permissions, even if the user ID specified has no read or write permissions to the file. These files normally remain open in any new process executed, resulting in a user being able to read or modify potentially sensitive data.To prevent these files from remaining open after an exec(3) call, be sure to set the close-on-exec flag: void pseudocode(void) { int fd; /* ... */ fd = open("/path/to/sensitive/data", O_RDWR | O_CLOEXEC); if (fd == -1) err(1, "open"); /* ... */ execve(path, argv, environ); }
Visit the GSP FreeBSD Man Page Interface. |