我想从 pythonscript 中 sudo 一个命令,而无需在其中硬编码我的密码。Pythonscript 是 Apache2 上的 web 服务的一部分。由于它是 web 服务的一部分,因此每次都要求用户输入密码不是一个选择,也不授予整个文件夹的完整权限。
该命令应执行已编译的 C++ 文件(其名称存储在变量“CMDexecutable”中)。此已编译的 C++ 文件位于作为服务的一部分创建的临时文件夹中,名称为随机。路径存储在变量“rundir_temp”中。此目录可通过网络自由访问。
现在,我的 Pythonscript 中有以下内容:
Popen(os.path.join(rundir_temp,CMDexecutable),stdout=PIPE)
这不会执行我拥有的脚本。我只能在“rundir_temp”目录中在终端中键入以下内容来执行已编译的 C++ 文件:
sudo ./CMDexecutable
一切都进行得很顺利。
我怎样才能在不硬编码密码的情况下在我的 Pythonscript 中授予此命令的 sudo 权限?
我发现此主题讨论了一个非常相似的主题,但我就是无法让它工作...我对 Python 和 Ubuntu 都不熟悉,所以可能忽略了一些基本的东西?
我有 Ubuntu 14.04 LTS 和 Python 2.7.6
提前致谢!!
答案1
从你的问题来看,尚不清楚你是否需要里面目录CMDexecutable
(因此是cd
第一个)或者完整路径就可以了,但我看到的唯一选项是将脚本添加到文件中sudoers
,如下所述这里。
然后您可以使用 运行脚本sudo
,而无需输入密码。
您可以简单地运行(python
)脚本,然后通过命令
sudo <script>
如上所述,无需输入密码。
(非常)重要的提示
很明显,您需要将脚本存储在没有权限就无法编辑的位置sudo
。由于脚本无需输入密码即可运行,因此您需要确保其内容不会被任何其他进程或可能的恶意代码更改。
此外,(可能是多余的,但由于我不知道确切的背景)出于同样的原因,您需要绝对确保它所CMDexecutable
运行的一切都不是“恶意更改”的可能目标。
编辑
既然你提到你不能改变最初的命令来运行你的python
脚本sudo
,你可以执行以下操作:
里面你的
python
脚本,创建一个命令来运行次要的脚本,使用 sudo 运行:sudo <script>
将此辅助脚本添加到
sudoers
文件中,无需密码即可运行。这样,python
(主)脚本将运行命令而无需输入密码。
不过我想强调的是,这似乎是拼凑起来的,我对可能的安全风险一无所知。无论如何,确保从第一个sudo
命令“树”的线程运行的所有文件都不是恶意编辑的可能目标。