Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以其他用户身份运行python脚本_Python_Linux - Fatal编程技术网

以其他用户身份运行python脚本

以其他用户身份运行python脚本,python,linux,Python,Linux,在Linux机器上,我想以另一个用户的身份运行Python脚本 我已经在C++中编写了一个调用脚本的包装程序,因为我已经意识到运行脚本的所有权是由Python解释器的所有权决定的。之后,我将C++程序改为不同的用户,运行C++程序。 此设置似乎不起作用。有什么想法吗?使用命令sudo 为了以用户身份运行程序,系统必须“验证”该用户 显然,root可以作为任何用户运行任何程序,并且任何用户都可以使用密码将su发送给另一个用户 程序sudo可以配置为允许一组用户作为特定用户sudo特定命令 例如,您

在Linux机器上,我想以另一个用户的身份运行Python脚本

<>我已经在C++中编写了一个调用脚本的包装程序,因为我已经意识到运行脚本的所有权是由Python解释器的所有权决定的。之后,我将C++程序改为不同的用户,运行C++程序。
此设置似乎不起作用。有什么想法吗?

使用命令
sudo

为了以用户身份运行程序,系统必须“验证”该用户

显然,
root
可以作为任何用户运行任何程序,并且任何用户都可以使用密码将
su
发送给另一个用户

程序
sudo
可以配置为允许一组用户作为特定用户
sudo
特定命令


例如,您可以创建一个组
scriptUsers
和一个用户
scriptRun
。然后,配置
sudo
,让
scriptUsers
中的任何用户成为
scriptRun
,只运行您的脚本。

让这些用户能够
sudo su$dedicated_username
并在您的系统上定制权限,以便
$dedicated_user
拥有足够的权限,但不会过多,访问。

您可以使用os.setuid()设置用户,也可以使用pwd获取uid。 像这样:

显然,这只有在用户或可执行文件具有这样做的权限时才起作用。我不知道该怎么设置。显然,如果你是root,它是有效的。我认为您可能需要在Python可执行文件上设置setuid标志,这将留下一个巨大的安全漏洞。如果您设置的用户也是一个专用的受限用户,除了您需要做的任何事情之外,不能做任何事情,那么这可能是允许的


基于用户、设置指导等的Unix安全性不是很好,也不实用,很容易留下很大的安全漏洞。一个更安全的选择实际上是做这个客户机-服务器类型化,所以你有一个恶魔做任何事情,客户机与之对话。然后,demon可以以比用户更高的安全性运行,但是用户在运行脚本时必须提供名称和密码,或者使用一些公钥/私钥或类似的东西来标识自己。

不能使用sudo,因为脚本需要被其他人使用。您的其他用户是否没有运行
python
的权限?这不是运行python的问题。脚本需要执行需要特定权限的操作。我不想给所有用户这些权限。脚本的行为有点像一个受控制的权限授予者,但首先脚本本身需要权限……听起来好像您想要使用位。请记住,这不会更改所有环境变量。ie
~/
仍将扩展到
/home/old\u user/
,这可能会在以后的道路上造成一些麻烦。@johannix我也遇到了确切的问题。你找到解决方法了吗?我在一个从Ubuntu init脚本运行的脚本中使用了这段代码,它不需要python可执行文件上的setuid位。如果你是root或sudo脚本,它不需要setuid位。
>>> import pwd, os
>>> uid = pwd.getpwnam('root')[2]
>>> os.setuid(uid)