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

スクリプト ファイルにルート パスワードを設定するのは、単純にばかげています。それをしないでください、より良い代替手段があります。このページでは、setuidビットを設定してシェル スクリプトを作成する方法と、最新の Linux ディストリビューションのほとんどがシェル スクリプトの 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;
}

apt-get install gcc( debian ベースのディストリビューションに) gcc をインストールしてから、次のように入力します。

gcc -o runscript runscript.c

ここで、ルートとして次のように入力します

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

これで、すべてのユーザーが を実行できるようになり、ユーザーが root であるかのようrunscriptに実行されます。script.sh

両方のファイルが root によって所有され、root 以外のユーザーが書き込み可能でない限り、これはかなり安全であり、スクリプト ファイルにプレーンテキストで root パスワードを埋め込むよりもはるかに安全です。

script.py何らかの理由でファイルに対してこれを機能させることに成功していないため、本当にpython スクリプトを実行したい場合は、script.shファイルに間接的に実行させてください。これを行う場合は、上記のようにchownとを使用して、python スクリプトの所有者と権限も設定することを忘れないでくださいchmod

于 2012-06-23T11:14:33.790 に答える
2

sudoオプションを指定して実行すると-S、stdinからパスワードが読み取られます。

その場合、次のようなスクリプトで使用できます。

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

@davidが正しく言っているように、なぜPythonを使用してシステムコールを実行するのですか?おそらく、この同じスクリプトで同じことを行うことができます。

于 2012-06-23T10:36:07.077 に答える