2011-04-18 12 views
1

ubuntu rootユーザーのパスワードをpythonスクリプトで変更する方法はありますか?ありがとう。パスワードの変更、python、linux

1 -

+1

なぜpythonを使用していますか? –

+1

私はそれを愛し、そのコンパイル可能で、すでにPythonで大きな役割を果たしていたので、これは単なる一部です。私はその言語を学ぼうとしています。 – Riki137

+0

私は 'ubuntu'に加えてこの 'linux'にタグを付けることをお勧めします。この質問では、すべてのLinuxディストリビューションで回答が(ほとんど)適用されます。 –

答えて

5

modify.pyがパスワードを変更しますスクリプトです)root権限sudo python modify.py /etc/passwdが必要になります/etc/passwd/etc/shadow)でPythonスクリプトを変更することができますPythonからpasswdコマンドラインツールを呼び出しています(stdlibのsubprocessモジュール経由など)。あなたのスクリプトがrootで実行されていない場合は、ルート権限に昇格させるために "su"または "sudo"コマンドを使ってラップする必要があります。予想されるデータをstdinに書き込むだけで十分ですが、sudo/passwdのプロンプトに正確に基づいて異なるアクションを実行する必要がある場合は、pexpectモジュールが役に立ちます。

2番目は、パスワードハッシュが保存されているファイル/etc/shadowに直接書き込みます。これはで、確かには、/ etc/shadowに読み書きパーマを持たせるために、あなたのスクリプトをrootで実行する必要があります。 Stdlibは/ etc/shadowにアクセスするためにspwdモジュールを提供していますが、読み取り専用なので、独自のリーダー/ライターをロールバックする必要があります。csvモジュールが便利かもしれません。/ etc/shadowはです。閉じる ":"セパレータを持つcsvファイルですが、若干の違いがあります。

2番目のルートを選択した場合は、新しいパスワードのハッシュを生成して、シャドウファイルに挿入する必要があります。 Linuxでの最速の方法は、stdlib cryptモジュールを使用することですが、塩生成と適切なパスワードハッシュ接頭辞( "$ 5 $"、 "$ 6 $"など)を設定する必要があります。代わりに、Passlibライブラリのhost_contextオブジェクトは、あなたのためにそのほとんどを処理することができます(免責事項:私はそのライブラリの作者です)。

可能であれば、最初は/ etc/shadowを直接変更することをお勧めします。 -/etc/shadowファイルを混乱させると、ログインできなくなります。あなたはこの道を行くファイルを多くバックアップする

2

あなたはこのことについてに行くには、2つの主要な方法があります

0

commandsモジュールを使用して、出力を端末にパイプすることができます。

x = commands.getstatusoutput("passwd root") 

ただし、「旧パスワード:」と「新しいパスワード:」の値を入力する必要があります。変数xは、コマンドが終了するまで割り当てられず、コマンドは古いパスワードと新しいパスワードが入力されるまで終了しません。 2回目にコマンドモジュールを使用すると、新しいサブプロセスが生成されます。だから、他の人たちと同じように、open機能を使って/ etc/shadowに書き込んでください。

関連する問題