Add a SECURITY CONSIDERATIONS example: make note that access to open
file descriptors does not change upon dropping privilege, and include a likely case of `setuid(non_superuser); exec(...);'. Sponsored by: DARPA, NAI Labs Obtained from: TrustedBSD Project
This commit is contained in:
parent
bf33ab99c5
commit
306b98b34d
@ -128,6 +128,39 @@ The functions will fail if:
|
||||
The user is not the super user and the ID
|
||||
specified is not the real, effective ID, or saved ID.
|
||||
.El
|
||||
.Sh SECURITY CONSIDERATIONS
|
||||
Read and write permissions to files are determined upon a call to
|
||||
.Xr 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.
|
||||
.Pp
|
||||
To prevent these files from remaining open after an
|
||||
.Xr exec 3
|
||||
call, be sure to set the close-on-exec flag is set:
|
||||
.Bd -literal
|
||||
void
|
||||
pseudocode(void)
|
||||
{
|
||||
int fd;
|
||||
/* ... */
|
||||
|
||||
fd = open("/path/to/sensitive/data", O_RDWR);
|
||||
if (fd == -1)
|
||||
err(1, "open");
|
||||
|
||||
/*
|
||||
* Set close-on-exec flag; see fcntl(2) for more information.
|
||||
*/
|
||||
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
|
||||
err(1, "fcntl(F_SETFD)");
|
||||
/* ... */
|
||||
execve(path, argv, environ);
|
||||
}
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr getgid 2 ,
|
||||
.Xr getuid 2 ,
|
||||
|
Loading…
Reference in New Issue
Block a user