我做了程序setuID根,但即使如此,cupsenable失败与“权限被拒绝”.然后我在system()之前插入了一个setuID(0)调用,并且看到它有效.
忽略有更好的方式给用户控制打印机的问题.可能有更好的方法.我感兴趣的是chmod的复杂与setuID(0)vs. system().为什么这样做呢?
解决方法 从人系统:Do not use
system()
from a program with set-user-ID or set-group-ID privileges,because strange values for some environment variables might be used to subvert system integrity. Use theexec(3)
family of functions instead,but notexeclp(3)
orexecvp(3)
.system()
will not,in fact,work properly from programs with set-user-ID or set-group-ID privileges on systems on which/bin/sh
is bash version 2,since bash 2 drops privileges on startup.
和从男子bash:
If the shell is started with the effective user (group) ID not equal to the real user (group) ID,and the
-p
option is not supplIEd,no startup files are read,shell functions are not inherited from the environment,theSHELLOPTS
variable,if it appears in the environment,is ignored,and the effective user ID is set to the real user ID.
看来你的setuID(0)电话规避了这种保护.
总结以上是内存溢出为你收集整理的为什么要在使用system()调用管理程序的setuid-c C程序中需要setuid(0)?全部内容,希望文章能够帮你解决为什么要在使用system()调用管理程序的setuid-c C程序中需要setuid(0)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)