2009-09-30 102 views
9

在一个Linux机器上,我想运行一个Python脚本作为另一个用户。作为另一个用户运行python脚本

我已经用C++编写了一个调用脚本的包装程序,因为我意识到运行脚本的所有权取决于Python解释器的所有权。之后,我将C++程序更改为不同的用户并运行C++程序。

这种设置似乎没有工作。有任何想法吗?

+0

你的其他用户没有权限运行'python'吗? – Arkady 2009-09-30 16:35:40

+2

这不是一个运行Python的问题。脚本需要做一些需要特定权限的事情。我不想给所有用户这些权限。该脚本的行为有点像控制权限授予者,但首先脚本需要权限本身... – johannix 2009-09-30 16:37:14

+0

@johannix我也遇到了确切的问题。你有没有找到任何解决方法? – Anubis 2014-08-01 04:55:33

回答

4

这听起来像你想使用的setuid

+0

请记住,这不会更改所有环境变量。即'〜/'仍然会扩展到'/ home/old_user /',这可能会导致更多的麻烦。 – 2014-05-01 21:34:10

0

使用命令sudo

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

显然,root可以像任何用户一样运行任何程序,任何用户都可以用su给另一个用户使用密码。

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

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

+0

不能使用sudo,因为脚本需要被其他人使用。 – johannix 2009-09-30 16:34:37

1

为这些用户提供sudo su $dedicated_username的能力,并定制系统上的权限,以便$dedicated_user具有足够的访问权限,但不是过度访问权限。

11

您可以设置os.setuid(用户),你可以得到与PWD的UID。 像这样:

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

显然,这只是工作,如果用户或执行有这样做的权限。究竟如何设置我不知道。如果你是根,它显然是有效的。我认为你可能需要Python可执行文件中的setuid标志,这会留下一个WHOPPING安全漏洞。如果你设置的用户也是一个专门的受限用户,除了你需要做的事情不能做任何事情,这可能是可以允许的。

基于用户和设置以及其他东西的Unix安全性不是很好或不实用,而且很容易留下大的安全漏洞。一个更安全的选项实际上是做这种客户端服务器类型,所以你有一个恶魔,做任何事情,并与客户谈话。然后,恶魔可以以比用户更高的安全性运行,但是用户在运行脚本时必须提供名称和密码,或者使用某些公钥/私钥或其他身份标识自己。

+0

我在从Ubuntu初始化脚本运行的脚本中使用此代码,并且它不需要python可执行文件上的setuid位。 – EarlCrapstone 2014-11-13 02:43:28

+0

如果您是root或sudo脚本,它将无setuid位工作。 – 2014-11-14 11:16:56

相关问题