ファイルやディレクトリのパーミッションについて調べました【Linux】

Linux

毎回分からなくなるパーミッションについて調べたのでメモします。

Linuxすべてのファイルとディレクトリには、ユーザーごとに内容を確認したり編集できるアクセス権が決まってます。これをパーミッションといいます。

所有権と実行権について

ユーザーの所有権について

ユーザーは「所有者」「所有グループ」「その他ユーザー」の3つ所有権に分類されます。

所有者ファイルまたはディレクトリを作成したユーザー
所有グループ複数ユーザーの権限をグループ単位で設定できる。ユーザーは必ずどこか1つのグループに所属している。
※ユーザーを作成した際、ユーザー名と同じグループが自動的に作成され、そのグループに所属することになる。
その他ユーザー所有者、所有グループ以外のユーザー

以下はlsコマンドでファイル一覧を表示したものです。
所有者、所有グループともに「user01」であることを表します。

$ ls -l
-rw-rw-r-- 1 user01 user01    0 12月 11 12:20 test.txt

ファイル、ディレクトリの実行権について

それぞれの所有権に対して「読み込み」「書き込み」「実行」と3つの実行権を設定できます。
尚、実行権はファイルとディレクトリで意味合いが少し異なります。

ファイルの「読み込み」「書き込み」「実行」の権限

読み込み(r)ファイルの内容を確認できる。
書き込み(w)ファイルを編集して保存することができる。
実行(x)プログラムを実行することができる。

htmlやcssなど、静的ページであれば「読み込み」「書き込み」の権限だけでOKですが、phpなどのプログラムは「実行」の権限が必要になります。

ディレクトリの「読み込み」「書き込み」「実行」の権限

読み込み(r)lsコマンドなどでディレクトリの一覧を確認できる。
書き込み(w)ディレクトリにファイルを追加、削除できる。ファイルの名前を変更できる。
実行(x)ディレクトリの下に移動できる。

ディレクトリはファイルの名前をリストとして管理している1つのファイルとして考えると分かりやすいかもです。

パーミッションの確認方法

ファイル及びディレクトリのパーミッションは、lsコマンドに「-l」オプションをつけることで確認できます。
今回、隠しファイルも表示させたいのでオプション「-a」を追加して、ルートディレクトリを表示させました。

# ls -la /

左側に表示されている「drwxr-xr-x」みたいなアルファベットがパーミッションを表します。
アルファベットだけでなく数字でも表現できます。

 アルファベット数字
読み込み (Readable)4
書きこみ (Writable)2
実行(eXecutable)x1
何もできない0


数字で表す場合、rは4、wが2、xが1、-は0になります。
「dr-xr-x—」は(r-x = 4+1)r-x = 4+1)(— = 0)なので550になります。
※最初のdはディレクトリを表す記号なので無視します。

パーミッションを変更する方法

パーミッションを変更するにはchmodコマンドを使います。

chmod [-R] アクセス権 ファイル名またはディレクトリ名

次のようなファイル「test.txt」があるとします。

$ ls -la
-rw-rw-r-- 1 user01 user01    0 12月 11 12:20 test.txt

test.txtのパーミッション-rw-rw-r–を数字で表すと660です。
これは、所有者と所有グループ「user01」に書き込みと読み込みの権限があることを表します。

このファイルのパーミッションを660から600に変更してみます。
これは、所有者のみ読み込みと書き込みができる設定です。
セイキュリティを高くしたいwordpressの設定ファイルなどで推奨されているアクセス権です。

コマンドを実行すると、パーミッションが変更されているのを確認できました。

$ chmod 660 test.txt
$ ls -la
-rw-rw---- 1 user01 user01    0 12月 11 12:20 test.txt

尚、-Rオプションを付けると、ディレクトリ以下のファイルのパーミッションを全て変更します。

所有者とグループを変更する方法

ファイルを作成すると、自動的に所有者のグループに属することになりますが、所有者とグループを変更したい場合、chownコマンドで変更できます。

chown [-R] 所有者:所有グループ ファイル名またはディレクトリ

chownコマンドでディレクトリのグループ名を変更してみました。
root権限が必要なので、先頭にsudoをつけて実行します。
※色付けしたところが所有者とグループ名です。

$ ls -la
drwxrwxr-x  2 user01 user01       0 12月 11 12:20 testDir
// グループ名を[testuser]に変更する
$ chown user01:testuser testDir
chown: `testDir' の所有者を変更中: 許可されていない操作です
// root権限でないと実行できないため、sudoで実行
$ sudo chown user01:testuser testDir/
[sudo] user01 のパスワード:
$ ls -la
drwxrwxr-x  2 user01 testuser       0 12月 11 12:20 testDi

グループ名をuser01からtestuserに変更できました!

まとめ

パーミッションと所有者、所有グループが適切に設定されていないとプログラムがうまく実行できないことがあります。主にWordPressですが、、。

プログラムがうまく動かないときはパーミッションを確認しようと思います!

コメント