将进程的属主由root变为普通用户

时间:2022-09-14 14:03:43
现在有一个进程是以root身份运行的, 因此该进程在运行的过程中具有root的权限,可是程序中有这么一行语句:
   system("nautilus  /opt"); 我的系统是fc14的,执行nautilus不能使用root,因为root是不允许连接x 桌面的。 请问用什么方法可以在执行system("nautilus  /opt")之前将该进程的属主改为普通用户, 等执行完之后再改为root啊?

17 个解决方案

#1


setuid(), seteuid()

#2


引用 1 楼 nevil 的回复:
setuid(), seteuid()


可以说的详细点吗?这两个函数我也知道

#3


没有人冒泡了吗?

#4


引用 2 楼 linux_6 的回复:
引用 1 楼 nevil 的回复:

setuid(), seteuid()


可以说的详细点吗?这两个函数我也知道

调用system("nautilus /opt"); 前调一下这个函数

#5


引用 4 楼 zaghost 的回复:
引用 2 楼 linux_6 的回复:
引用 1 楼 nevil 的回复:

setuid(), seteuid()


可以说的详细点吗?这两个函数我也知道

调用system("nautilus /opt"); 前调一下这个函数
setuid()不是需要传一个参数吗? 那么这个参数如何得来啊? 难道写死一个可以吗? 譬如500, 但是不能保证运行的每台机子上都有这个500的id吧

#6


将进程的属主由root变为普通用户

#7


根据用户名获得UID这个本事真心不知道。

只知道根据UID看用户名的。。getpwuid

#8


我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了

#9


将进程的属主由root变为普通用户

#10


引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了


这个你估计只能是用别的方法实现了.没有了root权限,想直接弄回来有一个方法.不需要密码的.

#11


引用 10 楼 jihen 的回复:
引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了


这个你估计只能是用……

什么方法啊? 敬请赐教!

#12


你试试看用完之后将 setuid设置成 0回去,
调用setuid(0)

#13


引用 12 楼 jihen 的回复:
你试试看用完之后将 setuid设置成 0回去,
调用setuid(0)


我试过了啊, 不行

#14


将进程的属主由root变为普通用户

#15


没有人会吗?

#16


引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。

#17


引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。

#1


setuid(), seteuid()

#2


引用 1 楼 nevil 的回复:
setuid(), seteuid()


可以说的详细点吗?这两个函数我也知道

#3


没有人冒泡了吗?

#4


引用 2 楼 linux_6 的回复:
引用 1 楼 nevil 的回复:

setuid(), seteuid()


可以说的详细点吗?这两个函数我也知道

调用system("nautilus /opt"); 前调一下这个函数

#5


引用 4 楼 zaghost 的回复:
引用 2 楼 linux_6 的回复:
引用 1 楼 nevil 的回复:

setuid(), seteuid()


可以说的详细点吗?这两个函数我也知道

调用system("nautilus /opt"); 前调一下这个函数
setuid()不是需要传一个参数吗? 那么这个参数如何得来啊? 难道写死一个可以吗? 譬如500, 但是不能保证运行的每台机子上都有这个500的id吧

#6


将进程的属主由root变为普通用户

#7


根据用户名获得UID这个本事真心不知道。

只知道根据UID看用户名的。。getpwuid

#8


我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了

#9


将进程的属主由root变为普通用户

#10


引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了


这个你估计只能是用别的方法实现了.没有了root权限,想直接弄回来有一个方法.不需要密码的.

#11


引用 10 楼 jihen 的回复:
引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了


这个你估计只能是用……

什么方法啊? 敬请赐教!

#12


你试试看用完之后将 setuid设置成 0回去,
调用setuid(0)

#13


引用 12 楼 jihen 的回复:
你试试看用完之后将 setuid设置成 0回去,
调用setuid(0)


我试过了啊, 不行

#14


将进程的属主由root变为普通用户

#15


没有人会吗?

#16


引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。

#17


引用 8 楼 linux_6 的回复:
我在调用system("nautilus /opt")之前,调用了一下seteuid(500),把有效用户改为普通用户,可是执行"nautilus /opt"还是报错,貌似还是用root来执行的。 我把seteuid(500)换成setuid(500)就可以了,但是调用setuid(500)后,就不能回到原来的root权限了
这样的话,说明只有root才有执行权限。那只好把/opt的权限扩展下,改成777.然后把所有者改成普通用户,并且设置setuid位有效。