root以外のユーザーにパスワードを変更しようとしています。
passwd
データは/etc/shadowで更新されますが、私が受け取った権限を確認してください。
---------- 1 root root 6076 Jan 27 17:14 /etc/shadow
cat /etc/shadow
cat: /etc/shadow: Permission denied
明らかにpasswdコマンドが成功したとしても、ファイルに対する権限が誰もなく、権限のないリソース(シャドウファイル)にデータを間接的に更新しているのです!それでは、バックグラウンドアップデートメカニズムを誰が説明できますか?システムコールの説明を参照してください。
答え1
ユーティリティpasswd
がインストールされましたsetuid
。これは実行時に実行されることを意味します。ファイルを所有するユーザーとして、ユーザーが呼び出すのではなく。この場合、passwd
このroot
ビットsetuid
はプログラムをroot権限で実行します。したがってpasswd
、ファイルをshadow
変更できます。
ユーティリティの権限を調べると、passwd
次の内容が表示されます。
-r-sr-xr-x 2 root wheel 8.2K 19 Jan 17:24 /usr/bin/passwd
これは私のFreeBSDシステムからのものです。表示される内容は、使用しているオペレーティングシステムによって異なります。s
このビットは所有者の実行場所(列4)で表されますsetuid
。
さらに参照するために、システムコールはsetuid
標準Cライブラリの一部です。