【初心者向け】パーミッションの簡単解説
システムソリューション部の中川です。
先日、パーミッションに関する問い合わせがあったので
今回の記事では自分なりに情報を調べてまとめてみました。
パーミッションとは
Linux上のディレクトリやファイルには、その所有権が決められています。
ディレクトリやファイルを操作するための権限がパーミッションです。
アクセス権とも言いますが、本記事ではパーミッションで統一していきます。
パーミッションは次のように、権限・対象ユーザー・表記が決められています。
権限 | 権限の文字表記 | 権限の数字表記 | ユーザー |
---|---|---|---|
読み込み権限 | r | 4 | 所有ユーザー |
書き込み権限 | w | 2 | 所有グループに所属するユーザー |
実行権限 | x | 1 | その他のユーザー | 権限なし | - | 0 |
パーミッション確認
実際にパーミッションを確認していきます。
対象のディレクトリ・ファイルに対し、ls -lを実行すれば確認できます。
例として、/home/lpic/index.htmlファイルを確認してみます。
ls -l /home/lpic/index.html total 8 -rw------ 1 lpic linux 16 Jan 14 01:16 index.html drwx------ 2 lpic linux 4096 Jan 14 01:17 test
権限の意味を解説していきます。
ls -l /home/lpic/index.html -rw------ 1 lpic linux 16 Jan 14 01:16 /home/lpic/index.html
lsコマンドの実行結果のうち、一番左の項目がパーミッションにあたります。
標準では全10文字で、1文字目を除いた部分でユーザーごとの権限が表示されます。
所有ユーザー(lpic)の権限=rw-
⇒catコマンドなどでファイルを表示したり、viコマンドで内容を編集することができます。
所有グループ(linux)の権限=---
⇒ファイル表示や編集、アクセスはできません。
その他のユーザーの権限=---
⇒ファイル表示や編集、アクセスはできません。
次に/home/lpic/testディレクトリの場合を見ていきます。
ディレクトリ単体を調べるには、lsコマンドに-ldオプションを付けます。
ls -ld /home/lpic/test drwx------ 2 lpic linux 4096 Jan 14 01:17 test
対象がディレクトリのため、パーミッションの先頭文字が「d」と表示されます。
testディレクトリのパーミッションの意味は次のとおりです。
所有ユーザー(lpic)の権限=rwx
⇒ディレクトリ内のファイル一覧表示、ファイル作成、ディレクトリ内ファイルにアクセスができます。
所有グループ(linux)の権限=---
⇒ディレクトリ内のファイル一覧表示、ファイル作成・削除、ファイルにアクセスはできません。
その他のユーザーの権限=---
⇒ディレクトリ内のファイル一覧表示、ファイル作成・削除、ファイルにアクセスはできません。
所有ユーザーで操作する
実際に権限があるユーザーで操作してみます。
読み込み権限があるlpicユーザーで、indexファイルをcatします。
[lpic@loclhost ~ ]$ cat /home/lpic/index.html Thu Jan 18 11:08:57 JST 2018
読み込み権限があるlpicユーザーで、testディレクトリを一覧表示します。
[lpic@loclhost ~ ]$ ls -ld /home/lpic/test/ drwx------ 2 lpic linux 4096 Jan 14 01:17 /home/lpic/test/
読み込み権限があるlpicユーザーで、testディレクトリに移動します。
[lpic@loclhost ~ ]$ cd /home/lpic/test/ [lpic@loclhost test ]$
⇒いずれの実行結果も成功しました!
非所有ユーザーで操作する
次に権限がないユーザーで実行してみるとどうなるかを見ていきます。
読み込み権限がないlpic2ユーザーで、indexファイルをcatします。
[lpic2@loclhost ~ ]$ cat /home/lpic/index.html cat: /home/lpic/index.html: Permission denied
書き込み権限がないlpic2ユーザーで、testディレクトリを一覧表示します。
[lpic2@loclhost ~ ]$ ls -ld /home/lpic/test/ ls: cannot access /home/lpic/test/: Permission denied
実行権限がないlpic2ユーザーで、testディレクトリに移動します。
[lpic2@loclhost ~ ]$ cd /home/lpic/test/ bash: cd: /home/lpic/test/: Permission denied
⇒権限がないので、「Permission denied(アクセス拒否)」と返ってきます。
所有ユーザーと所有グループ以外で操作するには
lpic2ユーザーがを操作できるようにするための方法には、いくつか方法があります。
・対象のディレクトリ・ファイルの所有者を変更する。
・所有グループのパーミッションを変更した上で、所有グループにlpic2ユーザーを追加する。
・対象のディレクトリ・ファイルのパーミッションを変更する。等
こういった作業する場合は、対象環境のパーミッションを変更して対応することが多いです。
実際に実行してみます。
まず、index.htmlファイルを操作できるユーザーでchmodコマンドを実行します。
注意することは、対象ファイルの上位ディレクトリ(今回は/home/lpic)にも
その他ユーザーに権限を付与しないと操作できません。
[lpic@loclhost ~ ]$ chmod 707 /home/lpic/ [lpic@loclhost ~ ]$ chmod 706 /home/lpic/index.html
chmodコマンドは、パーミッションを変更できるコマンドです。
-Rオプションを付けると、対象ディレクトリ配下のファイルも一緒に変更を反映できますが
実行権限まで付与しないので、今回はその都度変更しました。
変更後のパーミッションを見てみます。
[lpic@loclhost ~ ]$ ls -l /home/lpic/ total 8 -rw----rw- 1 lpic linux 29 Jan 18 11:08 index.html drw----rw- 2 lpic linux 4096 Jan 14 01:17 test
lpic2ユーザーとしてindex.htmlをcatします。
[lpic2@loclhost ~ ]$ cat /home/lpic/index.html Thu Jan 18 11:08:57 JST 2018
今回はファイルの内容が表示できました。
正しく権限変更が出来たということになります。
最後に
権限を正しく付与しないと、考えられる影響の例として
ブラウザ上で公開するファイルに一般(その他)ユーザーに読み込み権限がない場合には
アクセスしても「Forbidden(403エラー)」を返す、なんてことも考えられます。
とはいえ、設定ファイル等の重要なファイルを
誰でも編集・実行できるような設定は、セキュリティ面から考慮しても良くありません。
サーバを運用する上で、ファイルごとに適した権限を設定することで
より安全・最適なサイト作りに近づきます。
お客様が目指すサイト、もしくは安定したサーバ稼働を提供する手段の一つとして
パーミッションに関しても理解を深めていきたいです。
次の記事では、今回の記事に関連した内容で
セットUIDとセットGID、スティッキービットについてまとめたいと思います。