Windowsでアクセス許可を変更する

WindowsとLinuxとでは、ファイルといったリソースを保護する仕組みが異なっている。Windowsではアクセス制御リストという方式が、Linuxでは保護ドメインという方式が使われている。なお、Linuxはアクセス制御リストも提供しているのでややこしいのだが、とりあえずLinuxのリソース保護機構の基本は保護ドメインだと思っておいてもらえればと思う。

この連載は技術詳細を解説するものではないので、これ以上保護機構の詳しい説明はしない。根幹の考え方は異なるものの、どちらも似たようなことはできる、ということだけは覚えておいてもらえればと思う。

  • ファイルエクスプローラでファイルを選択してからメニューを表示させプロパティを選択

    ファイルエクスプローラでファイルを選択してからメニューを表示させプロパティを選択

  • セキュリティタブから編集を選択

    セキュリティタブから編集を選択

  • アクセス許可を編集

    アクセス許可を編集

Windowsであれば上記の画面のような手順でアクセス許可を変更することができる。今回はこれをLinuxで実行する方法を紹介する。

Linuxでパーミッションを変更する

まずはパーミッションのおさらいだ。パーミッションはrwxr-xr-xのような文字列で表現され、それぞれ3文字ずつがオーナ、グループ、その他に対する権利を表している。イメージとしてはこの文字列がパーミッションだと認識しておくとよいかもしれない。表にまとめると次のようになる。

表示 対象 意味
rまたは- オーナ r:読み込み可能、-:読み込み不可能
wまたは- オーナ w:書き込み可能、-:書き込み不可能
xまたは- オーナ x:実行可能、-:実行不可能
rまたは- グループ r:読み込み可能、-:読み込み不可能
wまたは- グループ w:書き込み可能、-:書き込み不可能
xまたは- グループ x:実行可能、-:実行不可能
rまたは- それ以外 r:読み込み可能、-:読み込み不可能
wまたは- それ以外 w:書き込み可能、-:書き込み不可能
xまたは- それ以外 x:実行可能、-:実行不可能

このパーミッションはchmodというコマンドで変更する。chmodコマンドの主な使い方は次のとおり。

chmodコマンドの主な使い方

chmod モード パス

モードには数字で指定するやり方と、文字列で指定するやり方の2つがある。このモードの部分にどのようにパーミッションを変更するのかを指定するのだが、慣れないとちょっとわかりにくい。まずは、数字を使う方法を説明する。

数字を指定する方法では、rwxr-xr-xといった文字列を数字で表現し、それをchmodコマンドに指定する。例えば、rwxr-xr-xは755となる。これは次のような規則で成り立っている。まず、rwxr-x-r-xをrwx、r-x、r-xの3つに分ける。分けた中でそれぞれ数字を加算する。数字は次のようにrには4、wには2、xには1が割り当てられている。権限がない場合は0だ。rwxは4+2+1で7、r-xは4+0+1で5となる。

パーミッション 対応する数字
rまたは- 4または0
wまたは- 2または0
xまたは- 1または0
rまたは- 4または0
wまたは- 2または0
xまたは- 1または0
rまたは- 4または0
wまたは- 2または0
xまたは- 1または0

よくわからない場合、次の表を見てほしい。パーミッションがどのようなモードとして表現できるのかがわかるのではないかと思う。

パーミッション モード 計算方法
rw-r--r-- 644 4+2+0, 4+0+0, 4+0+0
rwxr-xr-x 755 4+2+1, 4+0+1, 4+0+1
r-xr-xr-x 555 4+0+1, 4+0+1, 4+0+1
r--r--r-- 444 4+0+0, 4+0+0, 4+0+0
rw------- 600 4+2+0, 0+0+0, 0+0+0
r-------- 400 4+0+0, 0+0+0, 0+0+0
rwxrwxrwx 777 4+2+1, 4+2+1, 4+2+1

慣れてくると数字で表現するほうが簡単になるが、最初は理解しにくいかもしれない。その場合は、文字で指定するシンボリックモードでの指定を覚えておくとよい。シンボリックモードはug+rwのような書き方をする方法で、[対象][アクション][パーミッション]といった書式になっている。

シンボリックモード 内容 備考
シンボリックモードの書式 [対象][アクション][パーミッション]
[対象] u, g, o, a 指定無しはaに相当
[アクション] +, -, =
[パーミッション] r, w, x 指定なしは全禁止に相当

これも実例を見てもらうとよいと思う。次のように、例えばu+rwならオーナに読み込みと書き込み権限を与えるという意味になるし、go-wならグループおよびその他から書き込み権限を剥奪、といった意味になる。+が追加、-が剥奪、=がその値に設定、といった感じだ。

シンボリックモード 内容
u+rw オーナに読み込み権限と書き込み権源を付与
go-w グループおよびその他から書き込み権限を剥奪
a=r オーナ、グループ、その他に対して読み込みだけ許可
g=u-w グループをユーザと同じにするが、書き込みは剥奪
u=rwx,go=rx rwxr-xr-xに設定
u=rwx,go=rx rwxr-xr-xに設定

シンボリックモードの指定は少々複雑につなげることが可能で、上記の表にまとめた以外の書き方もできる。例えば、モード755は、シンボリックモードではu=rwx,go=rxとも書けるし、u=rwx,go=u-wとも書ける。Linuxでchmodコマンドを実行すると次のようになる。実行するごとにパーミッションが変更されていることが確認できるだろう。なお、[対象]におけるaはugoを指定したのと同じだ。

  • Linuxにおけるchmodコマンドの実行例

    Linuxにおけるchmodコマンドの実行例

簡単な指定であればシンボリックモードでも用が足りるのだが、複雑になってくるとモードのほうがシンプルでわかりやすい。最終的にはモードで指定できるようになっておこう。

パーミッションやchmodはもっといろいろできる

前回と今回取り上げたパーミッションは本当に基本的なものだけで、スティッキービットやsetuidビットやsetgidビットは紹介していない。パーミッションではスティッキービットやsetuidビット、setgidビットを表現する方法があるし、chmodのモードやシンボリックモードにも対応する指定方法が存在している。しかし、これらはセキュリティを強化する時に必要になってくる機能で、ユーザーとして利用する場合は知らなくても大丈夫だ。

chmodコマンドはディレクトリに対して再帰的に実行することも可能だ。つまり、ディレクトリ以下に存在するファイルに対して一気にパーミッションを変更することができる。また、Windowsとの比較では必要性が低いので取り上げていないが、Linuxにはchownという持ち主を変更するコマンドが存在している。chownで持ち主を変更し、chmodでパーミッションを変更するといった具合だ。

Linuxではこのように機能別にコマンドを使うことでさまざまな操作ができるようになっている。使い方を覚えてしまえば、実に簡単に操作できることがわかるだろう。パーミッションはファイル操作の基本でもあるので、まず覚えておきたいところだ。