3

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

私のスクリプト

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

(1)通常のユーザーとして実行できます。スクリプトをsudoすることで(2)を実行できますが、(3)のフォルダーとファイルはrootになります。

問題は、os.makedirs、os.symlinkなどをたくさん使用しているため、通常のユーザーが実行できないようになっていることです。

タンク2すべての提案

これまでの解決策は次のとおりです。

# do all in sudo
os.chown(folder, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

ヒントをくれたgnibblerに感謝します。

4

5 に答える 5

2

たぶん、(2)を別のスクリプト、たとえばscript2.py、に入れて、メインスクリプトに?で呼び出すことができsudo script2.pyますpopen

この方法では、(2)のみがルートとして実行されます。

于 2009-10-28T10:02:39.987 に答える
2

yourscript.py

run_part_1()
subprocess.call(['sudo', sys.executable, 'part2.py'])
run_part_3()

part2.py

run_part_2()
于 2009-10-28T10:29:24.180 に答える
1

gnibblerはにヒントを与えましたos.chown。問題は、sudoの背後にいるユーザーのIDを知ることでした。その情報は環境変数に保存されますSUDO_*

os.chown, (some_path, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

コードを3つのファイルに分割することは解決策かもしれませんが、コードはすでに混合されているため、適切ではありません。

于 2009-11-06T07:40:53.830 に答える
1

Linux PAMの使用を検討しますか?Linux-PAMアプリケーション開発者ガイドとPythonAPIforPAMをご覧ください。

于 2009-10-28T10:03:07.363 に答える
1

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

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

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

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

于 2009-10-28T13:43:48.310 に答える