SUID・SGIDとは
SUIDはSet User ID、SGIDはSet Group IDです。それぞれの詳細を説明します。SUIDとは、passwdコマンドを使うことにより、一般ユーザーは自分自身のパスワードを変更可能です。
シャドウパスワードを利用していない場合、パスワードの変更は「/etc/passwd」に保存されます。
一例です。「/etc/passwd」の所有者・アクセス権をls -lコマンドで確認してみます。
$ ls -l /etc/passwd
-rw-r–r– 1 root root 1504 Jan 14 16:12 /etc/passwd
このファイルの所有者はrootであり、root自身にしか書き込みできない状態になっています。この状況で何故passwdコマンドを一般ユーザーが実行した場合に、結果が「/etc/passwd」に保存されるのでしょうか。
whichコマンドでpasswdコマンドをで調べてみます。
$ ls -l ‘which passwd’
-rws–x–x 1 root root 3964 Mar 9 22:00 /usr/bin/passwd
実行結果をみてみると、所有者のアクセス権は「rws」になっています。
実行権が「s」になっています。これは実行権を持っているユーザーによってプログラムが実行された場合には、ファイルの所有者の権限で実行されることを意味しています。これをSUID(Set User ID)といいます。
今回のpasswdコマンドの場合、このファイルの所有者であるrootの権限で実行されるため、「/etc/passwd」に書き込むことができます。
SUIDを使った場合、所有者の実行権欄が「s」になります。数値で表現するには3桁のアクセス権表記に4000を加えます。「/usr/bin/passwd」の場合「4711」と表現できます。
以下の例は指定したファイルにSUIDを設定します。
chmod u+s samplefile
SUIDと同様にグループのアクセス権が適用されるように設定することもできます。これがSGID(Set Group ID)です。SGIDが設定されると、グループのアクセス権の実行権が「s」になります。
数値で表現するには、3桁のアクセス権表記に2000を加えます。以下の例では指定したファイルにSGIDを設定しています。
chmod g+s samplefile