ファイルシステムの管理
Linuxシステムの根幹をなすファイルシステムは、単なる操作だけでなく動作原理まで理解するのが良いでしょう。【連載コラム:Linuxシステム管理標準教科書を読む(6)】
Linuxの基本的なスキルを習得したら、Linuxサーバーをシステムとして長期に運用管理していくためのスキルを身につけるのはいかがでしょうか。このコラムでは、「Linuxシステム管理標準教科書」の全体調整を担当した筆者が改めて大切なポイントを解説していきます。
ファイルシステムは、Linuxのシステムとしての根幹を成すものであり、しっかりとした理解が必要です。システムが動作しない、といったトラブルの大きな原因の一つがファイルシステム絡みの問題であり、適切なアクセス権限が設定されていないなどの理由によるものです。
単にファイルシステムを操作できるだけでなく、どのような動作原理なのか、というレベルまで理解しておくと、トラブルが起きた場合でも適切に対処ができるでしょう。
目次
アクセス権限の基本的な考え方
ファイルシステムのアクセス権限の基本的な考え方は、あるユーザーがあるファイルにアクセスできるかどうか、ということを制御する仕組みです。ユーザー単体で制御すると煩雑になるため、ユーザーを複数束ねたグループや、ユーザーやグループに当てはまらないその他のユーザーという単位での制御も行っていますが、基本はユーザーです。
また、ファイルは複数のファイルを束ねる機能を持つディレクトリや、バイナリやスクリプトなどの実行ファイル、その他特殊ファイルなどもありますが、アクセスが許可された後、どのような動作を行うのか、という違いなので、アクセス権限の基本的な考え方からは一旦外しておいて構いません。
ユーザーとはプロセスである
ユーザーがファイルに対してアクセスするということは、そのユーザーが実行したプロセスがファイルにアクセスするということです。そのため、プロセスには実行ユーザーと実効ユーザーという考え方が必要になります。
実行ユーザーと実効ユーザー
どちらも日本語にすると「じっこう」ですが、意味が異なります。
実行ユーザーは、英語では「real user」となり、そのプロセスを呼び出したユーザーとなります。
実効ユーザーは、英語では「effective user」となり、ファイルへのアクセス権限の判定に使うユーザーとなります。
通常、実行ユーザーと実効ユーザーは同一ですが、異なるケースがあります。それはsudoコマンドを使った場合と、setUIDされている場合です。これらは例外ケースなので、基本的に実行ユーザー=実効ユーザーと考えておけばいいでしょう。
ディレクトリのアクセス権限の考え方
ディレクトリは、複数のファイルやディレクトリを整理してまとめる役割を担っていますが、これもアクセス権限で制御されています。通常のファイルと異なり、ディレクトリは実行権限を必要としますが、これは以下のように考えると良いでしょう。
ディレクトリは特殊なファイルである
ディレクトリというと、GUIになれているとフォルダー型のアイコンを想像してしまいますが、OS上ではディレクトリは「ファイルやディレクトリを内包できる特殊なファイル」と考えるとよいでしょう。そのアクセス権限には以下のような働きがあります。
ディレクトリの読み書き権限
ディレクトリの読み取り権限は、ディレクトリの中に内包されているファイルの情報を読み取れるということになります。ディレクトリの書き込み権限は、ディレクトリの中に内包したいファイルの情報を書き込めるということになります。
内包するファイル自体は、実体としては別途存在し、そのファイルにたどり着くためのインデックス情報だけをディレクトリに書き込んでいる、と考えます。
ディレクトリの実行権限
ファイルを内包する特殊なファイルの実行権限というのは若干考えにくい概念ですが、これはプロセスの実行などと異なり、そのディレクトリをカレントディレクトリにできるという動作と対応していると考えます。そのため、ディレクトリは基本的に実行権限を伴います。
そうしないとカレントディレクトリにすることができず、その中に内包されているファイルにアクセスできなくなるため、ディレクトリの役割を果たせなくなるからです。役割が果たせない≒実行できない、と考えると、逆に意味が理解しやすくなるかもしれません。
ディレクトリに実行権限だけを付与する
逆に、ディレクトリの本質的な役割を実現するには実行権限があればよいことになります。そのため、読み書きの権限がなく、実行権限だけがあるディレクトリを作ることもできます。こうすると、ディレクトリに含まれるファイルは分からず、書き込むこともできず、ただそのディレクトリの中にあるファイルにはアクセスできる、という特殊なディレクトリを作成することができます。
Webサーバーのユーザーホームディレクトリなど、限られた状況でしか必要とされない設定ですが、ディレクトリのアクセス権限の考え方が理解できていれば、なぜそのような設定を行うかわかるでしょう。
- 筆者紹介
宮原 徹 氏
Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。
バックナンバー
第5回:サービスの管理
第4回:ネットワークの管理
第3回:root権限の管理
第2回:SSH
第1回:ユーザーとグループの管理