system("nautilus /opt"); 我的系统是fc14的,执行nautilus不能使用root,因为root是不允许连接x 桌面的。 请问用什么方法可以在执行system("nautilus /opt")之前将该进程的属主改为普通用户, 等执行完之后再改为root啊?
17 个解决方案
#1
setuid(), seteuid()
#2
可以说的详细点吗?这两个函数我也知道
#3
没有人冒泡了吗?
#4
调用system("nautilus /opt"); 前调一下这个函数
#5
setuid()不是需要传一个参数吗? 那么这个参数如何得来啊? 难道写死一个可以吗? 譬如500, 但是不能保证运行的每台机子上都有这个500的id吧
#6
#7
根据用户名获得UID这个本事真心不知道。
只知道根据UID看用户名的。。getpwuid
只知道根据UID看用户名的。。getpwuid
#8
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了
#9
#10
这个你估计只能是用别的方法实现了.没有了root权限,想直接弄回来有一个方法.不需要密码的.
#11
什么方法啊? 敬请赐教!
#12
你试试看用完之后将 setuid设置成 0回去,
调用setuid(0)
调用setuid(0)
#13
我试过了啊, 不行
#14
#15
没有人会吗?
#16
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。
#17
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。
#1
setuid(), seteuid()
#2
可以说的详细点吗?这两个函数我也知道
#3
没有人冒泡了吗?
#4
调用system("nautilus /opt"); 前调一下这个函数
#5
setuid()不是需要传一个参数吗? 那么这个参数如何得来啊? 难道写死一个可以吗? 譬如500, 但是不能保证运行的每台机子上都有这个500的id吧
#6
#7
根据用户名获得UID这个本事真心不知道。
只知道根据UID看用户名的。。getpwuid
只知道根据UID看用户名的。。getpwuid
#8
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了
#9
#10
这个你估计只能是用别的方法实现了.没有了root权限,想直接弄回来有一个方法.不需要密码的.
#11
什么方法啊? 敬请赐教!
#12
你试试看用完之后将 setuid设置成 0回去,
调用setuid(0)
调用setuid(0)
#13
我试过了啊, 不行
#14
#15
没有人会吗?
#16
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。
#17
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。