はじめる人のびぎねっと。

プライバシーポリシー

読み物

Linux基礎

パーミッションとは?(その2)

ディレクトリのパーミッションについて

ディレクトリのパーミッションの意味は、ファイルと異なり以下のようになります。

r 読み込み(Read) そのディレクトリの情報を見ることができるか (そのディレクトリに対してlsコマンドが実行できるか ただし、「実行(x)」パーミッションが設定されていないと「-l」オプションは使えません)
w 書き込み(Write) そのディレクトリに新しいファイルを作成することができるか (同時に「実行(x)」パーミッションの設定が必要です)
x 実行(eXecute) そのディレクトリをカレントディレクトリにできるか (そのディレクトリに対してcdコマンドが実行できるか)

実際にディレクトリに対するパーミッションを確認してみましょう。

確認環境の作成

ディレクトリ・パーミッションの確認のため、ユーザーのホームディレクトリに「testdir」ディレクトリを作成し、そのディレクトリ内に「testfile」ファイルを作成します。

「testdir」ディレクトリを作成する

$ mkdir /home/user/testdir

「testdir」ディレクトリ内に「testfile」ファイルを作成する

$ touch testdir/testfile

作成できたことを確認する

$ ls testdir/
testfile
ディレクトリのパーミッションが「全て禁止(-)」の設定の場合(---)

まずは一切のパーミッションが設定されていない場合、どのようなエラーが出るかを確認します。

ディレクトリのパーミッションを全て禁止に設定し、確認する

$ chmod u-rwx testdir
$ ls -l
d---rwxr-x 2 user user 4096 2月 7 16:42 testdir

ディレクトリ内の情報が見れるかどうかを試みる

$ ls testdir/
ls: testdir/: 許可がありません

lsコマンドでディレクトリ内の情報を見ることはできませんでした。

ディレクトリ内の詳細な情報が見れるかどうか試みる

$ ls -l testdir/
ls: testdir/: 許可がありません

lsコマンドにオプション-lをつけても、ディレクトリ内の詳細な情報を見ることはできません。

cdコマンドで、ディレクトリに入れるか試みる

$ cd testdir/
bash: cd: testdir/: Permission denied

「testdir」ディレクトリをカレントディレクトリにすることはできません。

ディレクトリ内に新規ファイルが作成できるか試みる

$ touch testdir/newfile
touch: creating `testdir/newfile': 許可がありません

「testdir」ディレクトリ内に新規ファイルを作成することはできません。

このように、パーミッションがないとディレクトリに対しての操作が制限されてしまいます。それでは、rwx、それぞれのパーミッションを設定することにより、どのような操作ができるようになるかを見てみましょう。

ディレクトリに「読み込み(r)」のパーミッションのみ設定した場合(r--)

ディレクトリに読み込みのパーミッションのみ設定し、確認

$ chmod u-wx testdir/
$ ls -l
dr--rwxr-x 2 user user 4096 2月 7 16:42 testdir

ディレクトリ内の情報を見ることができるかどうか試みる

$ ls testdir/
ls: testdir/testfile: 許可がありません

ディレクトリに読み込みパーミッションが設定されたので、「testdir」ディレクトリに対してのエラーは発生しませんでしたが、ディレクトリ内の「testfile」ファイルに対するエラーが発生しました。

ディレクトリ内の詳細な情報を見ることができるかどうか試みる

$ ls -l testdir/
ls: testdir/testfile: 許可がありません
合計 0

上記のlsコマンドの場合と同じく、-lオプションを付けてもディレクトリ内のファイルに対してパーミッションのエラーが発生します。

このように、読み取り実行だけではディレクトリ内の情報を正しく見ることができません。そこで、実行パーミッションを追加で設定してみます。

ディレクトリに「実行(x)」のパーミッションを追加設定した場合(r-x)

ディレクトリに実行パーミッションを追加設定し、確認

$ chmod u+x testdir
$ ls -l
dr-xrwxr-x 2 user user 4096 2月 7 16:42 testdir

ディレクトリ内の情報が見れるかどうか試みる

$ ls testdir/
testfile

ディレクトリに「実行」パーミッションを追加したことによって、ファイルに対するエラーが出なくなり、ディレクトリ内の情報を正しく見ることができました。

ディレクトリ内の詳細な情報が見れるかどうか試みる

$ ls -l testdir/
合計 0
-rw-rw-r-- 1 user user 0 2月 6 18:11 testfile

こちらの場合も実行パーミッションの追加で、ファイルの詳細な情報を見ることができるようになりました。

このように、ディレクトリ内の情報を正しく見るためには、読み取りパーミッションだけでなく実行パーミッションが必要となります。

実行パーミッションには、別の意味もあります。

ディレクトリをカレントディレクトリにできるか試みる

$ cd testdir/
$ pwd
/home/user/testdir/

実行パーミッションを設定したことによって、「testdir」ディレクトリをカレントディレクトリにすることができました。

実行パーミッションは、読み取りパーミッションとの組み合わせでディレクトリ内の情報を読み取れるようにするだけでなく、そのディレクトリをカレントディレクトリに出来るようにする意味も持っています。

ディレクトリ内に、新規に「newfile」ファイルが作成できるか試みる(「testdir」ディレクトリ内で作業)

$ touch newfile
touch: creating `newfile': 許可がありません

ディレクトリに書き込みパーミッションが設定されていないため、ファイルの新規作成を行うことができませんでした。

次に、書き込みパーミッションについて確認してみます。

※ ここでカレントディレクトリをホームディレクトリに戻します。

ディレクトリに「書き込み(w)」のパーミッションを追加設定した場合(rwx)

ディレクトリに書き込みパーミッションを追加設定し、確認

$ chmod u+w testdir/
$ ls -l
drwxrwxr-x 2 user user 4096 2月 6 18:17 testdir

ディレクトリの中に、新規に「newfile」ファイルが作成できるか試る

$ touch testdir/newfile
$ ls testdir/
newfile testfile

ディレクトリに書き込みパーミッションを設定したことによって、ファイルの新規作成を行うことができました。

「newfile」の削除を試み、確認

$ rm testdir/newfile
$ ls testdir/
testfile

書き込みパーミッションが設定されていると、ファイルの削除を行うことができます。

ディレクトリの書き込みパーミッションを解除し、確認(r-x)

$ chmod u-w testdir
$ ls -l
dr-xrwxr-x 2 user user 4096 2月 8 11:31 testdir

「testfile」の削除を試みる

$ rm testdir/testfile
rm: cannot unlink `testdir/testfile': 許可がありません

書き込みパーミッションが設定されていないと、ファイルの削除は行えません。

このように、書き込みパーミッションが、ディレクトリ内のファイルの作成や削除に関わっていることが分かります。

ディレクトリのパーミッションを「実行(x)」禁止に設定した場合(rw-)

ディレクトリに書き込みパーミッションを設定、実行パーミッションを解除し、確認

$ chmod u+w-x testdir/
$ ls -l
drw-rwxr-x 2 user user 4096 2月 8 11:31 testdir

ディレクトリの中に、新規「newfile」ファイルが作成できるか試みる

$ touch testdir/newfile
touch: creating `testdir/newfile': 許可がありません

書き込みパーミッションは設定されていますが、実行パーミッションが設定されていないため書き込みできませんでした。

このように、ディレクトリに対しては「実行」の許可・不許可により、「読み込み」や「書き込み」にも制限をかけることができます。

ディレクトリのパーミッションにおいては、実行パーミッションが非常に重要な役割を持っています。実行パーミッションが設定されていない場合、読み込み、書き込みの動作が正常に動作しないケースがあるので注意が必要です。

まとめ

このようにしてファイルやディレクトリにパーミッションを設定をすると、間違ってファイルを上書きしたり、削除してしまったりすることがなくなります。

逆に、読み込みの許可や書き込みの許可を上手く使えば、グループでファイルを共有するのにも役立ちます。

ホームディレクトリのパーミッションの設定を変える場合は、不用意に許可を与えてしまうと、大切なファイルを見られてしまったり、書き換えられてしまうことにもなりかねませんので十分に注意が必要です。

付録

パーミッションには、もうひとつ設定方法があります。 r、w、x を2進数に置き換え、さらに8進数に変換し、数字を用いる方法です。(細かい説明は割愛します。)

モード 8進数
---0
--x1
-w-2
-wx3
r--4
r-x5
rw-6
rwx7

例)パーミッションの確認のために作った、「newfile」のパーミッションを全てのユーザーが全て許可、と設定する場合

$ chmod 777 newfile   パーミッションの設定
$ ls -l newfile     パーミッションの確認
-rwxrwxrwx 1 user user 11 1月 17 17:40 newfile
(-rwxrwxrwx = 777)

数字3桁でパーミッションを表示し、左側が「所有ユーザー」、真ん中が「グループユーザー」、右側が「その他のユーザー」を表します。

前のページへ

このページのTOPへ