通信码农,Emacs爱好者,业余IOS程序员,更业余的PM
全部博文(111)
分类: 其他平台
2013-04-08 20:04:44
Every process has six or more IDs associated with it. These are shown in .
real user ID |
who we really are |
effective user ID |
used for file access permission checks |
saved set-user-ID |
saved by exec functions |
Normally, the effective user ID equals the real user ID, and the effective group ID equals the real group ID.
Every file has an owner and a group owner. The owner is specified by the st_uid member of the stat structure; the group owner, by the st_gid member.
When we execute a program file, the effective user ID of the
process is usually the real user ID, and the effective group ID is usually the
real group ID. But the capability exists to set a special flag in the file's
mode word (st_mode) that says "when this file is executed, set the
effective user ID of the process to be the owner of the file (st_uid)."
Similarly, another bit can be set in the file's mode word that causes the
effective group ID to be the group owner of the file (st_gid). These
two bits in the file's mode word are called the set-user-ID bit and the set-group-ID bit.
For example, if the owner of the file is the superuser and if the file's set-user-ID bit is set, then while that program file is running as a process, it has superuser privileges. This happens regardless of the real user ID of the process that executes the file. As an example, the UNIX System program that allows anyone to change his or her password, passwd(1), is a set-user-ID program. This is required so that the program can write the new password to the password file, typically either /etc/passwd or /etc/shadow, files that should be writable only by the superuser. Because a process that is running set-user-ID to some other user usually assumes extra permissions, it must be written carefully. We'll discuss these types of programs in more detail in .
Returning to the stat function, the set-user-ID bit and the set-group-ID bit are contained in the file's st_mode value. These two bits can be tested against the constants S_ISUID and S_ISGID.