我正在尝试在需要时打开系统电源。所以我使用以下命令,这些命令成功运行。但是当我运行代码时,它会询问我的密码,我每次都必须手动提供密码。
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 :(得分: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
文件间接地运行它。如果这样做,请记住使用上面的chown
和chmod
设置python脚本的所有者和权限。
答案 1 :(得分:2)
sudo
选项运行时, -S
将从标准输入读取密码。
在这种情况下,您可以在以下脚本中使用它:
#!/bin/bash
echo my_awesome_password | sudo -S python awesome_script.py
正如@david正确地说的那样,为什么你使用python来执行系统调用?你可能也有同样的脚本做同样的事情。