Linuxを使い始めた人,資格試験合格を目指す人を対象に,模擬試験形式でLinuxの基礎を解説します。

問題:アクセス権が「rwxrwxrwx」であるディレクトリの中に,「r--r--r--」に設定された「file」という名前のファイルがある。次の操作を実行できるか?

A) date т file
B) rm file

ポイント:Linuxでは,各ファイルやディレクトリに対し,アクセスしようとする者と作成者の関係によって,アクセスの可否が設定されます。ファイルの修正には書き込み権限が必要になりますが,ファイルの削除ではディレクトリの書き込み権限が参照されます。

キーワード:パーミッション,chmod,umask

 Linuxでは,各ファイルやディレクトリに,アクセス権が設定されます。アクセス権は,「パーミッション」とも呼ばれます。

 アクセス権は,アクセスしようとするユーザーを,そのファイルやディレクトリの作成者(所有者)の「同一ユーザー(所有者)」「同じグループ」「その他」に分けて,それぞれに対して別々に設定します。

 コマンドラインから「$ ls -l」と実行すると,カレント・ディレクトリに含まれるファイルやディレクトリの情報として,アクセス権が表示されます(図1)。最初の「hikasa」はファイルの所有者,次の「hikasa」は所有者の所属するグループを表します。各行の2文字目から10文字目までの9文字分がアクセス権です*1。各桁(けた)の「r」「w」「x」「-」は,rは読み出し権限,wは書き込み権限,xは実行権限,-はいずれの権限もないことを意味します。9桁の表示は3桁ずつに分けられ,先頭の3桁が「所有者」,続いて「同じグループ」,最後に「その他」のアクセス権を指します。

図1●lsコマンドでカレント・ディレクトリの詳細情報を表示した例
図1●lsコマンドでカレント・ディレクトリの詳細情報を表示した例
各ファイルやディレクトリのアクセス権も確認できる。
[画像のクリックで拡大表示]

 例えば「rw-r-----」というファイルのアクセス権は

・所有者は読み書き可能(rw)
・同一グループは読み出し可能(r)
・その他はアクセスできない

となります。

 3桁ごとにrが4,wが2,xが1として足し算を行い,3桁の数字で表すことを「アクセス権の8進表記」と呼びます。上記の例は,「640」になります。

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

 ファイルに書き込み権限がないと,ファイルの内容を直接修正できません。例題にあった「$ date >> file」は直接の修正なので,ファイルへの書き込み権限がないと実行できません。しかし,ディレクトリの書き込み権限があると,ディレクトリ内にあるファイルの作成や削除ができます。ファイルを削除し,同じ名前のファイルを作成すれば実質的な修正も可能です。

 本当に修正したくないファイルは,書き込みを禁止したディレクトリに保存するか,ディレクトリのアクセス権を変更する必要があります。

アクセス権の変更

 アクセス権の変更は,chmodコマンドを利用します。所有者の書き込み権限を削る場合は,次のように実行します。

$ chmod u-w ファイル名もしくはディレクトリ名

 「u」は所有者を表します。同一グループは「g」,その他は「o」,すべては「a」を指定します。「-」は削除する場合で,加える場合は「+」を指定します。所有者の権限をrwxにする場合は「u=rwx」とします。

 8進表記を使ってアクセス権を「644」に変更する場合は,次のように実行します。

$ chmod 644 ファイル名もしくはディレクトリ名

所属の変更

 前述したように,各ファイルやディレクトリには,「所有者」と「グループ」が登録されています。ファイルを作成すると,所有者にはファイルを作成したユーザー,グループは所有者の所属するグループ(大抵はユーザー名と同一のグループ)が指定されます。

 「所有者」と「グループ」はコマンドで変更できます。

■所有者の変更
$ chown ユーザー名 ファイル名もしくはディレクトリ名

■グループの変更
$ chgrp グループ名 ファイル名もしくはディレクトリ名

新規作成時のアクセス権

 Linuxでは,ファイルやディレクトリを新規作成すると,デフォルト(初期設定)のアクセス権は次のようになります。

・ファイルは666(rw-rw-rw-)
・ディレクトリは777(rwxrwxrwx)

 ところが,Linuxディストリビューションによっては,デフォルトのアクセス権が異なる場合があります*2。特に,umaskコマンドを使って,デフォルトのアクセス権がユーザーごとに変更されていることがあります。

 「$ umask」と実行すると,3桁もしくは4桁の数値が表示されます。この3桁(4桁の場合は下3桁)が「マスク値」と呼ばれます。マスク値は,前述のアクセス権の8進表記と関係があります。マスク値が「002」の場合,これをrw x -で表記すると「-------w-」になります。「マスク値が002」は,「『その他』の書き込み権限を許可しない(マスクする)」ことを表します。このとき新規でファイルを作成すると,アクセス権は「664(rw-rw-r--)」になります。ディレクトリの場合は,「775(rwxrwxr-x)」になります。

 マスク値の変更は,「$ umask 新しいマスク値」でできます。

類題

Q1 umaskコマンドを実行すると「026」と表示される状態でファイルを作成した。アクセス権はどのように設定されるか。

(A) rwxr-x--x
(B) rw-r--r--
(C) rw-rw-rw-
(D) rw-r-----

【問題と類題の解答は次ページ】