Pythonスクリプトでubuntuルートユーザーのパスワードを変更するにはどうすればよいですか? ありがとう。
3 に答える
これには主に2つの方法があります -
1 つは、python からpasswdコマンド ライン ツールを呼び出すことです (stdlib のsubprocessモジュールなどを介して)。スクリプトが root として実行されていない場合、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モジュールを使用することですが、salt の生成と、適切なパスワード ハッシュ プレフィックス ("$5$"、"$6$" など) の設定に注意する必要があります。あるいは、Passlib ライブラリのhost_contextオブジェクトがそのほとんどを処理してくれます (免責事項: 私はそのライブラリの作成者です)。
一般的には、可能であれば最初のルートをお勧めします - /etc/shadow を直接変更することは危険を伴います - /etc/shadow ファイルをめちゃくちゃにすると、ログインできなくなります。 、ファイルをたくさんバックアップします。
ルート権限が必要なPythonスクリプトで/etc/passwd
( )を変更できます(パスワードを変更するスクリプトはどこにありますか)/etc/shadow
sudo python modify.py /etc/passwd
modify.py
コマンドモジュールを使用して、出力を端末にパイプできます。
x = commands.getstatusoutput("passwd root")
ただし、"Old Password:" と "New Password:" の値を入力するには工夫が必要です。変数 x はコマンドが終了するまで割り当てられず、古いパスワードと新しいパスワードが入力されるまでコマンドは終了しません。コマンド モジュールをもう一度使用すると、新しいサブプロセスが生成されます。したがって、他の人が言ったように、 open関数を使用して /etc/shadow に書き込むだけです。