「SGID」とは「Set Group ID」の略であり、Linuxのグループに関しての特殊なパーミッションだ。
「SUID」のグループ版となっている。
目次
SGIDとは?
Set Group ID
先ほどもお伝えしたが「SGID」とは「Set Group ID」の略だ。グループに対して設定される特殊パーミッションになっている。
ポイントは次の通りだ。
- ファイルにSGIDが適応されていた場合、そのグループの権限でファイルが実行される
- ディレクトリにSGIDを指定しておくと、ディレクトリ内部で作成されたファイルは全てディレクトリのSGIDで指定したグループが割り振られる
ファイルのグループIDが統一される。
グループでファイルを共有する場合、専用のSGIDなディレクトリを作成しておいて、そのなかでファイルをやりとりすれば、グループ事でシームレスなファイル共有が可能となる。
SGID使う際の注意
SUIDと同じく特権的な動作を許してしまう場合があるので注意する必要がある。
安易にrootなどの管理者の権限GUIDをセットすることは避けるべきだろう。
SGIDを確認する。
「SGID」が付与されているかを確認するときは「ls -l」とすると確認出来る。ディレクトリを確認したい場合は「ls -ld」とすればよいだろう。
$ ls -l /usr/bin/wall
すると以下のような出力結果が表示される。
-r-xr-sr-x 1 root tty 15428 11月 28 2012 /usr/bin/wall
グループのパーミッションの部分、「r」が読み込み許可のフラグ、書き込みは許可されていない、そのほかに「x」がくるであろう場所に「s」というグラグがたっているのがわかるこれがSGIDのマークとなっている
実際に動作を見てみよう
一般的なディレクトリへの適応を実験してみよう。実際の動作を確認するために、実験用のグループを作成してみる。グループの権限に関わる操作なので一部操作をroot権限で操作を行う。「#」の部分がrootコンソールとなる。
実験用ディレクトリを作成
$ mkdir testdevel
実験用グループを作成
# groupadd devel
作成したディレクトリのグループを実験用グループに設定
# chgrp devel testdevel
SGIDを設定
# chmod 2755 testdevel
$ ls -dl testdevel
結果は以下のようになる。
drwxr-sr-x 2 ken devel 4096 2月 20 18:10 testdevel/
パーミッションのグループの情報が「devel」となりフラグの部分も「drwxr-sr-x」となっている「s」の部分に注目しよう。SGIDが適応されているのがわかる。次に今作成したディレクトリでファイルを作成してみよう。
$ cd testdevel
$ touch testfile
$ ls -l testfile
-rw-r--r-- 1 ken devel 0 2月 20 18:18 testfile
特に設定を指定していないにもかかわらず、自動的にtestfileのグループが「devel」となっている。
SGIDを指定するには?
動作を確認した時点で
# chmod 2755 testdevel
としていたが「chmod」コマンドでパーミッション数値に2000を足しあわせた数値を指定することでSGIDを指定できる。
ファイルに適応する場合もディレクトリに適応する場合も同じ方法で問題ない。
逆にSGIDの権限を剥奪したいときは通常のパーミッション
# chmod 755 testdevel
とすればよい。これでSGIDの権限が剥奪される。
もしくは以下の方法でも剥奪や付与が可能となっている。
SUID権限の付与
$ chmod g+s testdevel
SUID権限の剥奪
$ chmod g-s testdevel
SGIDなファイルなどを検索するには
# find / -perm -2000
とfindコマンドを実行すれば検索出来る。
まとめ
このページでは「SGIDとは」についてまとめてお伝えしてきた。
しょっちゅう使うというものではないが、知っておくと良い権限設定だ。覚えておきたい。
トップの画像が「Javaのアップデート」になっています
ご指摘いただきありがとうございます。
トップ画像を修正いたしました。
引き続き、ご愛読のほど、よろしくお願いいたします。