最低限 UNIX / Linux [I]

  1. ルートと一般利用者
  2. アカウントの作成
  3. パスワードセキュリティー
  4. ファイルとディレクトリ
  5. UNIX の代表的なコマンド
  6. シェルとシェルスクリプト
  7. 最低限 vi

1. ルートと一般利用者

[1.1] root(ルート)

UNIX には、一般の利用者(ユーザー)に対して使いやすく安全な UNIX 環境を提供するために、 UNIX システムを管理する特別の権限を持ったシステム管理者が存在します。 そうしたシステム管理者を UNIX では、スーパー・ユーザー、もしくは root と呼んでいます。

同じ root と言う名前を持つものに、これから学ぶであろう UNIX のファイル・システムの最上部のディレクトリーがありますが、 UNIX では特権を持ったシステム管理者のログイン・ユーザー名にこの名前を使うという慣習があります。 即ち root = スーパー・ユーザー = システム管理者(機器管理者)ということになります。 このドキュメントにおいて、これら3つの言葉は、特に区別しないで用います。

かつて UNIX の世界でスーパー・ユーザーといえば、それぞれの大学や研究所で UNIX を取り仕切る、 一人か二人の雲の上の仙人といったイメージがありました。 しかし、今は違います。それぞれの研究室に、会社のそれぞれのセクションに、 UNIX のスーパー・ユーザーが必要になりました。

家庭で良く使われる、いわゆる"Windows 95/98/Me マシン" "MAC" では、 パソコンのユーザーとそのパソコンの管理者との間には──大抵の場合同じ人間が両方を兼ねており── 明確な違いはありません。 しかし、UNIX の場合は違います。いかにスーパー・ユーザーの大衆化が進んだとしても、 UNIX の一般ユーザーと、UNIX のスーパー・ユーザーとは、はっきり区別されなければなりません。


[1.2] root の役割

root には、主に次のような仕事があります。

  1. システムの立ち上げとシャットダウン
  2. プロセス管理
  3. ユーザー管理
  4. ファイルシステム管理
  5. ネットワーク管理
  6. システムのセキュリティ管理
  7. システムのインストール
  8. カーネルのコンフィギュレーション
  9. アプリケーションのインストール

UNIX や Linux では、root が絶大な権限を持っています。 このことを UNIX の弱点の一つに数える議論もあるくらいです。 マシンを生かすも殺すも、root の指一つにかかっています。 逆に言えば root は、非常に重い責任を負わされているということです。

マシンがうまく動かないとき、ユーザーは root に文句を言います。 では、root は誰に文句を言えばいいのでしょう。 コンピュータの機械的なトラブルだったらメーカーに、 ソフトウェアのバグが原因だったらソフトウェア会社にクレームをつけることはできます。 いずれにせよ、トラブルの原因を見つけて対策を立てるのは、 一般ユーザーではなく、root の仕事です。 しかし一方で、root の責任に帰されるべき多くのトラブルもあることを忘れないで下さい。

今回のカリキュラムでは、最低限の UNIX(Linux)の基礎、 そしてインターネットを始めとするネットワークに関して学習してもらった上で、 皆さんに、それぞれのマシンの root としての大きな権限を開放します。 それは全てのトラブルに対して、root としての責任を皆さんに負って頂くということです。




2. アカウントの作成

[2.1] アカウント

先に触れた root の仕事の一つ「ユーザー管理」の第一歩が、 このアカウントの作成です。 アカウントとは、コンピュータやネットワーク上の資源やサービスを利用できる権利のこと、 または利用する際に必要な ID のことです。 UNIX が稼働しているコンピュータのユーザーとなるには、 ユーザーの情報をシステムに登録する必要があります。 コンピュータから見たアカウントとは、このユーザー登録情報に該当します。 アカウントの作成 = ユーザー情報の登録 と言えるでしょう。


[2.2] ユーザーの情報

ユーザーの情報は基本的に /etc ディレクトリ内の passwd, shadow, group ファイルに登録されています。 ディレクトリとファイルについてはこの後、学習します。

[2.2.1] /etc/passwd ファイル

/etc/passed には以下のような内容が書き込まれています。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:100:sync:/bin:/bin/sync
games:x:5:100:games:/usr/games:/bin/sh
man:x:6:100:man:/var/catman:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/spool/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
postgres:x:31:32:postgres:/var/postgres:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
msql:x:36:36:Mini SQL Database Manager:/var/lib/msql:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
list:x:38:38:SmartList:/var/list:/bin/sh
keikei:x:1000:1000:Kuramoto Kiyoshi:/home/keikei:/bin/bash
sugiyama:x:1005:1005:SUGIYAMA Ko-ichiro:/home/sugiyama:/bin/bash
dongury:x:1007:1007:Hitoshi KONO:/home/dongury:/bin/bash

1行に1ユーザーの情報が記述されています。 個々のユーザーの情報として、コロン(:)で区切られた7つのフィールドに、 次のような内容が左から順に書き込まれています。

  1. ユーザー名
    ユーザーの login 名。これはアカウント名とも呼ばれ、 8文字までの英小文字を用いて表されます。
    例)keikei

  2. パスワード
    かつて暗号化されたパスワードが書き込まれていた場所。 このファイルと同名の passwd コマンドで各ユーザーがパスワードを登録すると、 この部分に書き込まれました。
    現在はセキュリティを考慮し、パスワードの情報は、 アカウントを持っているユーザーなら誰でも見ることの出来る passwd ファイルではなく、root のみ閲覧可能な shadow ファイルに書き込まれます。
    例)昔:ODmNoe3rpqcWE(暗号化されている)、 今:x 。

  3. ユーザー ID
    ユーザーの識別番号。0 から 65535 までの値を選ぶことが出来ます。 システムはこの数値を参照してユーザーを識別するので、 他のユーザーと重複しないように注意します。 また 0 は root の番号なので一般ユーザーには使用しません。 Linux のデフォルト(特に変更しなかった場合)では 501 番以降が与えられます。
    例)1000

  4. グループ ID
    ユーザーの所属するグループ番号。 複数のグループに属する場合は主たるグループを記述します。 Linux のデフォルトでは 100 番(users)が与えられます。 登録方法によっては、ユーザー名と同じ名前のグループ名が作成されることもあります。 番号とグループ名の対応は /etc/group にリストアップされており、 新たにグループを作った場合、このファイルに追加します。
    例)1000

  5. gecos
    コメント用フィールド。ユーザーの本名等を書いておきます。
    例)Kuramoto Kiyoshi

  6. ホームディレクトリ
    ユーザーのホームディレクトリを絶対パスで記述します。 慣習として login 名と同じディレクトリ名が用いられます。 ホームディレクトリに関しては後で学習します。
    例)/home/keikei

  7. ログインシェル
    ログイン時に起動されるシェル。 SUN OS のデフォルトは /bin/sh 。 Linux では /bin/bash 。シェルについては後で学習します。
    例)/bin/bash

ユーザー ID、グループ IDの決める際は、 100 以下は用いないようにしましょう。 また、規模が拡大したときに困らないように、 あらかじめ計画的に付ける必要があります。

[2.2.2] /etc/group ファイル

/etc/group には以下のような内容が書き込まれています。

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:lp
mail:x:8:
news:x:9:
uucp:x:10:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
audio:x:29:
nogroup:x:65534:
keikei:x:1000:
sugiyama:x:1005:
dongury:x:1007:

/etc/passwd ファイル同様、1行に1グループの情報が記述されています。 個々のグループの情報として、コロン(:)で区切られた4つのフィールドに、 左から順に、「グループ名:グループのパスワード (現在は使われていない) :グループ ID の数値:グループに属するメンバー全員のユーザー名 (個々のユーザー名はコンマで区切られる)」の形で書かれています。

[2.2.3] /etc/shadow ファイル

/etc/shadow には以下のような内容が書き込まれています。 因みに、以下の暗号化されたパスワードは参考書から引用したものであり、 復号化してもメリットはありません。

addie:ODmNoe3rpqcWE:10886:0:99999:7:::0
adam:kHTsizRZqOpqE:10907:0:99999:7:::0
addison:iJMp94cZHbJ26:10910:0:99999:7:::0
adon:zK1kwbbc6.IeM:10905:0:99999:7:::0
samson:fM77gWFKHu4DU:10889:0:99999:7:::
bob:LOZNf7d9Xn6Rc:10910:0:99999:7:::0
david:YTpjdEsdAMFJ2:10928:0:99999:7:::0

1行に1ユーザーのパスワード情報が記述されています。 個々のユーザーのパスワード情報として、 コロン(:)で区切られた9つのフィールドに、 次のような内容が左から順に書き込まれています。 なお、このファイルは root の権限をなくして閲覧することはできません。

  1. ユーザー名
    ユーザーの login 名。 同じ物が /etc/passwd ファイルに記述されている必要があります。
    例)samson

  2. パスワード
    暗号化されたパスワードが書かれています。
    例)fM77gWFKHu4DU

  3. 最終パスワード変更日時
    1970年1月1日からパスワード最終変更日時迄の日数です。
    例)10889

  4. パスワード変更不能日数
    パスワード変更が出来る様になるまでの日数です。
    例)0

  5. パスワード変更要求迄の日数
    パスワードを変更しなくても良い日数です。
    例)99999

  6. パスワード期限満了警告日数
    パスワードが無効となるまでに、 "ユーザにパスワードが無効となりかかっている"との警告を出す日数です。
    例)7

  7. アカウント無効までの日数
    パスワードが無効となってから、 アカウントが不能となり使用できなくなるまでの日数です。 上のサンプルでは設定されていません。

  8. アカウント期限満了の日付
    1970年1月1日からアカウント使用不能となる迄の日数です。 上のサンプルでは設定されていません。

  9. 将来の使用に予約
    将来的に何か情報を追加するようシステムが変更された場合に、 その新規情報を書き込むために空けてあります。0 を指定します。

[2.3] アカウント作成手順(新規ユーザーの登録)

具体的なアカウントの作成手順は、用いられている UNIX(Linux) のシステムによって様々です。ここでは、Debian GNU/Linux 2.2 を例にとって 話を進めます。

[2.3.1] adduser

かつてアカウントの作成には、先程紹介した /etc/passwd ファイルなどを手で書き換える作業を伴いましたが、 現在では adduser コマンドが、一連の作業を代行してくれます。 なお、/etc/passwd ファイルを手で直接書きかえる場合も、 専用のエディタを使うことが推奨されますので、注意してください。

以下は adduser を使った新規アカウントの追加方法です。

  1. root 権限を行使できる状態にします。 具体的には、root でログインするか、su もしくは sudo コマンドで 一時的に root に成り代わります。 最初のうちは皆さんは root に成ることはできませんから、 手近なTAに頼みましょう。

  2. adduser コマンドを実行します。 ここでは新規アカウントとして samson さんを追加すると仮定しています。

    # adduser samson
    Adding user samson...
    Adding new group samson (1001).
    Adding new user samson (1001) with group samson.
    Creating home directory /home/samson.
    Copying files from /etc/skel
    Enter new UNIX password:
    
    < 新規アカウントとして、ログイン名"samson"を指定。
    > ユーザー"samson"を追加しています...
    > "samson"というグループ(グループ ID:1001)も追加してます。
    > ユーザー"samson"(ユーザー ID:1001)をグループ"samson"に追加してます。
    > ユーザー"samson"のホームディレクトリ /home/samson を作成しています。
    > 個人用の設定ファイルを /etc/skel からコピーしています。
    > 新しい UNIX パスワードを入力してください:
    

  3. パスワードを聞かれるので、適切なパスワードを入力します。 この時、側で見ている人に知られないようにする目的で、 打ち込んだパスワードは画面には表示されません。 パスワードは大文字、子文字、数字、記号などを 6文字以上並べて構成します。 8文字以降は入力しても無視されます。 パスワードはセキュリティ上たいへん重要なものですから、 パスワードの付け方には注意してください。 ※詳しくは「3. パスワードセキュリティー」を参照

    Enter new UNIX password:(何も表示されず)
    Retype new UNIX password:(何も表示されず)
    passwd: password updated successfully
    Changing the user information for samson
    Enter the new value, or press return for the default
            Full Name []:
    
    < 適切なパスワードを入力し設定します。
    < 確認のため、もう一度同じものを入力します。
    > パスワードは正常に更新されました。
    > ユーザー"samson"の情報を変更します。
    > 新しい値を入力、または標準値(角括弧内に表示)を用いるならそのまま Enter キーを押してください。
    > フルネームをどうぞ:
    

  4. パスワードを2回入力し、問題がなければ、 ユーザーの個人情報登録に進みます。 尋ねられるのは、
    • フルネーム
    • 部屋番号
    • 勤め先の電話番号
    • 自宅の電話番号
    • その他の情報
    で、1項目入力し終わった段階で Enter キーを押すと、 次の項目に進みます。フルネーム以外の情報は省略しても結構ですが、 メールアドレスを持っている人は、その他の情報の所で入力して下さい。

    Enter the new value, or press return for the default
            Full Name []: Samson SUGIURA
            Room Number []: S302
            Work Phone []: 011-***-****
            Home Phone []: 
            Other []: samson@ep.sci.hokudai.ac.jp
    Is the information correct? [y/n]
    
    
    < ユーザーの姓名を入力します。
    < 所属する研究室の部屋番号など、を入力します。
    < 所属する研究室の電話番号など、を入力します。
    < 自宅の電話番号を入力したい場合はここへ。
    < メールアドレスを持っている人は、ここへ入力。
    > これで良い?[はい/いいえ]
    

  5. 最後の項目を入力し終えると、それまで入力した内容に間違いがないか 確認してきますので、正しい場合は y 、間違っていれば n を入力し、 Enter キーを押します。
    Enter the new value, or press return for the default
            Full Name []: Samson SUGIURA
            Room Number []: S302
            Work Phone []: 011-***-****
            Home Phone []: 
            Other []: samson@ep.sci.hokudai.ac.jp
    Is the information correct? [y/n] y
    
    
    
    
    
    
    
    < 正しい場合は y 、間違っていれば n を入力します。
    

  6. こうして新規アカウント"samson"を追加することができました。

[2.3.2] その他の方法において

ユーザーの情報を変更する、あるいは adduser や useradd コマンドを利用せずに 直接設定ファイルを編集してアカウントを追加する場合、 それぞれの設定ファイル専用のコマンドを用いて編集しなければいけません。

各設定ファイルと編集用コマンドの対応は下記の通りです。

設定ファイル /etc/passwd /etc/group /etc/shadow
編集用コマンド vipw vigr vipw -s

これらの編集用コマンドは全て vi という文字が頭に付いていますが、 それはこれらがエディタ vi と操作が同じであることを意味しています。 vi の使い方については、後で学習します。




>> 次ページへ

最終更新日: 2000/10/02(河野仁之) Copyright © 2000 inex