setuid和seteuid函数之间有什么区别?在手册页中,这两个函数的描述类似。
setuid:
DESCRIPTION
setuid() sets the effective user ID of the calling process. If the effective UID of the caller is root, the real UID and saved
set-user-ID are also set.
设置uid:
DESCRIPTION
seteuid() sets the effective user ID of the calling process. Unprivileged user processes may only set the effective user ID to
the real user ID, the effective user ID or the saved set-user-ID.
在这两个描述中都包含sets the effective user ID of the calling process
。那么这两个之间的区别是什么,以及这些函数之间的功能有何不同。
还有一个疑问是,只有使用chmod(chmod u+s),我们才能设置文件的设置用户id权限。那么只有在程序运行时,进程才有权限设置用户id。除此之外,这些函数是如何设置进程的有效用户id的。
3条答案
按热度按时间syqv5f0l1#
从man page:
ss2ws0br2#
在回答“为什么使用seteuid()"的问题时:一些系统应用程序使用seteuid(),以便它们可以尝试以“有效”用户的权限执行指令。2这允许以root身份运行的程序确保,例如,它创建的任何文件都是使用有效用户id而不是root id创建的。
也许最值得注意的应用程序是Unix“cron”系统,它必须以“root”用户身份运行,但也有责任以任意用户身份执行任意命令。
vpfxa7rd3#
x1月0n1x日
我们使用
privileged process
的传统定义作为effective user id
为0的一个。setuid()
unprivileged process
调用setuid()
时,仅更改了进程的
effective user id
。-| 此外,应当指出,
只能将其更改为+-与相同的值|+_|或者
|+|真实的用户ID或|+|保存的用户ID集。
privileged process
使用非零参数执行setuid()
时,则真实的用户ID
effective user id
和保存的set-user-ID都被设置+-为uid参数中指定的值。因为
一旦X1 M10 N1 X以这种方式改变了它的标识符,
它将失去所有特权
因此,随后不能使用
setuid()
+-将标识符重置为0。seteuid()
unprivileged process
只能将有效ID +-更改为与相应|+|真实的或|+|已保存的集合ID。对于
unprivileged process
,seteuid()
和setegid()分别与setuid()
和setgid()具有相同的效果,但前面提到的BSD可移植性问题除外。)
privileged process
可以将一个有效ID +-改变为任何值。如果
privileged process
使用seteuid()
+-将其effective user id
+-更改为非零值,那么它就不再享有特权
(++但可能能够+-通过上一条规则重新获得权限)。
例如
下面是一个例子:
与
setuid()
和seteuid()
仅对privileged process
不同)阙
seteuid()
(++但可能能够+-通过上一条规则重新获得权限)。
参考
Linux编程接口(以上大部分内容直接抄自本书)