質問
スクリプトメモリに保存せずにルートpwを要求し、os。*コマンドの一部をルートとして実行することは可能ですか?
マイスクリプト
- いくつかのフォルダーとファイルをスキャンして、ジョブを実行できるかどうかを確認します
- / etc / ...にいくつかの変更を加えます
- スクリプトを実行したユーザーが所有するフォルダーとファイルを作成します
(1)は通常のユーザーとして実行できます。 (2)スクリプトをsudoすることで実行できますが、(3)のフォルダーとファイルはルートになります。
問題は、多くのos.makedirs、os.symlinkなどを使用しているため、通常のユーザーが実行できるようにすることを妨げることです。
提案用のタンク2すべて
これまでの解決策は:
# do all in sudo
os.chown(folder, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))
ヒントをニブラーに感謝します。
解決 5
gnibbler は os.chown
にヒントを与えました。問題は、sudoの背後にいるユーザーのIDを知ることでした。その情報は環境変数 SUDO _ *
:
os.chown, (some_path, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))
コードを3つのファイルに分割することは解決策かもしれませんが、コードは既に混合されているため、適切ではありません。
他のヒント
(2)を別のスクリプト(たとえば script2.py
)に入れて、メインスクリプトで sudo script2.py
をで呼び出すことができますpopen
?
この方法(2)のみがルートとして実行されます。
yourscript.py
:
run_part_1()
subprocess.call(['sudo', sys.executable, 'part2.py'])
run_part_3()
part2.py
:
run_part_2()
Linux PAM の使用を検討しますか? Linux-PAMアプリケーション開発者ガイドおよび PAM用のPython API
rootとしてスクリプトを実行し、os.chmodおよびos.chownを使用して(3)の権限を適切に変更する必要があります。
sudoを介してroot権限で別のスクリプトを実行することは可能ですが、sudoに渡すためにスクリプトにユーザーのパスワードを保存する必要があります。これはセキュリティの観点からはひどい考えです。
したがって、あなたの問題は、いくつかのファイル/フォルダの正しい許可を取得することです。まず、通常のユーザーのUID /ユーザー名を渡すか、ハードコードします。次に、os.chownを使用して所有者を変更し、os.chmodを使用して権限を変更します。 osパッケージには代替のchown / chmodメソッドもあります。 http:// docs .python.org / library / os.html
最後の注意点:シンボリックリンクの許可について心配する必要はありません。彼らが指しているものの許可を持っています。