当前位置: 技术问答>linux和unix
请教关于setuid()函数
来源: 互联网 发布时间:2016-07-16
本文导语: 如果我现在写了一个程序 这个程序需要访问一个所有者为root 其属性为 600的文件 假设这个文件文件名是 a 这个程序的拥有者为B 我该怎样做? 我尝试过这样做: 1.在终端以root 身份登录 然后以root身份修改...
如果我现在写了一个程序 这个程序需要访问一个所有者为root 其属性为 600的文件 假设这个文件文件名是 a 这个程序的拥有者为B 我该怎样做?
我尝试过这样做:
1.在终端以root 身份登录 然后以root身份修改的程序文件的属性 chmod u+s
2.然后在程序中加入语句 setuid(0);
3.退出root 使用原身份登录 运行程序 结果打开文件不成功 open函数返回-1
但是如果不退出root 直接在root 下执行那个程序却可以打开成功
请问为什么以root 身份运行那个程序就可以打开成功 如果必须以root 身份运行程序 那样setuid 函数还有什么用处?加上S权限还有时间用处?
我尝试过这样做:
1.在终端以root 身份登录 然后以root身份修改的程序文件的属性 chmod u+s
2.然后在程序中加入语句 setuid(0);
3.退出root 使用原身份登录 运行程序 结果打开文件不成功 open函数返回-1
但是如果不退出root 直接在root 下执行那个程序却可以打开成功
请问为什么以root 身份运行那个程序就可以打开成功 如果必须以root 身份运行程序 那样setuid 函数还有什么用处?加上S权限还有时间用处?
|
程序的属主是root。
如果没有使用setuid,如果以普通用户登录执行程序,程序无法打开文件
如果使用了setuid,如果使用普通用户登录执行程序,程序可以打开文件
如果没有使用setuid,如果以普通用户登录执行程序,程序无法打开文件
如果使用了setuid,如果使用普通用户登录执行程序,程序可以打开文件
|
你对UID, EUID没有理解清楚
对一个程序设置EUID位,然后程序内部使用了setuid()就可以成功提升用户权限为文件属主, 如果你的程序没有设置EUID位,你的程序就不能setuid()提升权限. 所以当你的程序属主是B的时,你setuid()只能得到用户B的权限
对一个程序设置EUID位,然后程序内部使用了setuid()就可以成功提升用户权限为文件属主, 如果你的程序没有设置EUID位,你的程序就不能setuid()提升权限. 所以当你的程序属主是B的时,你setuid()只能得到用户B的权限