next up previous contents
Next: 3 シンボリックリンク Up: UNIX 基礎演習 B 組 Previous: 1 ファイルとディレクトリ

Subsections


2 ファイルの詳細情報とアクセス権


2.1 ユーザーとグループ

UNIX システムの利用者は,そのシステム内で重複しないユーザー名(ログイン名) でシステムに登録されている必要があります。利用者は正しいユーザー名とパス ワードを入力することで,システムの利用が許可されます(ログイン)。

UNIX にはユーザーに加えて グループ (group)という概念があります。 通常,UNIX のシステムには複数のグループが登録されており,各ユーザーは少 なくともそのうちの一つに属しています。自分が所属するグループは

groups
というコマンドで調べることができます。試してみましょう。


2.2 ファイルの詳細情報

UNIX のファイルには,ファイル名の他にも種々の情報が付与されています。ls にオプション -l (long format)を付けて実行することにより, ファイルの詳細情報を表示することができます。

また,ls の引数にディレクトリを指定できることは紹介済みですが,ls の引数 には通常のファイルの名前を与えることもできます。その場合,ls は与えられ たファイルの情報のみを出力します。複数のファイル名を与えることも可能です。

したがって,ファイル .cshrc が存在するディレクトリにおいて

ls -l .cshrc
を実行すると7,ファイル .cshrc の詳細情報のみ を得ることができます8 。ワークステーション室のシステムでは,各ユーザーのホームディレクトリに .cshrc というファイルがありますので,例えばユーザー konno がホームディレ クトリでこれを実行すると,次のような表示が得られます。ただし,実際に表示 されるのはタイプライタ体で記した一行のみです。


種類        リンク数 グループ        更新日時
$\downarrow$           $\downarrow$        $\downarrow$           <----->
-rw-r-r-  1 konno  h-prof  319 Nov 25 16:55 .cshrc
 <---->    $\uparrow$              $\uparrow$                 $\uparrow$
 アクセス権    所有者         サイズ           ファイル名


本節では,アクセス権とリンク数を除く項目について説明します 9

種類

ファイルの詳細情報における一番左の記号 (-) はファイルの種類を表し ます。記号の示す意味は次のとおりです10
-: 通常のファイル
d: ディレクトリ
l: シンボリックリンク11

所有者

そのファイルを所有するユーザー (所有者; owner) の名前です。デフォルトで は12,ファイルを作成したユーザーが,その所有者となります。

なお,ファイル .cshrc は,通常,一般ユーザーが自ら作成するものではありま せんが,その所有者はユーザー登録時に各ユーザーに設定されています。

グループ

この項目はファイルの所属グループを表します13 。ファ イルに所有者があるのと同様に,ファイルは第 2.1 節で説明 したグループにも属します。 デフォルトでは, ファイルの所有者が所属する第一番目のグループが, そのファイル の所属グループとなります。

サイズ

byte 単位でのファイルサイズです。テキストファイルの場合,1 文字が 1 byte です。 ただし,日本語の文字では,いわゆる半角文字を除き,1 文字あたり 2 byte です。

更新日時・ファイル名

文字通り,ファイルの最終更新日時とファイル名です。


2.3 ファイルのアクセス権

1.2 節で見たように,UNIX のシステムにはただ一つのファ イルの階層構造が存在し,各ユーザーのホームディレクトリは,すべてその中に あります。ですから,他の人のホームディレクトリの中を覗いたりファイルの内 容を見たり,さらにはファイルやディレクトリを削除することもできそうです ...それでは困りますね。

このようなことを防ぐために,UNIX ではファイルの中身を見たり,ファイルに 書き込みをするための権限を,ファイルの所有者や,ファイルが属するグループ 内のユーザーなどに対して設定するための仕組みがあります。 それらの権限をファイルのアクセス権 (permission)といいます。 アクセス権をパーミッションやアクセス許可,使用許可等と呼ぶこともあります。

2.3.1 アクセス権の読み方

ファイルのアクセス権は,ls -l で表示されるファイルの詳細情報から 調べることができます。ここで必要な情報はアクセス権と所有者およびグループ です。本節では,第 2.2 節で例示したファイル .cshrc の詳細情報

アクセス権: rw-r--r--,所有者: konno,グループ: h-prof
を例に,アクセス権の読み方を説明します。

  1. アクセス権を構成する 9 文字を 3 文字ずつの組に分けます。.cshrc の 場合はrw-r--r-- の 3 組です。

    各組は左から順に

    1. ファイルの所有者 (konno) に対するアクセス権 (rw-)
    2. ファイルのグループ (h-prof) に属する,所有者 (konno) 以外 のユーザーに対するアクセス権 (r--)
    3. 上記以外のユーザーに対するアクセス権 (r--)
    を表しています。

  2. 3 つの組それぞれについて,各組を構成する 3 つの文字からファイル のアクセス権を調べます。 3 つの文字は左から順に, 次に示す 3 種類のアクセス権を表しています。
    1. ファイルの内容の読み取り権14 (r または -)

      r : 読み取り可能 (readable)
      - : 読み取り不可能

    2. ファイルへの書き込み権15 (w または -)

      w : 書き込み可能 (writable)
      - : 書き込み不可能

    3. ファイルの実行権16 (x または -)

      x : 実行可能 (executable)
      - : 実行不可能

以上より,.cshrc のアクセス権は
  1. 所有者 konno に対して, 読み取り可・書き込み可・実行不可 (rw-)
  2. グループ h-prof に属する,konno 以外のユーザーに対して, 読き取り可・書き込み不可・実行不可 (r--)
  3. その他のユーザーに対して, 読み取り可・書き込み不可・実行不可 (r--)
であることがわかります。すなわち,.cshrc の所有者 konno は,このファイル の内容を読んだり,ファイルに書き込みを行うことができます。グループ h-prof に属する konno 以外のユーザーと,その他のユーザーは,このファイル の内容を読み取ることのみが許されています。

2.3.2 アクセス権の変更 -- chmod コマンド

ファイルの所有者は,chmod (change file mode) コマンドを使って,ファイル のアクセス権を変更することができます。chmod の基本的な使い方は

chmod mode file ...
であり,mode には,file ... の現在のアクセス権をどのように変 更するのかを指定します。mode に指定する要素は「誰に」「どの権限を」 「与える(または取り除く)」の三つですが,記述の順番は次のとおりです。
  1. 「誰に」: u, g, o, a の何れかを指定します17

  2. 「与える」または「取り除く」: +- を指定します。

  3. 「どの権限を」; r, w, x の何れかを指定します。
例えば
chmod g+w file
だと,file のグループに所属する(所有者以外の)ユーザーに,書き込み の権限を与えることになります 。また,
chmod a-w file
では,全てのユーザーに対して,file への書き込みを禁止します。

2.3.3 発展 -- アクセス権の 8 進数指定(絶対指定)

chmod における modeg+w などの記号で指定する代りに,数 (8 進数) で指定することも可能です。 数による指定では,まず次の表にあるよう に,読み取り・書き込み・実行の可または不可を表す 3 文字の記号を,- のと きは 0 に,それ以外のときは 1 に対応させます。そうしてできあがった 0 と 1 の並びを 3 桁の 2 進数として解釈し,8 進数で表現します 。

記号 0,1 の並び (2進数表記) 8 進数 意味
--- 000 0 読取不可・書込不可・実行不可
--x 001 1 読取不可・書込不可・実行可
-w- 010 2 読取不可・書込可・実行不可
-wx 011 3 読取不可・書込可・実行可
r-- 100 4 読取可・書込不可・実行不可
r-x 101 5 読取可・書込不可・実行可
rw- 110 6 読取可・書込可・実行不可
rwx 111 7 読取可・書込可・実行可

上記の一桁の 8 進数を,所有者・グループ・その他のユーザーに 対するアクセス権として順に並べると,アクセス権の 8 進数表記ができあがります。 この方法による chmod の例を次に示します.

この方法では,現在のアクセス権とは無関係に,指定したアクセス権が設定され ることになります(絶対指定)。

2.4 特権ユーザーとセキュリティ

UNIX には 「特権ユーザー」,「スーパーユーザー」等と呼ばれるシステム管理のため の特別なユーザーが存 在します。 通常,特権ユーザーのユーザー名は root です 。 ユーザー root にはシステムに対するすべての操作が許されていて, root はシステム内のどんなファイルでも見ることができるし,変更したり削除 することもできます19

システムが動作するのに必要な諸設定は,一般のユーザーが書き込めないファイ ルに保存されているので,管理者がシステムの設定変更を行うためには root と して作業する必要があります。一方で,root が操作を誤ればシステムが壊れる こともあり得ます20

さて,もし root のパスワードが悪意ある人に知られてしまったら,どういう事 が起こり得るか,想像できますね。

root を含むユーザーのログイン用パスワードは,暗号化されてパスワードファ イルに格納されています。したがって,パスワードファイルの中を見ることがで きたとしても,暗号を解読できなければパスワードはわかりませんが21, パスワードファイルを誰かに持ち出されれば,root のパスワードを解読される 危険性は高まります。

もし,システムの利用者のパスワードが漏れると,そのパスワードを使ってシス テムに侵入することが可能になります。本学のシステムはインターネットに接続 していますから,世界中からネットワーク経由で,例えば ssh を使って本学の システムに遠隔ログインすることができますし22,ファイルを持ち出すことも可能になります。すなわ ち皆さんのパスワードが漏ることによって被害を被るのは,皆さん自身だけとは 限らないということです。

パスワードの取り扱いには注意しましょう。また,安易なパスワードを設定しな いでください。


2.5 問題

  1. ホームディレクトリに存在するファイルの詳細情報を一覧表示して,観 察してみましょう。通常のファイルとディレクトリの違いや更新日時, 所有者,アクセス権等を確認してください。

  2. ファイル /bin/cat や /bin/ls の詳細情報を表示してください。 適切なアクセス権になっていることが確認できますか?

  3. ls /bin ls -F /bin の出力を比較してください。 実行可能なファイルを表す印は何でしょう?。

  4. ホームディレクトリに存在するディレクトリ unix に,カレントディレ クトリを変更してください。

    次に,空行(改行)が一つだけ入ったファイル now を作ります。ここで は echo コマンドとリダイレクトを使って

    echo > now
    を実行しましょう。既に now が存在したら,中身は上書きされて改行だ けになります。

    ファイル now の詳細情報を表示して,アクセス権やファイルサイズ,更 新時刻などを確認してください。

  5. 現在の日付や時刻をファイル now に書き込みましょう。 date コマンドとリダイレクト ( > または >> ) を使っ てください。

  6. now のファイルサイズや更新時刻などを確認しましょう。 now の内容も見てみましょう。 now のファイルサイズと内容は一致していますか?

  7. chmod コマンドを使って now のアクセス権を -w-r--r-- に変更 してください。(ファイル所有者の読み取り権を外します)

  8. now の中を見てみましょう。

    見えないはずですね。

  9. now のアクセス権を r--r--r-- に変更してから (ファイル所有 者に読み取り権を与え,さらに書き込み権を外します),中身を見てみま しょう。

  10. 再度,now に現在の日付や時刻を書き込みましょう。

    できないはずですね。書き込み権を外すと,誤操作からファイルを保護 できます。

  11. now の削除を試みましょう。

    書き込み許可のないファイルは,すぐには削除されず,

    override r-r-r- konno/h-prof for now?
    のような表示がでます。

    「now に設定されているアクセス権(書き込み禁止)よりもファイル削除 の操作を優先させていいですか?」という意味の確認メッセージです。 ここでは n で答えてください。ファイルは削除されません。

  12. now のアクセス権を rw------- に変更しましょう。

    ファイルの所有者以外の人は now を読み書きできなくなりました。 一方,所有者は now の内容を見ることも変更することもできます。

  13. now を削除しましょう。

    今度はうまくいきましたね。

  14. 自分の生まれた月のカレンダーを表示するコマンドを作って実行しましょ う。

    複雑な処理をするコマンドを作成するにはプログラミングの知識が必要 ですが,簡単な処理をするコマンドであれば,既存のコマンドを組み合 わせてテキストファイルに記入し,そのファイルに実行の許可を与える だけで作成することができます。

    以下の手順に従って作業をしてください。

    1. 次のコマンドを順に実行して,結果を確認してください。
      echo name was born in
      cal month year
      ここで,nameには自分の名前を,month year には生 まれた月と年を与えてください。

    2. 前項 で実行したコマンド(echo ... と cal ...) 2 行が入った テキストファイルを emacs を使って作成してください。ファイル 名は mybirth としましょう。

    3. そのファイルに,すべてのユーザーが実行できる実行権を与えて ください。

    4. ファイルに実行権を与えましたので,ファイルをコマンドとして 実行できるようになりました。 作成したコマンドを実行してください。

      注意: ワークステーション室のシステムを普通の設定で使っ ている人が,自作のコマンドを実行するには,パス名を使う必要 があります。さらに相対パス名でカレントディレクトリに存在す るコマンドを実行するためには,そのコマンドがカレントディレ クトリに存在するファイルであることを明示する必要があります。 詰まるところ,カレントディレクトリに実行可能ファイル file があるならば,./file で実行できます。


next up previous contents
Next: 3 シンボリックリンク Up: UNIX 基礎演習 B 組 Previous: 1 ファイルとディレクトリ

平成17年12月21日