在Linux机器上,我想以另一个用户身份运行Python脚本。
我已经在C ++中创建了一个调用脚本的包装器程序,因为我已经意识到运行脚本的所有权取决于python解释器的所有权。之后,我将C ++程序更改为其他用户并运行C ++程序。
此设置似乎不起作用。有什么想法吗?
答案 0 :(得分:11)
您可以使用os.setuid()设置用户,并且可以使用pwd获取uid。 像这样:
>>> import pwd, os
>>> uid = pwd.getpwnam('root')[2]
>>> os.setuid(uid)
显然,这只有在用户或可执行文件具有此权限的情况下才有效。究竟如何设置我不知道。显然,如果你是root用户,它会起作用。我想你可能需要Python可执行文件的setuid标志,这会留下一个WHOPPING安全漏洞。如果你setuid的用户也是一个专门的受限制用户,除了你需要做的任何事情之外什么都不能做,这是可能的。
Unix安全性,基于用户和设置和东西,不是很好或不实用,并且很容易留下很大的安全漏洞。一个更安全的选择实际上是做这个客户端 - 服务器类型,所以你有一个恶魔做任何事情,客户端与它进行对话。然后,恶魔可以以比用户更高的安全性运行,但是用户在运行脚本时必须提供名称和密码,或者使用某些公钥/私钥或某些人识别自己。
答案 1 :(得分:1)
为这些用户提供sudo su $dedicated_username
能力并定制系统权限,以便$dedicated_user
具有足够但不过度的访问权限。
答案 2 :(得分:0)
使用命令sudo
。
为了以用户身份运行程序,系统必须“验证”该用户。
显然,root
可以像任何用户一样运行任何程序,任何用户都可以su
向另一个拥有密码的用户运行。
程序sudo
可以配置为允许一组用户sudo
作为特定用户的特定命令。
例如,您可以创建一个组scriptUsers
和一个用户scriptRun
。然后,配置sudo
以允许scriptUsers
中的任何用户成为scriptRun
仅运行您的脚本。