Linuxを使いこなしたいけれど,使い慣れたWindowsとは操作方法が違うので思うように操作できない。この”壁“を取り払うのが本コラムの目的です。Linuxやその上で動くソフトウエアを実際に使うために役立つ知識や操作方法を説明します。
今回はユーザー管理とファイルのアクセス権について紹介します。

 Linuxは,複数のユーザーが同時に使用することを前提に開発されたオペレーティング・システムです。1つのLinuxシステムに,複数のユーザーが同時にログインし,それぞれの作業を並行に処理できるように設計されています。

 こうしたマルチ・ユーザー環境では,各ユーザーが作成する各種ファイルは,同じハード・ディスク領域に格納されます。そこで,「あるユーザーのファイルに対しては,ほかのユーザーはアクセスできない」といったアクセス権の制御が必要になります。

 今回は,Linuxシステムにアクセスできるユーザーの管理と,ファイルのアクセス権について解説します。

ユーザー管理

 Linuxでは,次の情報を所定のファイルに記述してユーザー管理を行います(それぞれの意味については後述します)。


・ユーザー名(ログイン名)
・パスワード
・ユーザーID
・グループID
・ホーム・ディレクトリ
・ログイン・シェル

 これらの情報を記述したファイルは,前回紹介したviなどのテキスト・エディタを用いて編集できます。ただし,多くのディストリビューションは,より簡単に編集するためのGUIツールを用意しています。

GUIでのユーザー管理

 ここではFedora Core 4を例にしてユーザーの管理方法を紹介します。[デスクトップ]-[システム設定]-[ユーザーとグループ]を選択して,[ユーザー管理]を起動します(写真1)。一般ユーザーでログインしているときは,起動時に管理者(root)のパスワードが必要です。

写真1●ユーザー管理の画面
写真1●ユーザー管理の画面

 起動された画面には,現在登録されているユーザーが一覧で表示されます。ところが,写真1では「susume」という名前のユーザーしかありません。インストール時に作成されたrootユーザーなどは表示されません。これは,[設定]-[システムユーザーとグループをフィルタ]がデフォルト(初期設定)でオンになっているためです。設定をオフに変更すれば,表示されます。

ユーザーとグループ

 写真1にある[ユーザーID](UID)と呼ばれる数値は,ログインするときに利用するユーザー名(ログイン名)と1対1に対応するものです。Linuxでは,ユーザーをユーザー名でなくユーザーIDで識別します。ディストリビューションによって異なりますが,Fedora Coreでは一般ユーザーのUIDは500番からスタートし,501,502,…と増えていきます。rootユーザーは0番です。

 また,ユーザーは少なくとも1つの「グループ」に属します。このグループは,後述するアクセス権限の設定に深く関係します。

 1人のユーザーが複数のグループに所属できますが,その場合でもメインの所属グループを1つ決めます。このグループを「プライマリ・グループ」と言います。

 写真1の例では,susumeユーザーはユーザー名と同じ名前のグループに所属しています。このグループをユーザー・プライベート・グループと呼びます。ユーザーと所属グループが同じ名前になるのは,Linuxでは標準的な設定です。

 グループもユーザーと同様,「グループID」(GID)と呼ばれる数値で識別されます。写真1の[グループ]タブをクリックすると,グループごとのグループIDが分かります(写真2)。[グループメンバ]は,そのグループに所属するユーザーです。

写真2●グループIDを確認できる
写真2●グループIDを確認できる

 写真1の[氏名]にはユーザーのフルネームなどが入りますが,省略することも可能です。

 [ログインシェル]とは,ログイン時に最初に起動するシェルを指します。Linuxの標準では/bin/bash(バッシュ)です。

 [ホームディレクトリ]は,各ユーザーの作業場所で,通常は「/home/ユーザー名」となります。ログイン直後のカレント・ディレクトリは,通常ホーム・ディレクトリです。

ユーザーの追加

 新しくユーザーを追加するには,写真1の画面で,[ユーザーを追加]をクリックします。[新規ユーザーの作成](写真3)が表示されるので,項目を順番に入力していきます。

写真3●新規ユーザーの作成画面
写真3●新規ユーザーの作成画面

 ユーザー名は通常,小文字で入力します。氏名は省略できます。パスワードは,確認のため2回入力します。5文字以下のパスワードはセキュリティ上好ましくないので,設定できません。短いパスワードのままだと,エラーが表示されます。ログイン・シェルやホーム・ディレクトリなどは初期設定のままで構いません。

ユーザーの修正

 登録したユーザー情報を修正するには,写真1で修正したいユーザー名の行をダブル・クリックするか,ユーザー名を選択して[プロパティ]をクリックします(写真4)。ここで表示される[ユーザープロパティ]では,写真3で設定した内容のほかに,アカウントやパスワードの有効期限も設定できます。

写真4●ユーザー名やパスワードを変更できる
写真4●ユーザー名やパスワードを変更できる
アカウントやパスワードの有効期限を設定可能。

 所属するグループを変更する場合は,[グループ]タブをクリックして行います。

ユーザーの削除

 アクセスを止める必要があるユーザーは,ログインできないように設定します。それには,次の3つの方法があります。


・一時的にログインできなくする
・ユーザーは削除するが,そのホーム・ディレクトリは残す
・ユーザーとそのホーム・ディレクトリの両方を削除する

 一時的にログインできなくするには,写真4で[ログインシェル]を「/sbin/nologin」に変更します。こうしておけば,グラフィカル・ログインの場合は「システム管理者はあなたのアカウントを無効にしています」というメッセージが表示されます。

 ユーザーを削除する場合は,写真1でユーザー名を選択した後に「削除」ボタンをクリックします。本当にユーザーを削除してもよいかを聞いてきます(写真5)。このとき,ホーム・ディレクトリを残す場合は,チェックを外してから「はい」をクリックします。ユーザーは削除しても,ホーム・ディレクトリにあるファイルを利用したい場合は,このようにします。

写真5●ユーザーを削除する際の問い合わせ
写真5●ユーザーを削除する際の問い合わせ
ホーム・ディレクトリやメール・ボックスの削除を設定できる。

 ホーム・ディレクトリが削除されると,メール・スプールと呼ばれる受信メールなども合わせて削除されます。

グループの管理

 写真2の画面で,グループの追加や修正,削除もできます。

 新しいグループを作成するには,[グループの追加]をクリックし,[新規グループの作成]の画面で新しいグループ名を登録します。

 削除する場合は,グループを選択して[削除]ボタンをクリックすれば削除できます。ただし,選択したグループをプライマリ・グループにしているユーザーがいると削除できません。該当ユーザーは削除するか,別のプライマリ・グループに変更する必要があります。

 グループ名の行をダブル・クリックするか,グループを選択して[プロパティ]をクリックすると,[グループプロパティ]が開きます。グループ名を変更したり,所属するユーザーを選択できたりします。

CUIでのユーザー管理

 コマンドラインでは,useraddコマンドでユーザーを追加します。管理者権限が必要です。


# useradd -m [ユーザー名]

 useraddコマンドには,多くのオプションが用意されています(表1)。また,いくつかのオプションが標準で指定されています。初期設定は,次のようにして確認できます。

表1●useraddコマンドの主なオプション
表1●useraddコマンドの主なオプション


# useradd -D 
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel

 「GROUP=100」は,標準のグループIDを100にするという意味です。Fedora Coreの場合,別の設定ファイル(/etc/login.defs)でグループIDは500以上に指定されているため,500番以降になります。「HOME=/home」は,ホーム・ディレクトリを/homeディレクトリ以下にユーザー名を付加したものにするという設定です。「INACTIVE=-1」は,パスワードの有効期限の設定です。「-1」は無期限を表します。「EXPIRE=」はアカウントの有効期限で,この場合は無期限です。「SHELL=/bin/bash」は,ログイン・シェルがbashであることを示します。「SKEL=/etc/skel」は,ホーム・ディレクトリを作成した際に,標準でコピーされるファイルの保存先ディレクトリを表します。

 Fedora Coreの場合,ログイン時に読み込まれる設定ファイル/etc/login.defsに,ホーム・ディレクトリを自動作成する設定が記述されています。そのため,「-m」オプションは省略できます。

 ユーザーIDやユーザー・プライベート・グループのIDは,ユーザーの作成時に自動的に発番されます。これらは,

# id [ユーザー名]

で確認できます。ログイン中の一般ユーザーが自らのIDを調べるときは,「$ id 」と実行します。

 useraddコマンドを実行しただけでは,パスワードが設定されていません*1。次のように,passwdコマンドで設定します。

# passwd [ユーザー名]

 passwdコマンドでは,GUIツールで登録する時と同様,パスワードは2回入力します。5文字以下のパスワードに対しては,警告メッセージが表示されるものの,そのまま設定できます。

 一般ユーザーが自身のパスワードを変更するときは,「$ passwd 」と実行します。この場合,次のようなパスワードは設定できません。


・5文字以下
・単純な英字の組み合わせ
・数字のみ

ユーザー登録に関連するファイル

 通常,ユーザー登録などのシステム管理コマンドを実行すると,/etcディレクトリ内の設定ファイルに修正が加えられます。どのファイルに修正が加えられたかをチェックするには,findコマンドが便利です。

 findコマンドは,パラメータに検索の対象となるディレクトリを指定し,オプションを使って検索対象を絞り込めます。

 「-newer」オプションを使うと,指定したファイルよりも後に更新されたファイルのみを一覧表示します(図1)。ユーザーの追加によって,複数のファイルが書き換えられることが分かります(表2)。これらのファイルは,次のような役割を持っています。

図1●ユーザーの追加で更新されるファイルをfindコマンドで検索
図1●ユーザーの追加で更新されるファイルをfindコマンドで検索

表2●ユーザーを追加する際に更新・追加されるファイルやディレクトリ
表2●ユーザーを追加する際に更新・追加されるファイルやディレクトリ

●/etc/passwd,/etc/shadow

 /etc/passwdファイルには,主にユーザー情報が格納されています。passwdというファイル名ですが,パスワードは通常,/etc/shadowファイルに格納されます。元々/etc/passwdファイルに暗号化したパスワードを格納していたのですが,一般ユーザーでもアクセスできるため,セキュリティ上危険ということで,現在は/etc/shadowファイルを使うようになりました。この仕組みを「シャドウ・パスワード」と言います。

●/etc/group,/etc/gshadow

 /etc/groupファイルにグループ情報が記述されます。グループのパスワードは/etc/gshadowファイルに格納されますが,ほとんど利用されていません。

●ホーム・ディレクトリ

 新規に作成されたホーム・ディレクトリには,/etc/skelディレクトリのファイルがコピーされます。作成直後のディレクトリは,一見空のように見えますが,「$ ls -a /home/ユーザー名 」と実行すれば隠しファイルが表示されます。

ユーザー情報の修正と削除

 登録後のユーザー情報を修正するには,usermodコマンドを使います。表3に示すように,useraddコマンドと同様のオプションがあります。また,一時的にログインできないようにするロック・オプションがあります。

表3●usermodコマンドの主なオプション
表3●usermodコマンドの主なオプション

 ユーザーを削除するには,userdelコマンドを使います。「-r」オプションを使用すれば,ホーム・ディレクトリも一緒に削除されます。

グループ情報の管理

 グループの追加は,groupaddコマンドで行います。またgroupsコマンドで,ユーザーが所属するグループが分かります。所属するグループを変更するときは,usermodコマンドを利用します(図2)。

図2●グループの追加や削除
図2●グループの追加や削除

 グループの削除は,groupdelコマンドでできますが,そのグループをプライマリ・グループにしているユーザーがいれば,削除はできません。

ファイルなどのアクセス権

 Linuxでは,ファイルやディレクトリへのアクセス権を,パーミッション(permission)や保護モード(protection mode)と言います。単にモードと言うこともあります。ここでは,パーミッションと表現します。

 ファイルやディレクトリのパーミッションは,「$ ls -l 」で確認できます。


$ ls -l 

-rw-rw-r-- 1 susume susume ...

(後略)

 各列の2文字目から10文字目までの9文字分が,パーミッションの設定を表します。

ユーザーを3つに分けて設定

 Linuxでは,すべてのファイルに所有者が設定されています。パーミッションでは,各ファイルごとにユーザーを「所有者と同一」(User),「所有者と同じグループ」(Group),「他人」(Other)の3つに分けて設定します。それぞれの英語表記の先頭文字「u」「g」「o」は,コマンド操作で使いますので覚えておきましょう。

 「所有者と同じグループ」は,所有者のプライマリ・グループとアクセスする側が所属するグループで判断されます。

 3つに分けられたユーザーに対して,各ファイルごとに「読み出し」(Read),「書き込み」(Write),「実行」(eXecute)の3つの動作に関する,可否が設定できます。各動作を英単語で表記した際に,大文字で示した「r」「w」「x」が,各権限を表します。ユーザーの分類と同様,後述するコマンドの操作で必要になるので,こちらも覚えておきましょう。

 前述の9文字は,3分したユーザーに対して,それぞれ3種類の動作を設定したものです。3文字ごとに区切って,User,Group,Otherの順に設定されています。例えば,3文字が「rw-」の場合は,「読み出しと書き込みは許可されるが,実行する権限はない」ことを示します。

一般的なアクセス権

 パーミッションの設定は,通常のファイルであれば


rw-:読み書き可能
r--:読み出しのみ可能
---:アクセス禁止

の3パターンで,実行可能なプログラム・ファイルは


rwx:読み書きと実行が可能
r-x:読み出しと実行が可能
---:アクセス禁止

の3パターンで設定されるのが一般的です。

 また,UserよりGroup,GroupよりOtherの方が,制限が厳しくなるのが一般的です。

ディレクトリの権限に注意

 ディレクトリの権限は,実行可能なプログラム・ファイルと同じパターンで設定できますが,「r」「w」「x」のそれぞれの意味がファイルの場合と異なります。


r:ディレクトリ内のファイル一覧を参照できる
w:ディレクトリ内にファイルの新規作成と削除ができる
x:ディレクトリ内のファイルにアクセスできる

 注意が必要なのは,ディレクトリのw権限です。ファイルの削除と新規作成は,ファイルのw権限ではなく,そのディレクトリのw権限によって決まります。そのため,rwの権限を持ったディレクトリにある,rしか権限のないファイルは,一度ファイルを削除し,同名でファイルを作成すれば実質的に内容を書き換えできます。

パーミッションの変更

 パーミッションの変更には,chmodコマンドを使います。change modeの略です。前述のu・g・oやr・w・xを添えてコマンドを実行することで,さまざまなパーミッションを設定できます。

 chmodの基本書式は,

# chmod[ユーザーの指定][演算子][権限の種類][ファイル名] 

となります。演算子には「+」「-」「=」が入ります。

 図3の例を見てみましょう。最初に作成したパーミッションは「rw-rw-r--」になっています。Groupの権限から書き込みを禁止するには,

$ chmod g-w [ファイル名] 

と実行します。ユーザーの指定で,User,Group,Otherのすべてを指定するときは「a」を指定します。演算子の「=」は,指定したパーミッションそのものに変更するときに使います。

図3●chmodコマンドの実行例
図3●chmodコマンドの実行例

8進表記による指定

 「ls -l」でパーミッションを確認すると,9文字で表現されます。これを3桁(けた)の数値に置き換えて表現することもよくあります。

 まず9文字を,ユーザー別に3文字ずつ分けて考えます。そして各3文字に,rがあれば4,wがあれば2,xがあれば1として,その和をとります。こうすれば,各ユーザーごとのパーミッションは0~7の数字で表現できます。


7 : rwx
6 : rw-
5 : r-x
4 : r--
0 : ---

 例えば,「rw-rw-r--」は664となります。このような表記をパーミッションの8進表記と言います。

 chmodコマンドは,この表記を使ってパーミッションを設定できます。例えば「rw-r-----」とする場合は

$ chmod 640 [ファイル名] 

とします。

所有者の変更

 管理者であれば,ファイル所有者と所有グループを,所有者であれば所有グループを変更できます。

 所有者と所有グループを変更するときは,chownコマンドを使います。

# chown [所有者]:[所有グループ] [ファイル名] 

 所有グループのみを変更するときは,chownコマンドで所有者部分を省略するか,chgrpコマンドを使用します。


$ touch x.txt 
$ ls -l x.txt 
-rw-rw-r-- susume susume (略)
$ chgrp nikkei x.txt 
$ ls -l x.txt 
-rw-rw-r-- susume nikkei (略)

新規作成時のパーミッション

 touchやviなどでファイルを新規作成したり,mkdirコマンドでディレクトリを作成した場合,パーミッションはあらかじめ決まった設定になります。これは,次の2つによって設定されています。


・コマンドが決めたパーミッション
・umask値

 コマンドが決めたパーミッションは通常,ユーザーは変更できません。

 umask値とは,umaskコマンドで設定されるものです。初期設定は,ディストリビューションによって異なります。

$ umask -S 
u=rwx,g=rwx,o=rx

 これはFedora Core 4の一般ユーザーに対する初期設定です。この場合,ファイルを新規作成するとxを除いた「rw-rw-r--」になり,ディレクトリは「rwxrwxr-x」になります。

 ユーザーは,自らのumask値を変更できます。例えば,Groupのw権限を初期設定で与えたくない場合は,

$ umask u=rwx,g=rx,o=rx 

と実行します。