root以外のアカウントに対して正常にpasswdコマンドを実行する方法

root以外のアカウントに対して正常にpasswdコマンドを実行する方法

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ライブラリの一部です。

関連情報