如何在不问密码的情况下运行Python脚本?

时间:2012-06-23 10:16:21

标签: 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())    

如果没有要求输入密码,我该如何运行此代码?

2 个答案:

答案 0 :(得分:4)

在root文件中使用root密码只是简单的愚蠢。 不要这样做,有更好的选择。 This页面描述了如何设置setuid位设置的shell脚本,以及如何规避大多数现代Linux发行版对shell脚本上setuid的限制。

我将在此总结这些显着部分以符合stackoverflow指南。首先使用以下内容制作一个.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的发行版上安装gcc(apt-get install gcc),然后输入

gcc -o runscript runscript.c

现在,以root身份输入

chown root:root runscript script.sh
chmod 4755 runscript script.sh

现在任何用户都应该能够运行runscript,并且它将执行script.sh,就像用户是root用户一样。

只要这两个文件都由root拥有并且不能由root以外的任何人写入,这相当安全,并且比在根文件中以明文嵌入root密码更安全。< / p>

由于某种原因,我没有成功为script.py文件工作,所以如果真的想要运行python脚本,请拥有script.sh文件间接地运行它。如果这样做,请记住使用上面的chownchmod设置python脚本的所有者和权限。

答案 1 :(得分:2)

使用sudo选项运行时,

-S将从标准输入读取密码。

在这种情况下,您可以在以下脚本中使用它:

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

正如@david正确地说的那样,为什么你使用python来执行系统调用?你可能也有同样的脚本做同样的事情。