パーミッションについて

LinuxのようなUNIX系OSは、それらがマルチタスク方式だけではなくマルチユーザー方式であるという点において、他のコンピューターシステムとは異なります。

どういうことかもっと正確に言うと、同時に複数のユーザーがそのコンピューターを操作できるということです。
あなたのコンピューターが1つのキーボードとディスプレイしかなかったとしても、それはまだ更に1人以上のユーザーが使用可能です。
例えば、もしあなたのコンピューターがネットワークあるいはインターネットに繋がっているとして、リモートユーザーがssh(secure shell)を経由して、そのコンピューターを使用することができます。
実際に、リモートユーザーがグラフィカルアプリケーションを実行したり、その結果をリモートコンピューターに出力することも可能です。
 X Windowシステムが、これをサポートしています。

UNIX系システムの複数ユーザー許容性という特徴は、OSの設計と密接に結びついています。
もしあなたが、UNIXが作り出された環境を覚えていれば、これは容易に想像できるはずです。
コンピューターが個人のものになる遥か昔、コンピューターは大きく高価で、ある所に集中していました。
巨大なメインフレームコンピューターから形成される、ある大学のコンピューターシステムは、キャンパスの隅から隅までキャンパスやターミナルにあるビルの中に設置され、それぞれが巨大な中央コンピューターに接続されていました。
コンピューターが、同時に多数のユーザーをサポートしていたということでしょう。

これをもう少し実用的にするために、ユーザーをそれぞれ他のユーザーから守るため、やり方を工夫しなければなりませんでした。
結局、1人のユーザーのアクションがコンピューターを破壊することは許容できないため、他のユーザーに属するファイルも操作することはできなくする必要がありました。

このレッスンでは、以下のコマンドについてご紹介します。

・chmod — modify file access rights
・su — temporarily become the superuser
・sudo — temporarily become the superuser
・chown — change file ownership
・chgrp — change a file’s group ownership

ファイルパーミッション

Linux系システムでは、それぞれのファイルやディレクトリへのアクセス権は、ファイルのオーナー、関連するユーザーグループのメンバー、そして他の皆へ割り当てられる必要があります。
権限は、ファイルを読んだり書き込んだり、プログラムとして実行するために割り当てることが可能です。

ファイルに設定されているパーミッションを見るには、 lsコマンドを使えばいいです。
例として、/binディレクトリにあるbashプログラムのものを見てみましょう。

ここでは、以下のことが確認できます。

・”/bin/bash”が、”root”ユーザのものであるということ。
・管理者がこのファイルを読んだり、実行できること。
・ファイルが”wheel”グループによって、所有されていること。
・”wheel”グループのメンバーも、このファイルを読んだり実行できること。
・全ての人が、このファイルを読んだり実行できるということ。

下の図では、どのようにして最初の部分を解釈するか確認することができます。最初の部分はファイルタイプを示す文字を含み、続いて3つの文字の並びが3セットあり、それぞれオーナー、グループ、他の皆に対する読み込みと書き込み、実行の権限について教えてくれています。

chmod

chmodコマンドは、ファイルやディレクトリのパーミッションを変更するために使われます。
これを使うには、変更したいファイルやディレクトリと望ましい権限を指定すればいいです。
パーミッションの指定には、2つの方法があります。
ここでは、そのうちの片方の8進数表記と呼ばれる方法に焦点を当てます。

パーミッションの設定は、ビットの連続したものだと考えれば簡単です。
ここで、実際にどのようなものか見てみましょう。

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000
rwx = 111 in binary = 7
rw- = 110 in binary = 6
r-x = 101 in binary = 5
r-- = 100 in binary = 4

もし、これら3つ(オーナー、グループ、その他)のパーミッションをそれぞれ1桁の数字で表せば、可能なパーミッション設定を表現するのに非常に便利な方法を知っているということになります。
例えば、”some_file”というファイルをオーナーは読み書き可能、しかしそれ以外には非公開としたい場合、以下のように入力します。

以下に、一般的に知られている設定の数字を網羅したものを載せておきます。
“7”で始まるものはプログラムでつかわれ、残りはその他の種類のファイルに使われます。

・777 — (rwxrwxrwx) 何の制限もなく、誰もがどんなことでもできます。あまり望ましい設定ではありません。
・755 — (rwxr-xr-x) オーナーは、ファイルを読み書きしたり実行可能です。それ以外の人は、読むか実行するだけです。これが、全てのユーザーで最もよく使われる設定です。
・700 — (rwx — — — ) オーナーは、読み書き及びファイルの実行が可能です。それ以外の人は、何もできません。オーナーだけがそのプログラムを扱い、他者には秘密にしたい場合に便利な設定です。
・666 — (rw-rw-rw-) 全てのユーザーが、読み書き可能です。
・644 — (rw-r — r — ) オーナーは読み書き可能で、その他のユーザーは読むだけです。皆が閲覧するデータファイルではよくある設定で、オーナーだけが変更できます。
・600 — (rw — — — -) オーナーのみ読み書き可能で、それ以外の人は何もできません。オーナーが他社に秘密にしたいデータファイルに置いて、よく見られる設定です。

ディレクトリパーミッション

chmodコマンドは、ディレクトリのパーミッション設定にも使用可能です。
もう一度、8進数表記を用いてパーミッション設定をしてみましょう。
ただし、r、w、xの意味が異なります。

・r — xが設定されていれば、ディレクトリ内のコンテンツが一覧表示されます。
・w —xが設定されていれば、ディレクトリ内のファイルを生成、消去及びリネームしたりできます。 
・x — そのディレクトリに入ることができます。(cd dirと同じ)

ディレクトリパーミッションに関する便利な設定を、いくつか記しておきます。

・777 — (rwxrwxrwx) 何の制限もなく、誰でもファイルを一覧表示したり、ファイルの生成及び消去が自由にできます。あまり、望ましい設定ではありません。
・755 — (rwxr-xr-x) ディレクトリのオーナーには、全ての権限があります。他のユーザーはコンテンツの一覧表示はできるものの、ファイルの生成や消去はできません。ディレクトリを他の人と共有したい場合に、よく見られる設定です。
・700 — (rwx — — — ) オーナーは、全ての権限があります。それ以外の人は、何もできません。この設定は、オーナーだけがそのディレクトリを使用し、他者に秘密にしたい場合には便利な設定です。

暫定的に管理者になる

重要なシステム管理作業を実行する場合、しばしば管理者権限が必要な時があります。
しかしこれまで警告してきたように、管理者のままでログインし続けるべきではありません。
ただ殆どの区分において、一時的に管理者権限を与えてくれるプログラムが存在します。
これがsu(short for substitute user)と呼ばれるもので、一部のタスクを実行する際に管理者権限が必要となった場合に使うことができます。
管理者になるには、シンプルにsuと入力すればいいです。
その時、管理者のパスワードが要求されるでしょう。

suコマンドを実行した後、管理者として新たなシェルセッションが出てくることでしょう。
管理者セッションを止めるには、exitと入力すればよく、その後に前のセッションに戻ります。

いくつかのディストリビューション、特にUbuntuに置いて目立つのが、代わりの方法が使われているという点です。
suコマンドよりも、sudoコマンドを使用します。
sudoを用いて、1人あるいはそれ以上のユーザーに必要に応じた管理者権限が与えられます。
管理者としてコマンドを実行するには、sudoコマンドに続いて望ましいコマンドを打てばいいです。
コマンドを入力した後、ユーザーは管理者パスワードではなくて、ユーザーパスワードを要求されるでしょう。

ファイルの所有者を変更するには

chownコマンドを使えば、ファイルの所有者を変更できます。
ここでは、”some_file”の所有者を”me”から”you”に変更するとしましょう。
その場合、以下のように入力します。

ファイルの所有者を変更する場合、管理者権限が必要なことに注意してください。
この例では、suコマンドを入力してから、chownコマンドを入力し、最後にexitコマンドで前のセッションに戻っています。

ディレクトリの所有者を変更する場合にも、chownコマンドはファイルのときと同じ使い方をします。

所有者グループを変更するには

ファイルやディレクトリの所有者グループを変更するには、chgrpコマンドを使います。
実際には、以下のように打てばいいです。

上の例では、”some_file”の所有者グループを前のグループから”new_group”へ変更しています。
chgrpコマンドを実行するには、そのファイルかディレクトリのオーナーでなければなりません。