Linuxシステムでパスワードを変更するとどうなりますか?私が覚えているように、基本的にすべてのパスワードはBSDのようなシステムでは/etc/shadow
または/etc/master.passwd
というファイルに保存されます。それらの両方は、600の権限を持つroot/wheelが所有しています。
ターミナルでpasswd
コマンドを使用してパスワードを変更すると、ルート権限でこのファイルにアクセスできます。次に、読み書きします。
ルートのアクセス許可を取得する方法と、パスワードの変更を担当するプロセス(またはプロセス)に興味があります。
基本的には、suidビットを使用しています。マシンでpasswdコマンドを確認した場合:
-rwsr-xr-x 1 root root 43K Feb 15 2011 passwd
SUID(実行時に所有者のユーザーIDを設定する)は、ファイルに与えられる特別なタイプのファイル許可です。通常、Linux/Unixでは、プログラムが実行されると、ログインしたユーザーからアクセス許可を継承します。 SUIDは、プログラム/ファイルを実行するユーザーではなく、ファイル所有者のアクセス許可でプログラム/ファイルを実行する一時的なアクセス許可をユーザーに与えることと定義されています。簡単に言うと、バイナリを実行すると、ユーザーはファイルの所有者の権限と所有者のUIDとGIDを取得します。したがって、バイナリは実行時に実際にはrootとして実行されています。