システムを毎日自動的にオンにしたい。そこで、Pythonスクリプトで以下のコードを使用しますが、sudo
毎回パスワードを要求します。
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
sudo
毎回パスワードを要求せずにこのスクリプトを実行するにはどうすればよいですか?
システムを毎日自動的にオンにしたい。そこで、Pythonスクリプトで以下のコードを使用しますが、sudo
毎回パスワードを要求します。
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
sudo
毎回パスワードを要求せずにこのスクリプトを実行するにはどうすればよいですか?
回答:
注:ログインパスワードをプレーンテキスト、コマンド、またはファイルに入力する方法は安全ではないため、使用しないでください。
必要な特定のコマンドのみがパスワードなしで実行できるsudo
ようにセットアップする正しい方法。echo date... > rtc...
gedit
例えば(またはお好みのエディタ)、およびスクリプトを作成しますpydatertc.sh
エコー日付\ '+%s \' -d \ '+ 24時間\'> / sys / class / rtc / rtc0 / wakealarm
sudo chown root:root /home/username/pydatertc.sh
sudo chmod 700 /home/username/pydatertc.sh
pydatertc.sh
パスワードを必要とせずに実行できるようにsudoをセットアップするsudo visudo
ターミナルで入力してsudo許可(sudoers
)ファイルを開きます%sudo ALL=(ALL:ALL) ALL
username
、ユーザー名を次の行に挿入します。
ユーザー名ALL =(ALL)NOPASSWD:/home/username/pydatertc.sh
pydatertc.sh
os.system( 'sudo /home/username/pydatertc.sh')
これで、パスワードを必要とせず、アカウント、データ、またはシステムのセキュリティを損なうことなく、スクリプトを実行できます。
wakealarm
(一般的な使用ではありません!):のみ、この特定のケース以来、/sys/class/rtc/rtc0/wakealarm
ファイルが唯一のシステムのための目覚ましアラームを制御し、それ以外の場合は無害で、パスワードを回避するための別の代替ではと、そのファイルの所有権を取得するのいずれかであるchown
(あなたがアラームを設定する唯一のユーザーであれば) 、またはchmod +666
; その場合は、sudo
Python呼び出しからを削除し、sh -c "...."
そのまま残します。
sudo
できます。したがって、スクリプトをrootのみが変更できるディレクトリ(たとえば、/ usr / sbinまたは/ root)に置く方がはるかに安全です。それ以外の場合、LGTM。
警告!
ログインパスワードをプレーンテキスト、コマンドまたはファイルに入れることは非常に安全ではなく、個人データとシステムを危険にさらす可能性があります。されて非常にお勧め、あなたのシステムが「個人」または「安全な場所」であると考えても、これを行う決して!
スクリプトが個人使用のみを目的としており、安全な場所に置いており、アカウントが盗まれることなどを恐れていない場合は、次の簡単な解決策があります。
echo LOGINPASSWD | sudo -S COMMAND HERE
LOGINPASSWDはログインパスワード(例:iloveponies)であり、COMMAND HEREはsudoの後に来るコマンドです(sh -c "echo da ..などなど)
スクリプトを1時間(または1日)の特定の時間に実行してもかまわない場合は、ルートのホームディレクトリ(/root
)内に配置し、システムcrontab(/etc/crontab
)からrootとしてスクリプトを実行します。その後、セキュリティを侵害する必要はありません。
スクリプトをcrontabに追加する方法については、https://help.ubuntu.com/community/CronHowtoを参照してください。
anacron
24時間365日実行されないデスクトップ/ラップトップの場合は、おそらく使用する必要があります
上記の優れた回答で言及されていないsudoの別の関連する素晴らしい機能は、「timestamp_timeout」変数です。これはsudo変数であり、対話型パスワード入力を節約するために増やすことができます。
たとえば、/ etc / sudoers(またはそこに含まれるファイルの1つ)でデフォルトを変更できます。
# only require a password once every 60 minutes
Defaults timestamp_timeout=60
「man sudoers」の完全な説明:
timestamp_timeout
Number of minutes that can elapse before sudo will ask for a passwd again. The default is 5, set this to 0 to always prompt for a password.
もちろん、これはcronからコマンドを実行する特定のケースでは役に立ちません。しかし、注意することは良いことです。
export MY_SUDO_PASS="user_password_here"
正常に機能するかどうかをテストするには:
echo $MY_SUDO_PASS
> user_password_here
「sudo apt-get update」を実行し、前に作成した環境変数からパスワードを受け入れます。
echo $MY_SUDO_PASS | sudo -S apt-get update
Pythonから実行します(ディレクトリの所有権をusername_hereに再帰的に変更する例):
python
>> import subprocess
>> subprocess.call('echo $MY_SUDO_PASS | sudo -S chown -R username_here /home/username_here/folder_to_change_ownership_recursivley', shell=True)
echo $ MY_SUDO_PASS get's password -Sスイッチはそれをキャッチし、sudoにパスワードを渡します