- 2007-04-13 (金) 17:57
理解が甘いので、復習しておくことにしました。
・パーミッションの基本 rwxrwxrwx
まずは基本。user、group、other それぞれの Read,Write,execution 権について。 これは多くのサイトで解説されているので説明は省きます。UNIXの部屋 検索:chmod の説明が分かりやすいです。
・umask
新規ファイル・ディレクトリを作成した際のパーミッションを決めるため値です。ディレクトリは777から、ファイルは666からumaskの値を引いたものが、新規ファイル・ディレクトリを作成した際のパーミッションとなります。umaskが022の場合、新規作成したディレクトリのパーミッションは777-022 =755、ファイルのパーミッションは 666-022 - 644 となります。
・現在のumaskの表示
%umask
22
・umaskの設定
%umask `設定したい値`
参考: UNIXの部屋 検索:umask
・setuid、setgid、sticky bit
この辺りから少しややこしくなります。404 Blog Not Found:unix - permissionあれこれ の説明が分かりやすくて参考になります。ではそれぞれの意味を確認していきます。
・setuid(SUID、4000)
SUID がセットされると、user 実行権限の表示が x から s に変わります。そして実行された際に、実行したuserではなく、ファイルの所有userの権限で実行されるようになります。(EUID がファイルの所有ユーザの EUID となります。) /usr/bin/passwd が代表的な例です。/usr/bin/passwd はパスワードの変更を行うコマンドですが、パスワード情報が誰からでも読み書き可能な状態ではまずいですね。 /usr/bin/passwdのパーミッションは、以下のようになっています。
% ls -l /usr/bin/passwd
-r-s–x–x 1 root root
所有 user、所有 group 共に root ですが、SUID がセットされ、所有者のパーミッションが、(r- s) となっています。またothersにも実行権限(–x)が付加されています。これにより、others で実行した場合にも、実際には root 権限で実行されるため、スーパーユーザしか読み書きする権限を持たないパスワードファイルの書き換えが出来るわけです。 UNIXシステム管理 第3版 VOLUME 1 にも書かれていますが、setuidは使い方を誤るとかなり危険です。特にrootに用いるのは、、言うまでもないですね。
・setgid(SGID、2000)
SGIDがセットされると、group 実行権限の表示が x から s に変わります。そして実行された際に、実行した user のデフォル group ではなく、ファイルの所有groupの権限で実行されます。(EGIDが、ファイルの所有グループのEGIDになります。) またファイルを作成した際に、作成したファイルの group が、ディレクトリと同じ group になります。
ウノウラボ Unoh Labs: ウェブ開発の共同作業でパーミッションを有効活用する では、グループで開発を行う際に、SGIDを活用する方法が紹介されてます。手順はこんな感じ。
- 共通グループを作成し、権限を与えたいメンバを追加
- 各ユーザの umask を 0002 に設定
- 共通作業ディレクトリの所有グループを共通グループにし、SGID をセット(rwxrwsr-x)
・Sticky Bit
Sticky Bitがディレクトリにセットされると、others実行権限の表示が x から t に変わります。そして、ファイルとディレクトリの所有者のみが、ファイルの削除と名前変更ができるようになります。全ユーザがアクセス権をもつような /tmp ディレクトリで使われています。
※SUID、SGID、Sticky Bit は、実行ビットが立っていなければ無意味な点に注意です。その場合、rwSrwSrwT のように、表示が大文字になって教えてくれます。
- Newer: MT 自宅サーバへの移転と各種設定
- Older: 必要ないパッケージはインストールせず、不要なサービスは停止する
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://juyama.net/2007/04/13/20/trackback
- Listed below are links to weblogs that reference
- Permission復習 from juyama.net

