サーバ管理って難しい(6)
素材提供:写真素材 足成 様
こんにちは、さち です。
先日、ブログの総アクセス数が100万を突破しました!
これもブログを見て下さっている皆様のおかげです。
本当にありがとうございます。
これからも200万アクセスに向けて頑張っていきます。
「知らなきゃ絶対損するPCマル秘ワザ」をよろしくお願いします。
今回は久しぶりにサーバ管理に関する記事です。
パーミッション(属性)は勉強したつもりだったのですが
最近色々と苦労をしたのでまとめておきます。
パーミッションって何?
ウェブサイトの基本「HTML」「CSS」
画像の「JPEG」「PNG」「GIF」
音楽の「MP3」「AAC」
サーバ上で動くプログラム「PHP」「Perl」
それぞれのファイルには利用目的があります。
中には、セキュリティ上
サイトに来た一般の人に見られては困るものもあります。
この問題を解決するのが「パーミッション」です。
「パーミッション」とは、簡単に言うと
サーバ上にあるファイルへのアクセスを制限する機能です。
管理する人は3種類
管理する人たちは全部で3種類に分かれています。
サーバにログインできる人。つまり、サイトの管理人である自分。
オーナー、所有者 と呼ばれることも。
ユーザと同じサーバを使っている他の人。
共用サーバの場合、ユーザ(自分)と同じサーバを使う他のユーザ。
上の2つ以外の人。つまり、サイトを見に来る一般の人。
一番気をつけて管理をしないといけないのは
やはり、「その他(サイトを見に来る人)」ですね。
アクセス権限の管理も3種類
アクセス権限の設定は「読み込み」「書き込み」「実行」の3種類があります。
「ファイル」と「ディレクトリ」、どちらも設定できる権限は同じですが
制限される操作は微妙に異なります。
(「ディレクトリ」とは、Windows でいう「フォルダ」のこと)
※ それぞれの「記号」「数値」の意味については後述します
【ファイル】 読み込みを許可する。
【ディレクトリ】 中身の閲覧,検索等を許可する。
記号は「r」、数値は「4」。
【ファイル】 書き込みを許可する。
【ディレクトリ】 ファイル作成、削除、パーミッション変更等を許可する。
記号は「w」、数値は「2」。
【ファイル】 実行を許可する。
【ディレクトリ】 中にあるファイルへのアクセスを許可する。
記号は「x」、数値は「1」。
例えば、HTML,画像等の公開するファイルは「読み込み」を許可
データの書き換えが必要なファイルは「書き込み」を許可
PHP, Perl 等のファイルは「実行」を許可する必要があります。
ディレクトリのパーミッションは
その中にあるファイルにも影響を与えます。
例えば、画像(読み込み:許可)が
ディレクトリ(実行:不許可)に入っているとします。
この場合、ディレクトリ内のファイルにはアクセスできないため
画像を読み込むことはできません。
実際の管理
「管理する人(3種類)」と「アクセス権限(3種類)」を紹介しましたが
これらをどのように表記すればいいのでしょうか?
前項の説明で各アクセス権限には「記号」と「数値」がありましたよね。
それを使って表記するのがルールです。
例えば、次のようなパーミッションの表記を見てみましょう。
ユーザ | グループ | その他 | |
---|---|---|---|
[r]読み込み(4) | ○ | × | ○ |
[w]書き込み(2) | ○ | × | × |
[x]実行(1) | ○ | × | ○ |
記号 | rwx | --- | r-x |
属性値 | 7 | 0 | 5 |
ルールは簡単。
単に「ユーザ」「グループ」「その他」を順に並べるだけです。
つまり、記号での表記は「rwx---r-x」となります。
属性値で表記する場合は、「705」となります。
これは各アクセス権限の数値を足し算したもの。
「ユーザ」は、「4+2+1」で「7」
「グループ」は、すべてのアクセス権限がないので「0」
「その他」は、「4+1」で「5」というわけです。
パーミッションの表記は、「記号」「属性値」どちらでも構いませんが
会話や解説では、一般的に「属性値」を使うことが多いです。
■余談 - 属性値と二進法の関係
属性値が分かれば、各アクセス権限の状態は必ず1通りに決まります。
例えば、「5」になるのは「4+1」の組み合わせだけです。
これは、各アクセス権限の数値「4」「2」「1」が二進法をもとにしているからです。
ちなみに、「5」を二進法で書くと「101」となり
左から順に、読み込み,書き込み,実行 として、1=オン,0=オフ と見れば
読み込み,実行 の2つがオンだと分かります。
(二進法の仕組みはこちらのサイトが分かりやすいです)
よく使われるパーミッションの設定
専有サーバーは料金が高いので、ほとんどの人は共用サーバーを使っていると思います。
共用サーバーの場合、「グループ」は同じサーバーを借りている他人です。
イメージとしては、同じマンションに住んでいる別の部屋の人ですね。
なので、「グループ」にはアクセス権限を一切与えないのが基本です。
705(ディレクトリ)
理由がない限り、ディレクトリのパーミッションはこれです。
ユーザ | グループ | その他 | |
---|---|---|---|
[r]読み込み(4) | ○ | × | ○ |
[w]書き込み(2) | ○ | × | × |
[x]実行(1) | ○ | × | ○ |
記号 | rwx | --- | r-x |
属性値 | 7 | 0 | 5 |
604
HTML,画像,CSS, JavaScript 等の静的ファイルに使われます。
ユーザ | グループ | その他 | |
---|---|---|---|
[r]読み込み(4) | ○ | × | ○ |
[w]書き込み(2) | ○ | × | × |
[x]実行(1) | × | × | × |
記号 | rw- | --- | r-- |
属性値 | 6 | 0 | 4 |
606
書き換えが必要なデータファイルに使われます。
書き換えがユーザとして実行される環境なら「600」推奨。
ユーザ | グループ | その他 | |
---|---|---|---|
[r]読み込み(4) | ○ | × | ○ |
[w]書き込み(2) | ○ | × | ○ |
[x]実行(1) | × | × | × |
記号 | rw- | --- | rw- |
属性値 | 6 | 0 | 6 |
705(ファイル)
PHP, Perl 等のサーバプログラムに使われます。
プログラムがユーザとして実行される環境なら「700」推奨。
FastCGI を使う場合、「604」でも動くことがあります。
ユーザ | グループ | その他 | |
---|---|---|---|
[r]読み込み(4) | ○ | × | ○ |
[w]書き込み(2) | ○ | × | × |
[x]実行(1) | ○ | × | ○ |
記号 | rwx | --- | r-x |
属性値 | 7 | 0 | 5 |
600
直接実行されないライブラリ(PHP, Perl 等)に使われます。
「readme.txt」など、公開しないけど残しておきたいファイルもこれ。
ユーザ | グループ | その他 | |
---|---|---|---|
[r]読み込み(4) | ○ | × | × |
[w]書き込み(2) | ○ | × | × |
[x]実行(1) | × | × | × |
記号 | rw- | --- | --- |
属性値 | 6 | 0 | 0 |
共用サーバを使う場合の注意
安価なレンタルサーバは
1台のサーバを複数のユーザで共用しています。
共用している他のユーザは
パーミッションでの「グループ」に当たります。
つまり、共用サーバではセキュリティ強化のため
「グループ」に一切の権限を与えないのが基本です。
サーバによっては
PHP がセーフモードで実行されることがあり
思ったように動かないことがあります。
PHPファイル のパーミッションを緩めると
セーフモードでも動きますがこの解決法はダメ!
CGI動作 させる方法を使いましょう。
PHP を CGI動作 させると
サイト閲覧者が PHPファイル にアクセスしても
PHP を実行するのは「ユーザ」と見なされるため
セーフモードになりません。
この場合、PHPファイル のパーミッションは「700」でOK。
PHP をCGI動作させる方法については
各サーバ会社のマニュアルを参照しましょう。
記事作成にあたり下記サイト様を参考にさせて頂きました。
ありがとうございました。
→ パーミッションについて - siriasu.net様
→ パーミッションとは? - InternetMIE様
→ セーフモードの束縛 - hiromasa.zone : o)様
→ ノンプログラマーのための WordPress セキュリティ入門 - firegoby様
【2013/09/05】一部改訂、追記しました。
<< 前へ | サーバ管理って難しい(6) | 次へ >>
サーバ管理って難しいTOPへ
コメント