最近、Linuxの知識のなさを痛感しており、Linuxの基礎からやり直しています。
SUIDとは
SUID(Set User ID)とは、特殊なパーミッション(アクセス権)の一つで、実行可能ファイルに設定される属性です。通常の実行可能ファイルは実行者の権限で実行されますが、SUIDが設定されている実行ファイルは実行ファイルの所有者の権限で実行されます。
passwdコマンドを例に説明していきます。
passwdコマンドとは、パスワードを変更するためのコマンドです。(【 passwd 】コマンド)。passwdコマンドにより、パスワードを変更すると、/etc/shadowファイルにパスワードが保存されます。shadowファイルの所有者とアクセス権を見てみましょう。
shadowファイルの所有者はrootであり、一般ユーザーは書き込みができないパーミッションになっています。しかし、一般ユーザーがpasswdコマンドによりパスワードを変更すると、そのパスワードは/etc/shadowファイルに保存されます。
なぜか?
passwdコマンドを調べてみましょう。
所有者のアクセス権はrws
となっており、実行権がs
になっています。これがSUIDです。このSUIDが設定されている場合、passwdコマンドを実行したときに、passwdコマンドのファイルの所有者の権限(ここではroot権限)で実行されます。root権限で実行されるため、/etc/shadowファイルに書き込むことができます。
SUIDはなぜ必要なのか?
SUIDってなぜ必要なのか?と疑問に思う人もいるかと思います。
/etc/shadowの書き込み権を一般ユーザーに与えれば、SUIDとか考えなくてもいいのではないか?
確かに、/etc/shadowの書き込み権を一般ユーザーに与えれば、/usr/bin/passwdファイルにSUIDがなくても、一般ユーザーが/usr/bin/passwdを実行して、/etc/shadowに書き込むことができます。しかし、/etc/shadowというパスワード情報などが格納されている大切なファイルが一般ユーザーでも自由に編集することができるようになってしまいます。これはセキュリティ上よくありません。
SUIDの便利なところは、あくまで一般ユーザーがpasswdコマンドを実行したときのみ、passwdコマンドの所有者であるrootの権限で実行できるため、/etc/shadowファイルにrootの書き込み権限で書き込めるというところです。誰がコマンドを実行しても、実行の際の権限は所有者rootの権限になるということです。
SUIDがあることで以下2つを両立することができます。
- 使い勝手の面:一般ユーザがpasswdコマンドにより自身のパスワードを変更できて、その結果を/etc/shadowファイルに格納できる。
- セキュリティ面:一般ユーザは/etc/shadowに書き込むことはできない