以另一个用户身份运行Python脚本

14 人关注

在一个Linux盒子上,我想以另一个用户身份运行一个Python脚本。

我已经用C++做了一个调用脚本的封装程序,因为我已经意识到,运行脚本的所有权是由Python解释器的所有权决定的。之后我把C++程序改成不同的用户,并运行C++程序。

这个设置似乎没有用。有什么想法吗?

5 个评论
你的其他用户没有运行 python 的权限吗?
这不是一个运行Python的问题。脚本需要做一些需要某些权限的事情。我不想给所有用户这些权限。脚本的行为有点像一个受控的权限给予者,但首先脚本本身需要权限......
听起来你想用 setuid bit
请记住,这不会改变你所有的环境变量。即 ~/ 仍然会扩展为 /home/old_user/ ,这可能会在以后的路上造成一些麻烦。
@johannix 我也遇到了同样的问题。你找到任何解决方法了吗?
python
linux
johannix
johannix
发布于 2009-10-01
3 个回答
Lennart Regebro
Lennart Regebro
发布于 2009-10-01
已采纳
0 人赞同

你可以用os.setuid()设置用户,你可以用pwd获得uid。

>>> import pwd, os
>>> uid = pwd.getpwnam('root')[2]
>>> os.setuid(uid)

显然,这只有在用户或可执行文件有权限的情况下才能起作用。究竟如何设置,我不知道。很明显,如果你是root,它就能工作。我想你可能需要在Python可执行程序上设置setuid标志,这将留下一个巨大的安全漏洞。如果你设置的用户是一个专门的受限用户,除了你需要做的事情外,不能做任何事情,这可能是允许的。

Unix的安全,基于用户和设置之类的,不是很好,也不实用,很容易留下大的安全漏洞。一个更安全的选择实际上是做这种客户-服务器类型,所以你有一个恶魔来做所有的事情,而客户与它对话。恶魔可以以比用户更高的安全性运行,但用户在运行脚本时必须给出一个名字和密码,或者用一些公共/私人密钥或类似的东西来识别自己。

我在Ubuntu启动脚本中使用了这段代码,它不需要python可执行文件上的setuid位。
如果你是root或sudo脚本,它不需要setuid位也能工作。
Hank Gay
Hank Gay
发布于 2009-10-01
0 人赞同

给予这些用户 sudo su $dedicated_username 的能力,并在你的系统上定制权限,使 $dedicated_user 有足够的,但不是过度的访问。

Steven
Steven
发布于 2009-10-01
0 人赞同

使用命令 sudo

为了以用户身份运行一个程序,系统必须对该用户进行 "认证"。