我们有一个以root身份运行的python安装脚本,目前我们希望以sudoer用户的身份运行它,并具有一组权限。问题是我们的代码充满了os.makedirs和open(filename)等。
open(filename) as sudo ?
os.makedirs as sudo ?
... as sudo ?
不适合我们的解决方案:
将整个设置脚本运行为" sudo python script.py" 这对我们来说是一个安全问题。我们需要避免它。
POPEN(["须藤"" ..."]) 这对非unix系统支持很不利,并且需要重写所有代码。
答案 0 :(得分:0)
我对要求#2有牛肉。你需要sudo怎么样但你还需要与平台无关?如果那真的是你想要的,你必须重新考虑要求#1,或者检测你所在的操作系统,如果你在* nix上,则用sudo作为命令的前缀。此外,除了使用sudo运行整个脚本之外,您还必须更改代码,因此#2的一部分是静音点。但是,在Popen命令中使用sudo是没有意义的。您必须为必须运行的特定命令启用无密码sudo,而IMO比使用UID 0运行整个脚本更具风险。但是,您似乎只是在与文件系统进行交互,而有人评论说确实提出的问题是,您是否可以授予您的用户访问所需文件的权限?
Tl; dr让运行程序权限的用户访问这些文件,或者退后一步,问问自己为什么会出现这个问题,这是解决问题的最佳方法
答案 1 :(得分:0)
一般情况下,当您的一小段代码必须以提升的权限运行时,但以这种方式运行其余代码并不安全,您可以执行以下操作:
您以root身份运行主脚本。但是在启动时,它会分叉或生成子进程(仍然是root用户),然后立即删除权限。当您需要以root身份执行某些操作时,您可以使用一些足够安全的IPC机制(socketpair
可能或可能不够安全,具体取决于您的设计的其余部分......)要求孩子在您代表并发回回复。 Windows的细节略有不同,但可以使用相同的基本想法。
然而,还有其他选择,包括:
然而,在这种情况下,有一个更简单的解决方案:您似乎唯一需要root权限的是读取(并且可能写入?)您安装为不同用户所拥有的文件。只需将这些文件设置为组可读(可能是可写的),然后将该脚本作为该组成员的有限权限用户运行。