Linuxのアクセス権限

Linuxのパーミッションの解説。
アクセス権限をchmodとchownで変更。

関連ページ 参考URL
Linuxのアクセス権限は、パーミッションという機能で管理されている。
ファイルやディレクトリに対し適切なパーミッションを与えないと、管理者やユーザーはそこにアクセスできない。

一方でこのパーミッションはサーバーのセキュリティの要ともなっている。
無分別にアクセス権限を与えすぎると、世界中の人間がサーバーの内容を自由に改変できてしまう。

権限の確認方法とその概要

 ls -l 
で各ファイルの権限を確認が出来る。
ls -l

例えばこのサイトのサーバの、Tomcatディレクトリ直下で実行すると次のような表示になる。
アクセス権限の確認コマンド
1行がそれぞれ1つのファイルを表し、その右端にはファイルの名前が記されている。

1番上のbinとBUILDING.txtをサンプルにして、大まかな概要図はこちら。

アクセス権限の大まかな概要図
実際のアクセス権限に関係あるのは、このうちのパーミッションと所有者/所有グループになる。

パーミッションについて

パーミッションの図解

パーミッションはアクセス権限の取り決めにおいてメインとなる部分。同時にやや内容が難しい。
パーミッションをさらに詳しくした図解は下の通り。

アクセス権限の大まかな概要図

ファイルタイプ

ファイタイプはその名の通り、そのファイルがどういう属性なのかを表す。
下の表はその一覧。
 - 
: 通常ファイル
 d 
: ディレクトリ
 l 
: シンボリックリンク
 b 
: ブロックデバイスファイル(ストレージなど)
 c 
: キャラクタデバイスファイル(キーボードなど)
 s 
: ソケットファイル
つまり最初の方で示した画像で言うと、binはディレクトリでBUILDING.txtは通常ファイルになる。
9割方は
 - 
 d 
しか見ないので、他は気にしなくてもいいかもしれない。

ファイルモード

このファイルモードが、誰がどの程度そのファイルにアクセスできるかを示している。
通常ファイルにおける、それぞれのアルファベットの意味は次の通り。
 - 
: 権限なし。
 r 
: 読み込み権限。ファイルの中身を読める。
 w 
: 書き込み権限。ファイルを変更できる。
 x 
: 実行権限。ファイルを実行できる。

ディレクトリにおいては、ファイルモードの意味がやや異なる。
 - 
: 権限なし。
 r 
: ディレクトリ内のファイルを一覧できる。
 w 
: ディレクトリ内にファイルを作成/削除できる。
 x 
: ディレクトリの中に移動できる。

パーミッションでは、所有者/所有グループ/第三者それぞれに対し、これらの権限が細かく設定されている。
所有者、所有グループはパーミッションの後ろに表示されている情報と紐づいている。
第三者というのは、つまり指定した所有者と所有グループ以外の全ユーザーを表す。

所有者or所有グループとパーミッションの紐づき

上の例で言うと、サーバにログインしてるユーザー名がtomcatである場合、binディレクトリに対しrwxが埋まっていることが分かる。
つまり全権限を与えられている。
BUILDING.txtに対しては、rw-と表示されているので、読み込み書き込み権限はあるが実行権限がない。

ログインしてるユーザーがhpグループに所属してる場合、binディレクトリに対しては同様に全権限が与えられている。
BUILDING.txtに対しては読み込み権限のみあり、書き込みと実行権限はない。

ログインしてるユーザーが所有者と所有グループの両方に合致してる場合、どちらか一方にでも権限が付与されていれば有効になる。

binもBUILDING.txtも、第三者に対しては全ての権限が閉じられている。
これらのファイルは不特定多数にアクセスさせる必要がないので、これで問題ない。
しかし例えばHPで使う htmlファイル 等は、第三者への読み込み権限を付与していないと、ブラウザ上に表示することができない。

chmodによるファイルモードの変更

各ファイルのファイルモードはchmodというコマンドで変更できる。
sudo chmod 
 [変更コード] 
 
 [変更対象のファイル] 
変更コードには様々な作法があるものの、一番楽なのは0~7の数値を3桁入力する方法になる。
例えば「rwx rwx ---」を変更コードに訳すと「770」に、「rw- r-- ---」を変更コードに訳すと「640」となる。

各ファイルモードとコードの対応表は次の通り。
 0 
: ---
 1 
: --x
 2 
: -w-
 3 
: -wx
 4 
: r--
 5 
: r-x
 6 
: rw-
 7 
: rwx

例えばBUILDING.txtに対して、アクセス権限を次のように変更したいとする。
 所有者 
: 全ての権限を閉じる。
 所有グループ 
: 全ての権限を開ける。
 第三者 
: 全ての権限を閉じる。
コードは次の通り。
sudo chmod 070 BUILDING.txt

再び
 ls -l 
で確認すると、BUILDING.txtのアクセス権限が変わってるのが確認できる。
chmodによるファイルモードの変更結果

またディレクトリに対しては、
 -R 
のオプションを付けると、そのディレクトリ下の全てファイルのファイルモードが再帰的に変更される。
例えばbinディレクトリと、binディレクトリ下の全てのファイルに対してアクセス権を全て閉じたい時は次のように打ち込む。
sudo chmod -R 000 bin

chownによる所有者/所有グループの変更

各ファイルの所有者と所有グループは、chownというコマンドで変更できる。
sudo chown 
 [所有者名] 
:
 [所有グループ名] 
 
 [変更対象のファイル] 
所有者だけ変えたい時は下のように入力する。
sudo chown 
 [所有者名] 
 
 [変更対象のファイル] 
所有グループだけ変えたい時は下のように入力する。
sudo chown :
 [所有グループ名] 
 
 [変更対象のファイル] 

例えばBUILDING.txtに対して、所有者と所有グループを次のように変更したいとする。
 所有者 
: rootに変更。
 所有グループ 
: testに変更。
sudo chown root:test BUILDING.txt

 ls -l 
で確認すると、BUILDING.txtの所有者/所有グループが変わってるのが確認できる。
chownによる所有者と所有グループの変更結果

chmodと同様に、
 -R 
のオプションを付けると再帰的な処理が可能となっている。

所有者/所有グループの注意点

所有者と所有グループの概念は、パーミッションと深く結びついてるので、適当に設定すると痛い目を見る。
例えば、下のような2つのファイルがあったとして、
 home.jsp 
から
 user.db 
というファイルを参照したいとする。
このアクセスには
 r 
の読み込みが必要になる。
実行する側とされる側の所有権の説明
所有者、所有グループともに読み込みは解放されている。

しかし、読み込む側の
 home.jsp 
の所有権は「tomcat:hp」だが読み込まれる側の
 user.db 
の所有権は「root:root」になっている。
 user.db 
からすると、所有者「tomcat」も所有グループ「hp」も赤の他人に過ぎない。
 user.db 
の第三者への権限は全て閉じられているので、
 home.jsp 
からアクセスしようとすると弾かれてしまう。

なのでこの場合、
 user.db 
の第三者への読み込みを解放するか、所有権もしくは所有グループを
 home.jsp 
と同一にする必要がある。
例えば下のように、所有グループを「hp」に変えるだけでアクセスは成功する。
sudo chown :hp user.db
所有グループの変更結果
0
0