リソースの保護機能

最近のOSには、ファイルなどのリソースを保護する機能が備わっている。それは、特定の処理だけを禁止するものだったり、いわゆるファイル・パーミッションだったり、アクセス制御リストだったり、ケーパビリティと呼ばれるものだったりする。

こうしたセキュリティ機能には、考え方や視点によっていくつかの種類がある。例えば、強制アクセス制御(MAC:Mandatory Access Control)や任意アクセス制御(DAC:Discretionary Access Control)、ロールベース・アクセス制御(RBAC:Role-Based Access Control)といった具合だ。実装ごとに名前が異なっていたり、同じような名前でも機能が微妙に違っていたりすることもある。

本連載の趣旨から考えると、この辺りの説明をきちんとしようとすると読者は去っていってしまうだろう。かと言って説明を簡略化すると、誤解を招く可能性がある。どうしたものかと思案したのだが、この連載ではあくまでも「管理者がコマンドを使ってシステムを管理する」という前提で説明していこうと思う。より高位の概念が出てきた際には、必要に応じて補足することにする。

アクセス権限の読み解き方

前回までに、ファイルやディレクトリの詳細情報を表示するコマンドとして、「ls -l」と「ls -al」を紹介した。例えば、ホームディレクトリで「ls -al」を実行すると、次のような結果が得られる。

ホームディレクトリで「ls -al」を実行。すべてのファイルの詳細情報が表示される

表示の左側にあるアスキー・アートのような部分に注目してほしい。これは、各行にあるファイルやディレクトリへのアクセス権限情報を表すものだ。


drwx------
drwxr-xr-x
-rw-------
-rw-r--r--
-rw-r--r--
-rw-r--r--
drwx------

例えば、「-rw-r—r—」と書いてある行を見てみよう(この行は3行ある)。これは、「-」、「rw-」、「r—」、「r—」という4つのパートに分けて解読する。最初の1文字目はこれがどういったリソースなのかという種類を表し、以降の3つはこのリソースにアクセスするための権限を表すのだ。

まず1文字目の「-」は、このリソースが通常のファイルであることを意味している。それ以降の3つは、それぞれ「このファイルの持ち主」、「持ち主の所属するグループに所属しているほかのユーザー」、「それ以外のユーザー」に対するアクセスの許可内容を表す。

LinuxやBSDなどでは、OSを操作するユーザーを「ユーザー」と「グループ」という2つのくくりで区別している。ユーザーは必ず何らかのグループに属しているため、アクセス権限も「ユーザー」、「ユーザーの所属しているグループのユーザー」、「それ以外のユーザー」の3種類に分けて設定しているわけだ。これが、Linux/BSD系の基本的なファイルの保護機能である。

利用者に「ユーザー」と「グループ」という2つの側面を持たせることで、原理的にさまざまな管理が可能になる(ただし、グループの数が増えてくると、この方法だけでは現実的に厳しいケースも出てくる。まあそれはそれ、その時には別の機能を使うのだ)。

持ち主とグループと、それ以外

今回は、ファイルやディレクトリなどのリソースには持ち主(であるユーザー)がいること、その持ち主は何らかのグループに所属しているので、「ユーザー」、「ユーザーの所属しているグループのユーザー」、「それ以外のユーザー」という3種類に分けてアクセス権限が設定されていることが理解できればよいと思う。

「-rw———」は、ユーザーにだけ操作が許可されている典型例だ

これを意識しながら、「ls -al」でいろいろなディレクトリを見て回ってみよう。ルートディレクトリを見てみれば、管理者ユーザー「root」がそれを保有しており、ほかのユーザーには何の権限も許可されていないということがわかるはずだ。

ルートディレクトリの中身。それぞれに適切なパーミッションが設定されている

Linuxや*BSD、Mac OS XのようなUNIX系の保護機能を採用しているOSは、システム全体がこの仕組みで設定されている。もちろん、最近の実装についてはその限りではなく、ほかにいくつもの保護機能が用意されていることもあるのだが、基本的にはこの仕組みがベースとなっている。

今回のおさらい

今回のおさらいは、次のとおりだ。

  • ファイルやディレクトリには、持ち主(であるユーザー)がいる
  • システムは「持ち主」、「持ち主の所属しているグループの人」、「それ以外の人」という区別をして、対象となるファイルやディレクトリへのアクセスを制御する
  • これが、Linuxや*BSD、Mac OS XのようなUNIX系のOSにおける基本的な保護機能である

この先はちょっと概念的な話が多くなってくるので、今回はここまでにしておこう。ユーザー、グループ、それ以外。この3つに区別してアクセス権限を与えているということだけ押さえてもらえれば、今回はOKだ。