このページでは、Linuxを使うなら知っておきたい「ファイルモード」と「パーミッション」の基本を、分かりやすく解説します。
ファイルモードとパーミッションによるファイルの保護
LinuxのようなUnix系OSでは、ファイルやディレクトリに「所有者(オーナー)」と「グループ」が設定されます。そして、「所有者」「グループ」「その他のユーザー」ごとに「パーミッション(アクセス権)」も設定されます。このパーミッションは、ファイルモードという形で参照/設定できます。
この仕組みにより、ユーザーによるファイルやディレクトリの利用が制限されます。ユーザーがシステムを壊したり、他のユーザーのファイルを勝手に変更したりといった問題が起きないよう「保護」されているわけです。
実行ファイルのファイルモードとパーミッション
具体的に見ていきましょう。以下は、「ls -l」コマンドで「/bin/chown」の詳細を出力する例です。詳細情報のうち、パーミッションに関係するのは「ファイルモード」「所有者」「グループ」です。
$ ls -l /bin/chown
-rwxr-xr-x 1 root root 67768 1月 18 2018 /bin/chown
この例では、ファイルモードが「rwxr-xr-x」、所有者が「root」、グループが「root」となっています。
9文字のファイルモードは、3文字ずつ「所有者のパーミッション」「グループのパーミッション」「その他のユーザーのパーミッション」を表します。そして各文字はパーミッションの種類を表します。「r」が「読み込み可(readable)」、「w」が「書き込み可(writable)」、「x」が「実行可(executable)」を表しています。「r/w/x」ではなく「–」となっていれば「不可」という意味になります。
以下は、パーミッションの種類をまとめた表です。ファイルとディレクトリで、少し意味が異なります。
文字 | ファイルの場合 | ディレクトリの場合 | |
---|---|---|---|
読み込み権限(最初の文字) | r | ファイルの内容を読み込むことができる。 | ディレクトリの内容を読み込むことができる。 |
- | ファイルの内容を読み込むことができない。 | ディレクトリの内容を読み込むことができない。 | |
書き込み権限(2番目の文字) | w | ファイルの内容を変更することができる。 | ディレクトリの内容を変更することができる(新規ファイル/ディレクトリの作成、名前の変更、削除など)。実行権限が設定されていないと、この権限が設定されていても意味を持たない。 |
- | ファイルの内容を変更することができない。 | ディレクトリの中身を変更することができない。 | |
実行権限(最後の文字) | x | ファイルを実行することができる。 | ディレクトリにcdで移動することができる。なお、cdで移動するには、すべての上位フォルダに実行権限(x)が設定されている必要がある。 |
- | ファイルを実行することができない。 | ディレクトリにcdで移動することができない。 | |
s | 所有者に設定されている場合はSETUIDビット、グループに設定されている場合はSETGIDビットを表す。実行権限(x)が設定されていることも表す。 | ||
S | sと同じだが、実行権限(x)は設定されていないことを表す。 | ||
t | スティッキービットを表す。設定/表示されるのは「その他のユーザー(others)」のみ。実行権限(x)が設定されていることも表す。 | ||
T | tと同じだが、実行権限(x)は設定されていないことを表す。 |
もう一度、「/bin/chown」のファイルモードを見てみましょう。
-rwxr-xr-x 1 root root 67768 1月 18 2018 /bin/chown
ファイルモードは「rwxr-xr-x」なので、所有者のパーミッションは「rwx」、グループのパーミッションは「r-x」、その他のパーミッションは「r-x」であることが分かります。
よって、所有者である「root」は「読み込み可・書き込み可・実行可」となります。グループのパーミッションは「読み込み可・書き込み不可・実行可」となっています。ただし、rootグループに所属するのはrootユーザーだけなので、ここでは意味を持ちません。その他のユーザーについては、「読み込み可・書き込み不可・実行可」となっています。
このように、「/bin/chown」を書き換えることができるユーザーをrootだけに制限しつつ、一般ユーザーでも読み取りや実行が可能となっています。一般ユーザーによって勝手にシステム上の実行ファイルを差し替えるといったことができないよう「保護」されていると言えます。
設定ファイルなどのファイルモードとパーミッション
実行ファイルだけでなく、設定ファイルやライブラリといったファイルについても、一般ユーザーが書き換えられないよう設定されています。以下は、「/etc/fstab」の詳細です。
$ ls -l /etc/fstab
-rw-rw-r-- 1 root root 595 7月 31 00:12 /etc/fstab
ファイルモードは「rw-rw-r–」、所有者とグループは「root」となっています。よって、書き換えることができるのはrootだけで、一般ユーザーは読み込みのみが許可されていることが分かります。実行ファイルではないため、どのユーザーにも実行権は設定されていません。
ディレクトリのファイルモードとパーミッション
システムのプログラムやライブラリ、設定ファイルを置くディレクトリなども、同じ仕組みで「保護」されています。以下は、ディレクトリ「/etc」の詳細です。
$ ls -ld /etc
drwxr-xr-x 118 root root 12288 7月 31 05:23 /etc
ファイルモードは「rwxr-xr-x」となっており、rootユーザー以外は中にファイルを追加したり、中のファイルを削除したりできなくなっています。
以下は、rootユーザーのホームディレクトリである「/root」の詳細です。
$ ls -ld /root
drwx------ 20 root root 4096 6月 26 12:50 /root
ファイルモードは「rwx——」と、rootユーザー以外には一切権限が与えられていません。そのため、他のユーザーはcdコマンドで/rootに移動することすらできません。
ホームディレクトリのファイルモードとパーミッション
なお、一般ユーザーのホームディレクトリにあるファイルなら、通常はそのユーザーが所有者です。以下は、ユーザー「lintaro」のホームディレクトリにある「.bashrc」の詳細を表示する例です。
$ ls -l ~/.bashrc
-rw-r--r-- 1 lintaro lintaro 4024 7月 17 09:26 /home/lintaro/.bashrc
この例では、ファイルモードが「rw-r–r–」、所有者が「lintaro」、グループが「lintaro」となっています。そのため、ユーザー「lintaro」はファイルを書き換えることができますが、所有者以外のユーザーが書き換えることはできません。他のユーザーに自分のファイルが書き換えられてしまっては困りますので、当然の設定だと言えるでしょう。ただしrootユーザーだけは、パーミッションに関わらずファイルを書き換えることができます。
もちろん、ホームディレクトリに書き込みができるのも、所有するユーザー自身に制限されています。他のユーザーが勝手にファイルを置くことはできません。確認してみましょう。
$ ls -ld ~
drwxr-xr-x 48 lintaro lintaro 4096 7月 30 00:30 /home/lintaro
このように「w」が設定されているのは、所有者(この例では「lintaro」)だけです。
所有者とグループの変更方法
ファイルの所有者やグループは、「chown」コマンドで変更できます。ただし、所有者を変更できるのはrootだけです。以下は、「/tmp/testfile」を作成し、所有者を「hoge」に変更する例です。
$ touch /tmp/testfile
$ ls -l /tmp/testfile
-rw-r--r-- 1 lintaro lintaro 0 7月 31 02:22 /tmp/testfile
$ sudo chown hoge /tmp/testfile
$ ls -l /tmp/testfile
-rw-r--r-- 1 hoge lintaro 0 7月 31 02:22 /tmp/testfile
$ sudo rm /tmp/testfile
ファイルの作成直後は「lintaro」だった所有者が、「hoge」に変更されていることが分かります。
以下は、所有者とグループの両方を「hoge」に変更する例です。
$ touch /tmp/testfile
$ ls -l /tmp/testfile
-rw-r--r-- 1 lintaro lintaro 0 7月 31 02:27 /tmp/testfile
$ sudo chown hoge:hoge /tmp/testfile
$ ls -l /tmp/testfile
-rw-r--r-- 1 hoge hoge 0 7月 31 02:27 /tmp/testfile
$ sudo rm /tmp/testfile
ファイルの作成直後は「lintaro」だった所有者とグループが、いずれも「hoge」に変更されていることが分かります。
また、グループだけを変更する「chgrp」というコマンドもあります。
「chown」と「chgrp」の詳しい使い方は、各コマンドのページで解説する予定です。
ファイルモードの変更方法
ファイルモードは、「chmod」コマンドで変更できます。以下は「/tmp/testfile」を「その他のユーザー」にも書き込みできるよう設定する例です。
$ touch /tmp/testfile
$ ls -l /tmp/testfile
-rw-r--r-- 1 lintaro lintaro 0 7月 31 02:19 /tmp/testfile
$ chmod o+w /tmp/testfile
$ ls -l /tmp/testfile
-rw-r--rw- 1 lintaro lintaro 0 7月 31 02:19 /tmp/testfile
$ rm /tmp/testfile
「chmod」コマンドの詳細については、以下のページで詳しく解説しています。
コメント