SUID(Set User ID)とは、特殊なパーミッション(アクセス権)の一つで、実行可能ファイルに対して設定できます。
/etc/passwdファイルはユーザー名やパスワードなどのユーザーアカウント情報を格納するファイルです。このファイルはパーミッションが「rw-r--r--」となっていて、所有者である「root」以外は書き込みができません。
例えば、viのようなテキストエディタはパーミッションが「rwxr-xr-x」となっていて誰でも実行(起動)可能ですが、viで/etc/passwdファイルを直接編集しようとした場合、ファイルのほうのパーミッションによって、一般ユーザーは書き込みができません。
しかし、一般ユーザーがpasswdコマンドで自身のパスワードを変更すると、新しいパスワードは/etc/passwdファイルに保存されます。
つまり、一般ユーザーが/etc/passwdファイルに書き込めたことになります。
同じ一般ユーザーで実行しているのに、/etc/passwdファイルに書き込めなかったviエディタと、書き込めたpasswdコマンドの違いは何でしょうか?
それは、passwdコマンドには特殊なパーミッションであるSUIDが設定されているということです。
SUIDが設定されたコマンド(ファイル)を実行すると、ファイルの所有者の権限で実行されます。passwdコマンドにはSUIDが設定されているので、誰が実行したときでも所有者である「root」の権限で実行され(所有者である「root」のUser IDがSetされ)、「root」なので/etc/passwdファイルに書き込むことができるわけです。
SUIDを設定するには、chmodコマンドで所有者「u」に対して権限「s」を追加します。以下のように/bin/viにSUIDを設定すると、一般ユーザーでもviで/etc/passwdファイルを直接編集することができるようになります。
SUIDが設定されたファイルのパーミッションの数値表記は、3桁の数値表記に「4000」を加えたものになります。上の例の場合、/bin/viのパーミッションは「rwxr-xr-x」で「755」でしたが、SUIDを設定したことで「rwsr-xr-x」、数値表記は「4755」となります。
|
|
・/etc/passwdファイルはviで自由に編集されると、書式などが崩れ、ユーザがログインできなくなる恐れがあります。一方、passwdコマンドは書式を保ち、適切に編集してくれます。編集対象となるファイルのパーミッションを緩める(全てのユーザに書き込み権限を与える)ことなく、特定のプログラム(コマンド)からのみ編集することができるようにする仕組みがSUIDです。
・/bin/viに設定したSUIDは「chmod 755 /bin/vi」で元に戻しておきましょう。
|
|
|