Linuxユーザは下記のコマンドを使用して自分のログインパスワードを変更することができます。
/usr/bin/passwd
全ユーザのパスワード情報は下記のファイルに保存されています。これをシャドウファイルといい
ます。
/etc/shadow
しかしここで不思議なのはシャドウファイルはroot権限でしか編集できないのです。
ls -l /etc/shadow
-rw-r----- 1 root shadow 0000 Jan 01 00:00 /etc/shadow
passwdプロセスはユーザによって実行されるのでroot権限はもっていません。
よってpasswdプロセスは直接シャドウファイルを編集できないはずです。別プロセスがシャドウファイルを代行で編集しているのかとも思いましたが違うようです。
実はLinuxのパーミッションにはsetuidアクセス権というものがあり、これが設定されているコマンドはそのプロセスを実行ユーザとは別のアクセス権で実行することができます。
ls -l
コマンドでpasswdのファイルを見るとsetuidが設定されてることが確認できます。
(ユーザの実行権限がsになってることがsetuidが設定されている印です。)
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 00000 Jan 01 0000 /usr/bin/passwd
この仕組みによって一般ユーザがpasswdを実行した後、passwdプロセスがroot権限で実行され、シャドウファイルを編集することでパスワードを変更しているようです。