setuid
and setgid
are needed for tasks that require different privileges than what the user is normally granted, such as the ability to alter system files or databases to change their login password. Some of the tasks that require additional privileges may not immediately be obvious, though, such as the ping
command, which must send and listen for control packets on a network interface.
File modes
Thesetuid
and setgid
bits are normally represented as the values 4 for setuid
and 2 for setgid
in the high-order octal digit of the file mode. For example, 6711
has both the setuid
and setgid
bits () set, and also the file read/write/executable for the owner (7), and executable by the group (first 1) and others (second 1). Most implementations have a symbolic representation of these bits; in the previous example, this could be u=rwx,go=x,ug+s
.
Typically, chmod
does not have a recursive mode restricted to directories, so modifying an existing directory tree must be done manually, with a command such as .
Effects
Thesetuid
and setgid
flags have different effects, depending on whether they are applied to a file, to a directory or binary executable or non-binary executable file. The setuid
and setgid
flags have an effect only on binary executable files and not on scripts (e.g., Bash, Perl, Python).
When set on an executable file
When thesetuid
or setgid
attributes are set on an Security impact
For security purposes, the invoking user is usually prohibited by the system from altering the new process in any way, such as by using ptrace
, LD_LIBRARY_PATH
or sending signals to it, to exploit the raised privilege, although signals from the terminal will still be accepted.
While the setuid
feature is very useful in many cases, its improper use can pose a security risk if the setuid
attribute is assigned to setuid
attribute when applied to executable '' shell scripts''.
The presence of setuid
executables explains why the chroot
chroot is a shell (computer), shell command (computing), command and a system call on Unix and Unix-like operating systems that changes the apparent root directory for the current running process and its Child process, children. A program that i ...
system call is not available to non-chroot
for more details.
When set on a directory
Setting thesetgid
permission on a directory causes files and subdirectories created within to inherit its group ownership, rather than the primary group of the file-creating process. Created subdirectories also inherit the setgid
bit. The policy is only applied during creation and, thus, only prospectively. Directories and files existing when the setgid
bit is applied are unaffected, as are directories and files moved into the directory on which the bit is set.
Thus is granted a capacity to work with files amongst a group of users without explicitly setting permissions, but limited by the security model expectation that existing files permissions do not implicitly change.
The setuid
permission set on a directory is ignored on most setuid
in a manner similar to setgid
, in which case it forces all files and sub-directories created in a directory to be owned by that directory's owner - a simple form of inheritance. This is generally not needed on most systems derived from BSD, since by default directories are treated as if their setgid
bit is always set, regardless of the actual value. As is stated in open(2)
, "When a new file is created it is given the group of the directory which contains it."
Examples
Checking permissions
Permissions of a file can be checked in octal form and/or alphabetic form with the command line toolstat
SUID
4701 on an executable file owned by 'root' and the group 'root' A user named 'thompson' attempts to execute the file. The executable permission for all users is set (the '1') so 'thompson' can execute the file. The file owner is 'root' and the SUID permission is set (the '4') - so the file is executed as 'root'. The reason an executable would be run as 'root' is so that it can modify specific files that the user would not normally be allowed to, without giving the user full root access. A default use of this can be seen with the/usr/bin/passwd
binary file. /usr/bin/passwd
needs to modify /etc/passwd
and /etc/shadow
which store account information and password hashes for all users, and these can only be modified by the user 'root'.SGID
2770 on a directory named 'music' owned by the user 'root' and the group 'engineers' A user named 'torvalds' who belongs primarily to the group 'torvalds' but secondarily to the group 'engineers' makes a directory named 'electronic' under the directory named 'music'. The group ownership of the new directory named 'electronic' inherits 'engineers.' This is the same when making a new ''file'' named 'imagine.txt' Without SGID the group ownership of the new directory/file would have been 'torvalds' as that is the primary group of user 'torvalds'.Sticky bit
1770 on a directory named 'videogames' owned by the user 'torvalds' and the group 'engineers'. A user named 'torvalds' creates a file named 'tekken' under the directory named 'videogames'. A user named 'wozniak', who is also part of the group 'engineers', attempts to delete the file named 'tekken' but he cannot, since he is not the owner. Without sticky bit, 'wozniak' could have deleted the file, because the directory named 'videogames' allows read and write by 'engineers'. A default use of this can be seen at the/tmp
folder.
Sticky bit with SGID
3171 on a directory named 'blog' owned by the group 'engineers' and the user 'root' A user named 'torvalds' who belongs primarily to the group 'torvalds' but secondarily to the group 'engineers' creates a file or directory named 'thoughts' inside the directory 'blog'. A user named 'wozniak' who also belongs to the group 'engineers' cannot delete, rename, or move the file or directory named 'thoughts', because he is not the owner and the sticky bit is set. However, if 'thoughts' is a file, then 'wozniak' can edit it. Sticky bit has the final decision. If sticky bit and SGID had not been set, the user 'wozniak' could rename, move, or delete the file named 'thoughts' because the directory named 'blog' allows read and write by group, and wozniak belongs to the group, and the default 0002 umask allows new files to be edited by group. Sticky bit and SGID could be combined with something such as a read-only umask or an append only attribute.Security
Developers design and implement programs that use this bit on executables carefully in order to avoid security vulnerabilities including buffer overruns and path injection. Successful buffer-overrun attacks on vulnerable applications allow the attacker to execute arbitrary code under the rights of the process exploited. In the event that a vulnerable process uses thesetuid
bit to run as root
, the code will execute with root privileges, in effect giving the attacker root access to the system on which the vulnerable process is running.
Of particular importance in the case of a setuid
process is the environment of the process. If the environment is not properly sanitized by a privileged process, its behavior can be changed by the unprivileged process that started it. For example, GNU libc was at one point vulnerable to an exploit using setuid
and an environment variable that allowed executing code from untrusted shared libraries.
History
Thesetuid
bit was invented by Dennis Ritchie and included in su
. His employer, then Bell Telephone Laboratories, applied for a patent in 1972; the patent was granted in 1979 as patent number . The patent was later placed in the See also
References
{{Reflist, 30emExternal links
* Chen, Hao; Wagner, David; and Dean, Drew