Linux リテラシ - 第3回 システムの基本

スーパーユーザーと一般ユーザー

Linuxではスーパーユーザーアカウントと一般ユーザーアカウントという2種類のユーザーアカウントが存在します。

スーパーユーザー

システムの管理者です。通常rootと呼ばれます。一切制限を受けずにシステム内で操作を行うことができます。

一般ユーザー

システム管理以外の通常の作業を行うユーザーです。操作に制限があります。通常、スーパーユーザーアカウントを持っている人も一般ユーザーアカウントを持っています。スーパーユーザーの操作には制限が全くないので、もしスーパーユーザーアカウントで間違った操作を行うと、最悪、システムを破壊してしまいます。ソレに対して、一般ユーザーで操作を誤ってもシステムが壊れることはありません。なので、スーパーユーザーアカウントをもっていても権限が必要のないときには一般ユーザーアカウントで作業を行うのが普通です。

一般ユーザーの追加

一般ユーザーを追加するにはuseraddコマンドを使います。

useradd hoge

上のようなコマンドを打つと、hogeというユーザーが追加されます。追加されたユーザーにはパスワードが設定されていません。パスワードを設定するにはpasswdコマンド使います。

passwd hoge

なお、passwdコマンドはパスワードを変更するときにも使います。

passwd

とすれば、コマンドを実行したユーザーのパスワードを変更します。また、rootはすべての一般ユーザーのパスワードを変更することが可能です。

ユーザーの変更

ユーザーを変更するコマンドはsuです。Switch Userの略ともSelect Userの略とも言われています(Super Userの略という話も聞いたことがある)。基本的な使い方は下のようになっています。

su [オプション] ユーザー名

rootに変更する場合はユーザー名を省略することが可能です。一般ユーザーが使う場合は変更したいユーザーのパスワードを求められます。suで良く使うオプションに次のようなものがあります(hogeはユーザー名)。

su - hoge             ・・・hogeに変更後の環境がhogeでログインした場合と同じ環境になる。
su -c コマンド hoge   ・・・hogeの権限でコマンドを実行する。

/etc/passwd

ユーザーアカウント情報が格納されているファイルです。各項目はコロンで区切られ次のようになっています。

hoge:x:500:500::/home/hoge:/bin/bash

それぞれの項目の意味はmanコマンドで調べてください。

/etc/shadow

暗号化されたパスワードが格納されているファイルです。/etc/passwdのパスワードの欄がxの場合、ユーザーのパスワードは/etc/shadowに保存されています。/etc/passwdとは違い、一般ユーザーが読めるようにはなっていません。

グループ

ユーザーは1つ以上のグループに所属しています。通常、ユーザー名と同じ名前のグループに所属しています。Linuxではユーザー単位の他にグループ単位でファイルのアクセス権を指定することが可能です。

/etc/group

グループに関する情報が格納されているファイルです。詳細はmanで調べてください。

ディレクトリ構成

ルートディレクトリ下の各ディレクトリには下のような感じでファイルが格納されています。

/
|--bin          基本コマンド
|--boot         起動時に必要なファイル
|--dev          デバイスファイル
|--etc          設定ファイル
|--home         ユーザーのホームディレクトリ
|--lib          共有ライブラリ
|--media        リムーバルメディアのマウントポイント
|--mnt          一時的なマウントポイント
|--opt          追加アプリケーション
|--proc         プロセス情報など
|--root         rootのホームディレクトリ
|--sbin         基本システムコマンド
|--srv          システムサービスからのデータ
|--tmp          一時ファイル
|--usr          二次階層
|--var          変更されるデータ
/usr
|--bin          ユーザーコマンド
|--games        ゲーム
|--include      C言語のヘッダファイル
|--lib          ライブラリ
|--local        自分でインストールしたソフトウェアを格納する階層
|--sbin         /sbinと比べて重要でないシステムコマンド
|--share        アーキテクチャに依存しないデータ

多くのLinuxディストリビューションはFilesystem Hierarchy Standard (FHS)という標準に従ったディレクトリ構成をしています。FHSの最新バージョンは2004年1月に発表された2.3です。そのため、それ以前のディストリビューションではディレクトリ構成が少し異なるかもしれません。より詳しく知りたい場合はhttp://www.pathname.com/fhs/を参照してください。

ソースインストール

ソフトウェアをソースからインストールしてみます。ソースからインストールする場合はソースアーカイブ内にあるREADME、INSTALLといったドキュメントファイルを絶対に読みましょう。今回は例としてslをとりあげます。http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/sl/sl.tarをダウンロードし、展開します。作成されたディレクトリに移動すると、そこにREADMEがあるので読みます。文字化けしてしまい読めない場合は次のコマンドを実行してください。

iconv -f ISO2022JP README

READMEを読むと「make すればできあがります」と書いてありますので、makeを実行します。

make

するとカレントディレクトリにslという実行可能なファイルが作成されます。
このままでは、slと打っただけでコマンドが実行されないのでPATHの通ったディレクトリにslを移動します。自分でインストールしたソフトウェアは/usr/local以下に置くのが普通なので、slを/usr/local/binに移動します。なお、/usr/local/binはrootだけでしか書き込みはできません。これでslを普通のコマンドと同じように実行できます。(slをこの通りやってインストールした場合、ファイルの所有権の項を絶対に読んでください)

ファイルの所有権

ファイルの所有権はユーザーとグループにより指定されます。ls -lを実行するとファイルを所有しているユーザーとグループの名前を見ることができます。ファイルの所有権を変更するにはchownコマンドを使用します。chownは次のように使います。

chown [オプション] user[:group] ファイル

さっきインストールしたslの所有者とグループを見てみます。

-rwxrwxr-x  1 hoge hoge 10829  5月 28 16:28 /usr/local/bin/sl

所有者が一般ユーザーです。また、グループは一般ユーザー(hoge)が所属するグループです。これはセキュリティー上大変危険ですので、所有権をrootに変更します。

chown root:root sl

また、slをグループが書き込む必要性はないのでグループの書き込み権限を取り除きましょう。

パッケージインストール

ソフトウェアのインストールにはディストリビューターが提供しているパッケージをインストールする方法もあります。CentOS、Fedora CoreといったRed Hat系のLinuxではRPMというパッケージ管理システムを使い、パッケージのインストールを行うことができます。RPMでパッケージをインストールするには次のようにします。

rpm -ivh パッケージ名

また、RPMはパッケージのアンインストールも行えます。パッケージをアンインストールするには次のようにします。

rpm -e パッケージ名

インストールされているパッケージを調べることもできます。

rpm -q パッケージ名

実際にrpmをつかってみます。今回はtreeというプログラムをインストールします。まず、treeがすでにインストールされていないことをチェックします。

rpm -q tree

ここで、tree-といったものが出力されなければ、インストールされていません。インストールされていないことを確認したら、http://storage.cis.k.hosei.ac.jp/pub/Fedora/3/i386/Fedora/RPMS/tree-1.5.0-1.i386.rpm (学内のみ)をダウンロードします。インストールはrootで行います。

rpm -ivh tree-1.5.0-1.i386.rpm

試しにtreeを実行してみましょう。

停止・再起動

通常、システムの停止・再起動はrootのみが行えます。しかし、デスクトップ用途でLinuxを使う場合は一般ユーザーでも停止・再起動をできるようになっている場合が多いです。

停止

システムを停止するにはshutdownコマンドを使います。

shutdown -h now

また、haltコマンドでも可能です。

halt

再起動

shutdownコマンドで再起動もできます。

shutdown -r now

rebootコマンドでも再起動します。

reboot

補足

今回、教育的な理由によりあのような方法でslをインストールしました。実際にインストールする際は、slを/usr/local/binに移動する前に所有権、パーミッションを変更するべきです。

su
chown root:root sl
chmod 755 sl
mv sl /usr/local/bin

というか、slを/usr/local/binに置くのにmvでなくcpを使えば問題ありません。pオプションを使わなければ、複製されたファイルはcpを実行したユーザーが所有者になるからです。ただし、パーミッションは変更しなくてはなりません。

chmod 755 sl
su
cp sl /usr/local/bin

ここまで色々書いてきましたが、実はinstallというインストールする際に大変役に立つコマンドがあります。インストールはファイルをコピーするコマンドです。cpとは違い、コピーのパーミッションと所有権を設定することができます。今回なら次のように実行します。

install -m 0755 -o root -g root sl /usr/local/bin

ちなみに、installはデフォルトで、アクセス権が0755、所有者はroot、所有グループは実行したユーザのグループなので、オプション無しでも平気だったりします。