lsコマンドのパーミッションとは?
WindowsのファイルエクスプローラとLinuxのlsコマンドをそれぞれ詳細モードで表示させた場合、大きく異なるところがある。lsコマンドを「ls -l」のように-lオプションをつけて実行した場合、左側に-rw-rw-rw-やdrwxr-xr-xといった表示が出てくる。この部分だ。
上記のスクリーンショットは同じフォルダ(ディレクトリ)をファイルエクスプローラとls -lで表示させたものだが、ls -lの出力にはファイルエクスプローラには存在していない部分がある。下のスクリーンショットのように赤色で囲った部分がそれだ。
この部分はパーミッションと呼ばれている。Linuxが持っている基本的なリソース保護機能の設定状態を表示したものだ。
WindowsとLinuxのリソース保護モデルの違い
WindowsとLinuxではベースとしているファイルやフォルダ(ディレクトリ)に対するアクセス保護モデルが異なっているので、この部分は表示が異なっている。こればかりはそれぞれのやり方を学ぶしかない。ただ、似たような機能はどちらも提供しているので、何となくの感覚はつかめるはずだ。
まずは、Windows側から見てみよう。ファイルやフォルダを表示した状態で、プロパティを選択する。
プロパティダイアログからセキュリティのタグを選択する。
セキュリティを表示させると「アクセス許可」という部分に「フルコントロール」「変更」「読み取りと実行」「読み取り」「巻き込み」「特殊なアクセス許可」といった項目と『許可』『拒否』という項目が表示される。この部分がLinuxでのパーミッションと近い機能を担っている。
上記の画面は1つのファイルに関するアクセス許可を示したものだが、lsコマンドでも引数にファイルを指定すれば、同じように単一ファイルのパーミッションを表示させることができる。
上記のようなWindowsでファイルやフォルダを保護するメカニズムは「アクセス制御リスト」という考え方が基になっている。Windowsではファイルやフォルダ以外にもリソースへのアクセスにアクセス制御リストの概念が使われている。
一方、Linuxではファイルやディレクトリを保護する仕組みは「保護ドメイン」という考え方が基になっている(Linuxにもアクセス制御リストの機能は存在するのだが、基本的には保護ドメイン)。どちらの仕組みも似たようなことができるのだが、基本的な考え方がちょっと違っている。
パーミッションを読めるようになろう
それではLinuxでの保護の仕組みを把握しよう。Linuxではファイルへのアクセスを「ファイルの持ち主(オーナー)」「オーナーが参加しているグループのほかのユーザー」「それ以外のユーザー」という3種類の主体からのアクセスに分類している。オーナー、グループ、それ以外のユーザーといった具合だ。
Linuxではユーザーは必ず何らかのグループに参加している。このユーザーだけしか参加していないグループかもしれないし、管理者が参加するグループかもしれない。しかし、必ずグループに参加しているので、前述したような区別ができる。
そして、アクセスする主体ごとに読み込み許可、書き込み許可、実行許可、という3つの権限を設定する仕組みになっている。合計9個の設定が存在することになる。基本的にはこの9個の設定でファイルやディレクトリへのアクセスを保護する仕組みになっている。
例えば、先ほどコマンドを実行して表示された-rw-rw-rw-というのは、左から順に次のような設定を意味している(パーミッションの左から右は、表では上から下)。
表示 | 対象 | 意味 |
---|---|---|
ー | 通常のファイル | |
r | オーナー | ファイルの読み込みを許可 |
w | オーナー | ファイルへの書き込みを許可 |
ー | オーナー | ファイルは実行不可能 |
r | グループ | ファイルの読み込みを許可 |
w | グループ | ファイルへの書き込みを許可 |
ー | グループ | ファイルは実行不可能 |
r | それ以外 | ファイルの読み込みを許可 |
w | それ以外 | ファイルへの書き込みを許可 |
ー | それ以外 | ファイルは実行不可能 |
連続する10個のアルファベットのうち、最初の1文字はファイルであるかディレクトリであるかを示している。それ以降はオーナー、グループ、それ以外に対して3文字ずつが割り当てられている。読み込みはr、書き込みはw、実行はxで、-が表示されている場合はその権限が設定されていないことを意味している。ファイルに対するこの表記をまとめると次のようになる。
表示 | 対象 | 意味 |
---|---|---|
ー | 通常のファイル | |
rまたは- | オーナー | r:読み込み可能、-:読み込み不可能 |
wまたは- | オーナー | w:書き込み可能、-:書き込み不可能 |
xまたは- | オーナー | x:実行可能、-:実行不可能 |
rまたは- | グループ | r:読み込み可能、-:読み込み不可能 |
wまたは- | グループ | w:書き込み可能、-:書き込み不可能 |
xまたは- | グループ | x:実行可能、-:実行不可能 |
rまたは- | それ以外 | r:読み込み可能、-:読み込み不可能 |
wまたは- | それ以外 | w:書き込み可能、-:書き込み不可能 |
xまたは- | それ以外 | x:実行可能、-:実行不可能 |
ディレクトリに対してはrwxの意味が次のようになる。
表示 | 対象 | 意味 |
---|---|---|
d | ディレクトリ | |
rまたは- | オーナー | r:ディレクトリの読み込み可能(ディレクトリ下ファイルやディレクトリ一覧の取得可能)、-:ディレクトリの読み込み不可能(ディレクトリ下ファイルやディレクトリ一覧の取得不可能) |
wまたは- | オーナー | w:ディレクトリへの書き込み可能(ディレクトリ下に新しくファイルやディレクトリを作成可能)、-:ディレクトリへの書き込み不可能(ディレクトリ下に新しくファイルやディレクトリを作成不可能) |
xまたは- | オーナー | x:ディレクトリ下へ移動可能、-:ディレクトリ下へ移動不可能 |
rまたは- | グループ | r:ディレクトリの読み込み可能(ディレクトリ下ファイルやディレクトリ一覧の取得可能)、-:ディレクトリの読み込み不可能(ディレクトリ下ファイルやディレクトリ一覧の取得不可能) |
wまたは- | グループ | w:ディレクトリへの書き込み可能(ディレクトリ下に新しくファイルやディレクトリを作成可能)、-:ディレクトリへの書き込み不可能(ディレクトリ下に新しくファイルやディレクトリを作成不可能) |
xまたは- | グループ | x:ディレクトリ下へ移動可能、-:ディレクトリ下へ移動不可能 |
rまたは- | それ以外 | r:ディレクトリの読み込み可能(ディレクトリ下ファイルやディレクトリ一覧の取得可能)、-:ディレクトリの読み込み不可能(ディレクトリ下ファイルやディレクトリ一覧の取得不可能) |
wまたは- | それ以外 | w:ディレクトリへの書き込み可能(ディレクトリ下に新しくファイルやディレクトリを作成可能)、-:ディレクトリへの書き込み不可能(ディレクトリ下に新しくファイルやディレクトリを作成不可能) |
xまたは- | それ以外 | x:ディレクトリ下へ移動可能、-:ディレクトリ下へ移動不可能 |
Linuxのこの考え方は最初はわかりにくいと思うが、慣れてくるとシンプルでわかりやすいモデルに思えてくる。
WindowsではGUIからアクセス許可を変更できる。LinuxでもGUI環境を使えば同じことができる。コマンドではrw-rw-rw-を666と表現したり、rwxr-xr-xを755と表現したりして指定する。この辺りは次回以降に説明しようと思う。慣れないと難しいもののように思えるが、慣れてくればシンプルでわかりやすいモデルであることがわかってくるだろう。
まずはオーナー、グループ、それ以外、という3つの区分けと、読み込み許可、書き込み許可、実行許可、という3種類の許可設定があるということだけでも把握しておいていただけるとよいだろう。