0

我正在尝试在需要时打开系统电源。所以我正在使用以下命令,这些命令运行成功。但是当我运行代码时,它会询问我的密码,我每次都必须手动提供密码。

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())    

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

4

2 回答 2

4

在脚本文件中包含您的 root 密码简直是愚蠢的。不要这样做,有更好的选择。本页介绍了如何使用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;
}

安装 gcc(apt-get install gcc在基于 debian 的发行版上),然后输入

gcc -o runscript runscript.c

现在,以 root 身份输入

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

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

只要这两个文件都由 root 拥有并且除 root 之外的任何其他人都不能写入,这是相当安全的,并且比在脚本文件中以纯文本形式嵌入 root 密码更安全。

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

于 2012-06-23T11:14:33.790 回答
2

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

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

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

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

于 2012-06-23T10:36:07.077 回答