[英]Run python calls as sudo
我们有一个以root身份运行的python安装脚本,当前我们希望以sudoer用户身份(具有一组特权)运行它。 问题是我们的代码充满了os.makedirs和open(filename)等。
open(filename) as sudo ?
os.makedirs as sudo ?
... as sudo ?
不适合我们的解决方案:
以“ sudo python script.py”运行整个安装脚本。这对我们来说是一个安全问题。 我们需要避免它。
Popen([“ sudo”,“ ...”])这对非unix系统支持不利,并且需要重写所有代码。
我有2号牛肉。 您需要sudo但又需要与平台无关的感觉如何? 如果这确实是您想要的,则必须重新考虑需求1,或者检测到您正在使用的操作系统,并且如果在* nix上,则使用sudo前缀命令。 另外,除了使用sudo运行整个脚本之外,您还必须更改代码,因此#2的一部分是一个静默点。 但是,在Popen命令中使用sudo毫无意义。 您将必须为必须运行的那些特定命令启用无密码sudo,而IMO比仅以UID 0运行整个脚本要冒更大的风险。但是,似乎您只是在与文件系统进行交互,正如有人评论的那样确实引发了一个问题,您是否可以授予用户访问所需文件的权限?
Tl; dr授予运行程序的用户访问这些文件的权限,或者退一步并问自己为什么会遇到此问题,这确实是解决问题的最佳方法
通常,当您的一小段代码必须以提升的特权运行,但是以这种方式运行其余代码并不安全时,您可以执行以下操作:
您以root身份运行主脚本。 但是在启动时,它会分叉或产生一个子进程(该进程仍然是root),然后立即放弃特权。 当您需要以root用户身份进行操作时,可以使用一些足够安全的IPC机制( socketpair
可能足够安全,也可能不足够安全,具体取决于设计的其余部分……)要求孩子代您发送并发送回复。 对于Windows,细节有所不同,但是可以使相同的基本思想起作用。
但是,还有其他选择,包括:
但是,在这种情况下,有一个更简单的解决方案:您似乎需要root特权的唯一一件事就是读取(并可能写入?)由其他用户拥有的已安装文件。 只需使这些文件对组可读(并且可能是可写的),然后以该组成员的受限特权用户身份运行脚本即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.