SGID(Set Group ID) - 特殊なアクセス権
SGID(Set Group ID)という特殊なアクセス権があります。このページでは、SGID(Set Group ID)について説明します。
Last Update : 2013年07月26日
SGID(Set Group ID) - 特殊なアクセス権 項目
1. SGID(Set Group ID)とは
SGID(Set Group ID)とは、実行権のあるファイルに設定される特殊なアクセス権です。また、SUIDと異なり、ディレクトリにも設定されます。
実行ファイルにSGID(Set Group ID)が設定されている場合は、その実行ファイルを実行すると、実行ファイルの所有グループの権限でファイルが実行されます。
ディレクトリにSGID(Set Group ID)が設定されている場合は、そのディレクトリ配下に作成されたファイル・ディレクトリの所有グループが、SGID(Set Group ID)を設定されたディレクトリの所有グループと同じものになります。
2. SGID(Set Group ID)を設定する
SGID(Set Group ID)を設定するには、chmodコマンドで以下のように指定します。
chmod g+s file
数値モードでアクセス権を設定する場合には、数値に2000を足します。 例えばアクセス権が755の実行ファイルにSGID(Set Group ID)を追加したい場合の数値表記は、「2755」となります。
chmod 2755 file
memo
ディレクトリにSGID(Set Group ID)を設定する場合もオプションは同じです。
3. SGID(Set Group ID)を確認する
SGID(Set Group ID)を確認するには、「ls -l」コマンドで確認する事ができます。
# touch file
# chmod 2755 file
# ls -l file
-rwxr-sr-x 1 root group2 0 7月 26 08:24 file
パーミッションのグループの部分が、「r-s」となっています。実行権の部分は、通常「x」ですが、ここが「s」になっているとSGID(Set Group ID)が設定されている事を意味します。
4. 使用例
実際に、SGID(Set Group ID)を設定して、動作を確認してみます。実行ファイルに設定した場合と、ディレクトリに設定した場合の両方をテストします。
実行ファイルに設定した場合
rootユーザーで。
# id uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) # cp /bin/touch . ← touchコマンドをコピー # chgrp group1 touch ← グループをgroup1にする # chmod g+s touch ← SGIDを設定 # ls -l touch -rwxr-sr-x 1 root group1 42284 7月 26 08:28 touch ← SGIDが設定されている # ./touch test.txt # ls -l test.txt -rw-r--r-- 1 root group1 0 7月 26 08:30 test.txt ← 所有グループがgroup1になった
memo
rootアカウントでコマンドを実行しているので、本来ならそのコマンドによってできたファイルのグループはrootになる。 touchコマンドにSGIDが設定されている為、コマンドがroot:group1として実行され、作成されたファイルのグループがgroup1となった。
ディレクトリに設定した場合
ディレクトリにSGIDを設定した場合は、その配下に作成したファイル・ディレクトリが、SGIDが設定されているディレクトリの所有グループになります。
# mkdir dir ← ディレクトリ作成 # chgrp group1 dir ← 所有グループをgroup1にする # chmod g+s dir ← SGIDを設定 # ls -ld dir drwxr-sr-x 2 root group1 4096 7月 26 08:33 dir ← グループがgroup1のSGID設定されたディレクトリ # touch dir/test.txt ← rootアカウントで、dirディレクトリ配下へファイル作成 # mkdir dir/test_dir ← rootアカウントで、dirディレクトリ配下へディレクトリ作成 # ls -l dir 合計 12 -rw-r--r-- 1 root group1 0 7月 26 08:33 test.txt ← グループがgroup1になっている drwxr-sr-x 2 root group1 4096 7月 26 08:34 test_dir ← グループがgroup1になっている
memo
SGID設定されたディレクトリ配下に作成したディレクトリにも、SGIDが設定されます。セキュリティ問題とかありそうで使いどころに悩みます。