2012-06-23 45 views
0

我试图在需要时启动系统。所以我使用下面的命令,它可以成功运行。但是当我运行代码时,它会询问我的密码,并且我必须每次都手动提供密码。如何在不询问密码的情况下运行Python脚本?

os.system('sudo sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"' % locals())  
os.system('sudo sh -c "echo %(turnontime)s > /sys/class/rtc/rtc0/wakealarm"' % locals())  

如何在不询问密码的情况下运行此代码?

+0

'sudo'命令将为您提供root权限,并且需要您的密码才能执行此操作。在没有密码的情况下提供root权限是一个非常糟糕的主意。 –

+1

另外,你为什么使用Python?这只是进行系统调用。使用shell脚本会更好。 –

+0

老兄,我可以理解,sudo命令会给root权限,但我通过supprocess.call()知道将从一个变量(需要定义密码变量)获取密码,并且系统自动读取。但是我没有知道如何申报。 – Viswa

回答

2

sudo使用-S选项运行时,将从标准输入读取密码。

#!/bin/bash 
echo my_awesome_password | sudo -S python awesome_script.py 

正如@大卫说正确的,你为什么要使用Python只执行系统调用:

在这种情况下,你可以像脚本中使用它?你也许可以让这个脚本做同样的事情。

+0

但它不起作用 – Viswa

4

在脚本文件中拥有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脚本的权限,使用chownchmod如上。

相关问题