UNIX システムの利用者は,そのシステム内で重複しないユーザー名(ログイン名) でシステムに登録されている必要があります。利用者は正しいユーザー名とパス ワードを入力することで,システムの利用が許可されます(ログイン)。
UNIX にはユーザーに加えて グループ (group)という概念があります。 通常,UNIX のシステムには複数のグループが登録されており,各ユーザーは少 なくともそのうちの一つに属しています。自分が所属するグループは
groupsというコマンドで調べることができます。試してみましょう。
UNIX のファイルには,ファイル名の他にも種々の情報が付与されています。ls にオプション -l (long format)を付けて実行することにより, ファイルの詳細情報を表示することができます。
また,ls の引数にディレクトリを指定できることは紹介済みですが,ls の引数 には通常のファイルの名前を与えることもできます。その場合,ls は与えられ たファイルの情報のみを出力します。複数のファイル名を与えることも可能です。
したがって,ファイル .cshrc が存在するディレクトリにおいて
ls -l .cshrcを実行すると7,ファイル .cshrc の詳細情報のみ を得ることができます8 。ワークステーション室のシステムでは,各ユーザーのホームディレクトリに .cshrc というファイルがありますので,例えばユーザー konno がホームディレ クトリでこれを実行すると,次のような表示が得られます。ただし,実際に表示 されるのはタイプライタ体で記した一行のみです。
本節では,アクセス権とリンク数を除く項目について説明します
9。
-
) はファイルの種類を表し
ます。記号の示す意味は次のとおりです10。
-
: 通常のファイル
d
: ディレクトリ
l
: シンボリックリンク11
なお,ファイル .cshrc は,通常,一般ユーザーが自ら作成するものではありま せんが,その所有者はユーザー登録時に各ユーザーに設定されています。
第 1.2 節で見たように,UNIX のシステムにはただ一つのファ イルの階層構造が存在し,各ユーザーのホームディレクトリは,すべてその中に あります。ですから,他の人のホームディレクトリの中を覗いたりファイルの内 容を見たり,さらにはファイルやディレクトリを削除することもできそうです ...それでは困りますね。
このようなことを防ぐために,UNIX ではファイルの中身を見たり,ファイルに 書き込みをするための権限を,ファイルの所有者や,ファイルが属するグループ 内のユーザーなどに対して設定するための仕組みがあります。 それらの権限をファイルのアクセス権 (permission)といいます。 アクセス権をパーミッションやアクセス許可,使用許可等と呼ぶこともあります。
ファイルのアクセス権は,ls -l
で表示されるファイルの詳細情報から
調べることができます。ここで必要な情報はアクセス権と所有者およびグループ
です。本節では,第 2.2 節で例示したファイル
.cshrc の詳細情報
アクセス権: rw-r--r--
,所有者: konno,グループ: h-prof
を例に,アクセス権の読み方を説明します。
rw-
と r--
と r--
の 3 組です。
各組は左から順に
rw-
)
r--
)
r--
)
r
: 読み取り可能 (readable)
-
: 読み取り不可能
w
: 書き込み可能 (writable)
-
: 書き込み不可能
x
: 実行可能 (executable)
-
: 実行不可能
rw-
)
r--
)
r--
)
ファイルの所有者は,chmod (change file mode) コマンドを使って,ファイル のアクセス権を変更することができます。chmod の基本的な使い方は
chmod mode file ...であり,mode には,file ... の現在のアクセス権をどのように変 更するのかを指定します。mode に指定する要素は「誰に」「どの権限を」 「与える(または取り除く)」の三つですが,記述の順番は次のとおりです。
+
か -
を指定します。
+
: 与える
-
: 取り除く
chmod g+w fileだと,file のグループに所属する(所有者以外の)ユーザーに,書き込み の権限を与えることになります 。また,
chmod a-w fileでは,全てのユーザーに対して,file への書き込みを禁止します。
chmod における mode を g+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 の例を次に示します.
chmod 644
file (すべてのユーザーが読み取り可能,所有
者のみ書き込み可能)
chmod 755
file (すべてのユーザーが読み取りと実行可能,
所有者のみ書き込み可能)
UNIX には 「特権ユーザー」,「スーパーユーザー」等と呼ばれるシステム管理のため の特別なユーザーが存 在します。 通常,特権ユーザーのユーザー名は root です 。 ユーザー root にはシステムに対するすべての操作が許されていて, root はシステム内のどんなファイルでも見ることができるし,変更したり削除 することもできます19。
システムが動作するのに必要な諸設定は,一般のユーザーが書き込めないファイ ルに保存されているので,管理者がシステムの設定変更を行うためには root と して作業する必要があります。一方で,root が操作を誤ればシステムが壊れる こともあり得ます20。
さて,もし root のパスワードが悪意ある人に知られてしまったら,どういう事 が起こり得るか,想像できますね。
root を含むユーザーのログイン用パスワードは,暗号化されてパスワードファ イルに格納されています。したがって,パスワードファイルの中を見ることがで きたとしても,暗号を解読できなければパスワードはわかりませんが21, パスワードファイルを誰かに持ち出されれば,root のパスワードを解読される 危険性は高まります。
もし,システムの利用者のパスワードが漏れると,そのパスワードを使ってシス テムに侵入することが可能になります。本学のシステムはインターネットに接続 していますから,世界中からネットワーク経由で,例えば ssh を使って本学の システムに遠隔ログインすることができますし22,ファイルを持ち出すことも可能になります。すなわ ち皆さんのパスワードが漏ることによって被害を被るのは,皆さん自身だけとは 限らないということです。
パスワードの取り扱いには注意しましょう。また,安易なパスワードを設定しな いでください。
ls /bin
と ls -F /bin
の出力を比較してください。
実行可能なファイルを表す印は何でしょう?。
次に,空行(改行)が一つだけ入ったファイル now を作ります。ここで は echo コマンドとリダイレクトを使って
echo > now
を実行しましょう。既に now が存在したら,中身は上書きされて改行だ
けになります。
ファイル now の詳細情報を表示して,アクセス権やファイルサイズ,更 新時刻などを確認してください。
>
または >>
) を使っ
てください。
-w-r--r--
に変更
してください。(ファイル所有者の読み取り権を外します)
見えないはずですね。
r--r--r--
に変更してから (ファイル所有
者に読み取り権を与え,さらに書き込み権を外します),中身を見てみま
しょう。
できないはずですね。書き込み権を外すと,誤操作からファイルを保護 できます。
書き込み許可のないファイルは,すぐには削除されず,
override r-r-r- konno/h-prof for now?のような表示がでます。
「now に設定されているアクセス権(書き込み禁止)よりもファイル削除
の操作を優先させていいですか?」という意味の確認メッセージです。
ここでは n
で答えてください。ファイルは削除されません。
rw-------
に変更しましょう。
ファイルの所有者以外の人は now を読み書きできなくなりました。 一方,所有者は now の内容を見ることも変更することもできます。
今度はうまくいきましたね。
複雑な処理をするコマンドを作成するにはプログラミングの知識が必要 ですが,簡単な処理をするコマンドであれば,既存のコマンドを組み合 わせてテキストファイルに記入し,そのファイルに実行の許可を与える だけで作成することができます。
以下の手順に従って作業をしてください。
echo name was born inここで,nameには自分の名前を,month year には生 まれた月と年を与えてください。
cal month year
注意: ワークステーション室のシステムを普通の設定で使っ ている人が,自作のコマンドを実行するには,パス名を使う必要 があります。さらに相対パス名でカレントディレクトリに存在す るコマンドを実行するためには,そのコマンドがカレントディレ クトリに存在するファイルであることを明示する必要があります。 詰まるところ,カレントディレクトリに実行可能ファイル file があるならば,./file で実行できます。