blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_2 memo パーミッション

[memo] Unix システムのファイルパーミッション (0x10b)

[memo] Unix システムのファイルパーミッション (0x10b)

目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x10b 回。

CGI.pm で、実用的なファイルアップロードの処理を確認する前に、アップロード先に指定するディレクトリのパーミッションを確認するが、さらにその前に、Unix 系のオペレーティングシステムにおける、ファイルのパーミッションを確認する。



Web サーバの実行ユーザ



前回 (0x10a) で確認した、ファイルアップロードのための Perl プログラムでは、アップロード先に「 UPFILE/ 」という名前のディレクトリを指定していました。

HTML フォームを通じて、ファイルの書き込みを行う場合、実際にプログラムを起動して、ファイルを書き込むのは Web サーバ ( ここでは Apache ) の仕事です。

このため、アップロード先のディレクトリ UPFILE/ は、Web サーバの実行ユーザ ( Drive Network では www ) 権限で書き込める様に、適切なパーミッションが設定されている必要があります。


ファイルパーミッション



「 ディレクトリ 」のパーミッションを確認する前に、まず、UNIX 系システムの「 ファイル 」のパーミッションを簡単におさらいします。

パーミッション ( permition ) は、英語で「 許可 」や「 承認 」と言う意味を持ちます。

UNIX 系システムのファイルパーミッションは、つまり、特定のユーザがあるファイルを操作する場合に、どの様な操作が「 許可 」されているかという「 権限 」を表現したものです。


パーミッションのクラス



ファイルを操作しようとする場合、全てのユーザは、基本的に 3 つのクラスに区分されます。

  1 つ目は、ファイルを所有するクラス「 所有者 」です。これは「 ユーザ 」自身で「 user 」とも表記されます。

  2 つ目は、所有者と同じグループに属するクラス「 グループ 」です。これは「 group 」とも表記されます。

  3 つ目は、所有者でもグループメンバーでもないクラス「 その他 」です。これは「 others 」とも表記されます。


基本のパーミッション



ほとんどの UNIX 系システムでは、ファイルパーミッションを「 r w x 」の 3 つのアルファベットで区別します。

  「 r 」は Read ( 読み込み ) 可能の権限を意味します。

  「 w 」は Write ( 書き込み ) 可能の権限を意味します。

  「 x 」は eXecute ( 実行 ) 可能の権限を意味します。


パーミッションの表記



UNIX 系のシステムでは、3 つのユーザクラスに対する「 r w x 」の 3 つのモードを次の様に表現します。1 番左の「 - 」はひとまず無視してください。


-rwxrwxrwx



「 rwx 」 の組が 3 つセットされていることが分かります。この 3 つの組は、左から「 所有者 」「 グループ 」「 その他 」のクラスを意味します。


パーミッションを 2 進数で理解する



UNIX 系システムのファイルパーミッションは、「 777 」や「 755 」といった 3 桁の数字で表現されることが良くありますが、 これら 3 桁の数字の 1 桁 1 桁が、それぞれ 3 つのユーザクラスを表す 8 進数の値から成っています。

例えば「 764 」のパーミッションは、所有者に「 7 」、グループに「 6 」、その他に「 4 」という権限が与えられます。

3 つのユーザクラスを表現するために、3 つの桁が必要な訳です。

この 8 進数の表記方法はとても便利ですが、やや抽象度が高いです。これをしっかり理解するには、まず初めに、2 進数の表現を覚えると良いと考えています。

2 進数では、パーミッションの設定をより具体的に表現します。許可がない権限が 0 で、許可がある権限が 1 ( ビットフラグ ) です。

8 進数と同じ 3 桁の記述になっていますが、これは 2 進数の 3 桁です。つまり、8 進数の 1 桁を 2 進数では 3 桁で表す訳です。


--- 000
--x 001
-w- 010
-wx 011
r-- 100
r-x 101
rw- 110
rwx 111



「 rwx 」で表現した許可モードと、2 進数のビットフラグが対応していることが分かります。

このモードのパターンは、「 0 か 1 」の 2 つのパターンの「 3 つの組み合わせ 」で成り立っています。これは、「 2 の 3 乗 」なので、発生する組み合わせは 8 個のモードで表現出来ます。

8 個の値で表現出来るのであれば、それは 8 進数で表現出来ます。という訳で、8 進数の表現が登場します。上記 3 桁の 2 進数は、8 進数の 1 桁に収まります。


パーミッションを 8 進数で理解する



アルファベットと 2 進数のモードに対応する 8 進数の値を並べてみましょう。


--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7



この対応を理解すれば、良く見聞きする次の Tips の意味もより理解出来ます。

 「 4 の加算で読み込み権限を付与 」

 「 2 の加算で書き込み権限を付与 」

 「 1 の加算で実行権限を付与 」

8 進数で 4 は、「 r-- 」で読み込み権限がありますが、これに 2 を加えると、8 進数で 6 になります。アルファベットのモードは「 rw- 」なので、「 書き込み権限 」が追加されていることが分かります。

これに 1 を加算すると 7 になります。アルファベットのモードは「 rwx 」ですから、「 実行権限 」が追加されました。

反対に 8 進数の 7 から 4 を引いた場合は、3 になります。アルファベットのモードは「 -wx 」なので、「 読み読み込み権限 」がはく奪されます。

3 から 2 を引くと、1 になります。アルファベットのモードは「 --x 」になるので、「 書き込み権限 」がはく奪されます。

ちなみに、アルファベットで表現するモードは「 シンボリックモード 」と呼ばれます。


8 進数で 3 つのクラスを表現する



8 進数での 1 桁を 1 つのクラスと見立てれば、「 所有者 」「 グループ 」「 その他 」のクラスを、次の様に 3 桁の数字で表すことが出来ます。


[シンボル] [2 進数] [8 進数]
--- --- --- 000 000 000 000
--x --x --x 001 001 001 111
-w- -w- -w- 010 010 010 222
-wx -wx -wx 011 011 011 333
r-- r-- r-- 100 100 100 444
r-x r-x r-x 101 101 101 555
rw- rw- rw- 110 110 110 666
rwx rwx rwx 111 111 111 777



FTP 接続ソフト等でお馴染みの、3 桁の 8 進数の値がこれです。


0x10b -> 0x10c へ



UNIX 系システムのファイルパーミッションの解説は、巷に山ほどあふれていますが、2 進数を絡めた解説はあまり多くは無いように見受けられます。

僕自身は、シンボリックモードと 2 進数の関係から始めた方が、素直に理解が出来るので、今回は、その部分にフォーカスして、ファイルパーミッションをおさらいしました。

英語版の File system permissions - Wikipedia では、2 進数について少し言及がありますが、日本語版 ファイルパーミッション- Wikipedia では、その少しが削られています。

それらは、「 8 進数の表現は、2 進数ビットの合計 」や「 読み出しビットは合計に 4 を追加する ( 2 進数で 100 ) 」といった些細な表記なのですが、結構大事だと思うんですよね。こういうディテール。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index


















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲