在脚本文件中拥有root密码简直是愚蠢的。 不要这样做,有更好的选择。 This页面描述了如何设置setuid位的shell脚本,以及如何规避大多数现代Linux发行版对setuid shell脚本的限制。
我会在这里总结一下突出部分,以符合计算器指南。首先做一个.c
文件(让我们说这就是所谓的runscript.c
)与此内容:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("/path/to/script.sh");
return 0;
}
(基于Debian的发行版的apt-get install gcc
)安装GCC,然后键入
gcc -o runscript runscript.c
现在,以root用户键入
chown root:root runscript script.sh
chmod 4755 runscript script.sh
现在任何用户都应该能够运行runscript
,它将执行script.sh
,就好像用户是 根。
只要这两个文件都由root拥有,而不是其他任何人可以写入的root文件,这相当于安全,并且比在脚本文件中将明文密码嵌入明文更安全。
我还没有成功地把这项工作对于script.py
文件由于某些原因,所以如果你真的想运行一个python脚本,有script.sh
文件间接地运行它。如果你这样做,记得设置所有者和python脚本的权限,使用chown
和chmod
如上。
'sudo'命令将为您提供root权限,并且需要您的密码才能执行此操作。在没有密码的情况下提供root权限是一个非常糟糕的主意。 –
另外,你为什么使用Python?这只是进行系统调用。使用shell脚本会更好。 –
老兄,我可以理解,sudo命令会给root权限,但我通过supprocess.call()知道将从一个变量(需要定义密码变量)获取密码,并且系统自动读取。但是我没有知道如何申报。 – Viswa