質問

スクリプトメモリに保存せずにルートpwを要求し、os。*コマンドの一部をルートとして実行することは可能ですか?

マイスクリプト

  1. いくつかのフォルダーとファイルをスキャンして、ジョブを実行できるかどうかを確認します
  2. / etc / ...にいくつかの変更を加えます
  3. スクリプトを実行したユーザーが所有するフォルダーとファイルを作成します

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

rootとしてスクリプトを実行し、os.chmodおよびos.chownを使用して(3)の権限を適切に変更する必要があります。

sudoを介してroot権限で別のスクリプトを実行することは可能ですが、sudoに渡すためにスクリプトにユーザーのパスワードを保存する必要があります。これはセキュリティの観点からはひどい考えです。

したがって、あなたの問題は、いくつかのファイル/フォルダの正しい許可を取得することです。まず、通常のユーザーのUID /ユーザー名を渡すか、ハードコードします。次に、os.chownを使用して所有者を変更し、os.chmodを使用して権限を変更します。 osパッケージには代替のchown / chmodメソッドもあります。 http:// docs .python.org / library / os.html

最後の注意点:シンボリックリンクの許可について心配する必要はありません。彼らが指しているものの許可を持っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top