この章では,次のような項目について説明することにより,システムあるいはファイルおよびディレクトリへのアクセスを制御する方法を説明します。
パスワード,グループ,およびシステム・セキュリティ (5.1 節)
ファイルおよびディレクトリ許可 (5.2 節)
ファイルおよびディレクトリ許可の表示および設定 (5.3 節)
所有者とグループの変更 (5.8 節)
ファイル・アクセス ID の変更 (5.6 節)
スーパユーザ (5.7 節)
セキュリティに関する追加情報 (5.9 節)
この章で説明する例に従って実際に操作することにより,上記のトピックについて理解することができます。
例を実行するためには,まずシステムにログインする必要があります。 また,ログイン・ディレクトリには次のファイルおよびディレクトリが必要です。
file1
,file2
,file3
,record1
,record6
の各ファイル
file1
,file2
,file3
,notes
の各ファイルおよび
newstatus
サブディレクトリを含む
reports
サブディレクトリ
file1
,file2
,file3
,notes
の各ファイルおよび
status
サブディレクトリを含む
project
サブディレクトリ
上記の名前とは異なるファイル名を使用している場合は,適当に置き換えて例を実行してください。
5.1 パスワード・セキュリティ・ファイルとグループ・セキュリティ・ファイル
ユーザがシステムにログインするためには,ユーザ・アカウントを作成しておく必要があります。 通常,ユーザ・アカウントの追加はシステム管理者が行います。 ユーザ・アカウントの追加は日常的な作業ですが非常に重要です。
ユーザ・アカウントが作成されると,新しいユーザに関する情報が次の 2 つのファイルに追加されます。
/etc/passwd
このファイルには,システムの全ユーザについてのユーザ情報が含まれている。
/etc/group
このファイルには,システム上の全グループについてのグループ情報が含まれている。
これらのファイルはシステムを使用できるユーザ名と各ユーザのアクセス権を定義します。
さらに,他のすべてのシステム・セキュリティ制御も,パスワード・セキュリティおよびグループ・セキュリティに依存しています。
以降の各項で,/etc/passwd
ファイルと
/etc/group
ファイルについて説明します。
5.1.1 /etc/passwd ファイル
/etc/passwd
ファイルには,システムの全ユーザのログイン・アカウントとその属性の定義が含まれています。
このファイルを変更するためには,スーパユーザ特権が必要です。
詳しくは5.7 節を参照してください。
/etc/passwd
ファイル内の各記述は,個々のユーザのログイン・アカウントを定義しています。
各フィールドはコロンで区切られ,最後のフィールドは改行復帰文字 (リターン) で終わります。
/etc/passwd
ファイルの情報は,次のような形式で記述します。
username:password:UID:GID:gecos:login_directory:login_shell
各フィールドの意味は次のとおりです。
ユーザのログイン名
暗号化されたユーザのパスワード
暗号化することによって,権限のないユーザまたはプログラムがパスワードを不正に使用するのを防止する。 パスワードが設定されていないユーザの場合,このフィールドは空白になる。
ユーザ ID
システムがユーザを識別するための固有の番号。
グループ ID
システムがユーザの省略時のグループを識別するための番号。 ユーザは 1 つまたは複数のグループに所属できる。
通常,このフィールドにはユーザ自身に関する一般情報が含まれ,インストレーション固有のフォーマットで保存される。 通常は,以下の情報をコンマで区切ったリストである。
フルネーム
オフィスの番号
オフィスの電話番号
自宅の電話番号
ログイン・ディレクトリ
システムにログインしたときの現在のディレクトリ。 ユーザが自分専用のファイルを格納するために使用する。
ログイン・シェル
システムにログインした時に
login
プログラムによって実行されるプログラム。
通常は,コマンドを解釈するために使用されるシェル・プログラム。
シェルについての詳細は,第 7 章および第 8 章を参照。
次に示すのは
/etc/passwd
ファイルの記述例です。
lee:NebPsa9qxMkbD:201:20:Lee Voy,sales,x1234:/users/lee: \ /usr/bin/posix/sh
ユーザ・アカウント
lee
はユーザ ID が 201 で,グループ ID が 20 です。
Lee のフルネームは Lee Voy で,所属は営業,内線番号 1234 です。
ログイン・ディレクトリは
/users/lee
で,POSIX シェル (/usr/bin/posix/sh
) がコマンド・インタプリタとして定義されます。
パスワード・フィールドには暗号化された Lee のパスワードが記述されています。
5.1.2 /etc/group ファイル
/etc/group
ファイルには,システムを使用するすべてのグループのログイン・アカウントの定義が含まれています。
このファイルを変更するためには,スーパユーザ特権を必要とし,root としてログインする必要があります。
ユーザ名は 'etc/group' ファイルに追加します。
詳細は5.7 節を参照してください。
グループ・データベース内の各記述は,それぞれ 1 つのグループのログイン・アカウントを定義しています。 グループを定義することにより,共通の関心事のあるユーザや,同じプロジェクトにかかわっているユーザの間でファイルを共用することができます。
/etc/group
ファイルの各行は,4 つのフィールドで構成されています。
各フィールドはコロンで区切られ,最後のフィールドは改行復帰文字で終わります。
/etc/group
ファイルの情報は,次のような形式で記述します。
groupname:password:GID:user1[, user2, ...,
userN ]
各フィールドの意味は次のとおりです。
システムがグループを識別するための固有な文字列。
このフィールドは常に空。 このフィールドのエントリは無視される。
グループ ID
システムがグループを識別するための固有な番号。
グループに所属しているユーザのリスト。
オペレーティング・システムには,自分のファイルおよびディレクトリへのアクセスを制御するための多数のコマンドが用意されています。 ファイルやディレクトリは,許可を設定または変更することによって保護することができます。 許可とは,システムで作業しているユーザが格納データをどのように使用できるかを決定するコードです。
許可の設定または変更は,ファイルやディレクトリに対する保護の設定または変更と同じことです。 一般に次のような場合はデータを保護します。
ファイルあるいはディレクトリに機密情報が含まれている場合
他のユーザがファイルあるいはディレクトリを勝手に変更するのは問題がある場合
注意
多くの場合,システムでは個々の動作をお互いに通知することなく複数のユーザが同時に同じファイルの変更を行うことが可能です。 この場合,システムは最後のユーザが行った変更を保管してファイルをクローズします。 そのため,それ以前に他のユーザが行った変更は失われます (テキスト・エディタのなかには,このことをユーザに警告するものもあります)。 このような問題を避けるために,許可されたユーザだけがファイルを修正できるようにファイル許可を設定すると良いでしょう。 また,各ユーザは,ファイルを使用した時期および理由を通知し合うのが望ましいでしょう。
各ファイルおよびディレクトリには,関連する 9 つの許可を設定することができます。
ファイルとディレクトリに対しては次の 3 種類の許可を設定できます。
r
(読み取り)
w
(書き込み)
x
(実行)
また,これら 3 種類の許可は,次の 3 つのクラスのユーザに対して設定できます。
u
(ユーザ/所有者)
ファイルまたはディレクトリのユーザ/所有者は,通常それらを作成したユーザです。
g
(グループ)
グループは,ファイルが所属するグループを指定します。
所定のグループに属するすべてのユーザは,そのグループのアクセス許可を取得します。
o
(他のすべてのユーザ; ワールドとも呼ばれる)
すべてのユーザはその他のアクセス許可を取得します。
注意
グループ・アクセス許可はそのグループに属するすべてメンバーに与えられます。 その他のアクセス許可は,すべてのユーザーに与えられます。 特定のユーザあるいはグループ・メンバーに対してアクセス許可を設定するには,アクセス制御リスト (ACL) を使用します。 ACL についての詳細は付録 Gを参照してください。
表 5-1 に示すように,3 種類の許可は,ファイルとディレクトリとで多少意味が異なります。
許可 | ファイル | ディレクトリ |
r
(読み取り) |
内容の表示および印刷が可能。 | 内容の参照は可能だが探索はできない。
通常,r
と
x
を一緒に指定する。 |
w
(書き込み) |
内容の変更および削除が可能。 | ファイルあるいはサブディレクトリの追加および削除が可能。 |
x
(実行) |
ファイルをプログラムとして使用できる。 | ディレクトリの探索が可能。 |
5.3 ファイル許可およびディレクトリ許可の表示 (ls コマンド)
現在のファイル許可を表示するには,ls
コマンドに
-l
フラグを指定して使用します。
1 つのファイルあるいは指定したファイルの許可を表示する場合は,次の構文を使用します。
$ ls -l filename
filename 変数には,ファイル名あるいはスペースで区切ったファイル名リストを指定します。 パターン照合文字を使用してファイルを指定することもできます。 詳細については5.4.1.3 項を参照してください。
現在のディレクトリにあるすべてのファイルの許可を表示するには,filename
変数を省略して
ls -l
コマンドを入力します。
$ ls -l total 7 -rw-r--r-- 1 larry system 101 Jun 5 10:03 file1 -rw-r--r-- 1 larry system 171 Jun 5 10:03 file2 -rw-r--r-- 1 larry system 130 Jun 5 10:06 file3 drwxr-xr-x 2 larry system 32 Jun 5 10:07 project -rw-r--r-- 1 larry system 0 Jun 5 11:03 record1 -rw-r--r-- 1 larry system 0 Jun 5 11:03 record6 drwxr-xr-x 2 larry system 32 Jun 5 10:31 reports $
上記の表示の先頭の文字列は,そのファイルまたはディレクトリの許可を示しています。
たとえば,4 番目のエントリの
drwxr-xr-x
は,次のことを示しています。
最初の
d
-- ディレクトリ。
次の
rwx
--所有者によるディレクトリ内容の参照,ディレクトリへの書き込み,ディレクトリの検索が可能。
次の
r-x
--所有者と同じグループに属するユーザによるディレクトリ内容の参照および検索は可能だが,書き込みはできない。
次の
r-x
--他のすべてのユーザによる参照および検索は可能だが,書き込みはできない。
上記の表示の 3 番目のフィールド (larry
) はファイルの所有者を示し,4 番目のフィールド (system
) はファイルが所属するグループを示しています。
特定のディレクトリの許可を表示するには,次のように
ls -ld
コマンドを使用します。
$ ls -ld reports drwxr-xr-x 2 larry system 32 Jun 5 10:31 reports $
ファイルまたはディレクトリに関する許可を一括して,許可コードと呼びます。 図 5-1 に示すように,許可コードは 4 つの部分から構成されています。
最初の 1 文字はファイル・タイプを示します。
ダッシュ (-) は通常ファイル,d
はディレクトリ,l
はシンボリック・リンクを示します。
それ以外の文字はいずれも入出力装置を示します。
次の 3 文字の許可フィールドはユーザ (所有者) 許可を示します。 この許可は読み取り,書き込み,実行のいずれの組み合わせも可能です。
次の 3 文字の許可フィールドはグループ許可を示します。
次の 3 文字の許可フィールドは他のすべてのユーザについての許可を示します。
ファイルまたはディレクトリを作成する際に,システムはあらかじめ決められた許可コードを自動的に設定します。 ファイル許可コードの例を次に示します。
-rw-r--r--
このファイル許可コードは,所有者に対して読み取りおよび書き込み許可を与えているのに対し,グループと他のすべてのユーザに対しては,読み取り許可のみを与えています。 許可フィールドに表示されるダッシュ (-) は,指定したユーザ・クラスではその操作が許可されていないことを示します。
ディレクトリ許可コードの例を次に示します。
drwxr-xr-x
このディレクトリ許可コードは,所有者に対して読み取り,書き込み,および探索許可を与えているのに対し,グループと他のすべてのユーザに対しては,読み取りおよび探索許可を与えています。
システムが提供する省略時の許可コードを使用すれば,ファイルやディレクトリを作成するたびに明示的にコードを指定する必要はありません。
ユーザ固有の省略時の許可コードを作成したい場合は,umask
コマンドを使用してユーザ・マスクを変更する必要があります。
umask
コマンドについては,5.5 節を参照してください。
注意
ls
コマンドで表示されるファイルの所有者,グループ,およびその他のアクセス許可により,プロセスによるファイルへのアクセスが許可されていたとしても,そのファイルの ACL がそのプロセスによるアクセスを認めていない場合があります。 この現象は,そのファイルの属するグループと同じグループへのアクセス許可をそのプロセスが持っている場合であっても発生することがありえます。 ACL についての詳細は 付録 G を参照してください。
5.4 ファイルおよびディレクトリ許可の設定 (chmod コマンド)
許可を変更できると,自分のデータの使用方法を自由に制御することができます。
ファイルあるいはディレクトリの許可を設定または変更する場合は,chmod
(change mode) コマンドを使用します。
たとえば,ユーザはファイルを読み取ったり,修正したり,実行したりすることを自分に許可しています。 通常は,同じグループの他メンバにも,ファイルの読み取りを許可しています。 作業の性質とグループの構成によっては,他のメンバにファイルの修正または実行を許可する場合もあるでしょう。 ただし,他のすべてのシステム・ユーザには,ファイルにアクセスすることを禁止するのが一般的です。
注意
ファイルまたはディレクトリの許可を変更するためには,ファイルまたはディレクトリの所有者である (またはスーパユーザの権限を持っている) 必要があります。 つまり,
ls -l
コマンドを実行したときに,ユーザ名がそのファイルのリストの 3 番目のフィールドに表示されなければなりません。
重要なことですが,ファイルやディレクトリへのアクセスをどんなに制限しても,スーパユーザはいつでもその制限を無効にできるということを認識しておいてください。
たとえば,chmod
コマンドを使用して,自分しかファイル
report20
にアクセスできないように指定したとします。
しかし,そのように設定しても,スーパユーザはそのファイルにアクセスできます。
詳細は,5.7 節を参照してください。
chmod
コマンドを使用して許可を設定する場合には,次の 2 通りの指定方法があります。
以降の各項で,許可を英字と演算記号で指定する方法と,8 進数で指定する方法について説明します。
5.4.1 英字と演算記号による許可の指定
英字と演算記号を使用して,ファイルおよびディレクトリの許可を変更することができます。
英字と演算記号を使用するときの
chmod
コマンドの形式は次のとおりです。
chmod
userclass-operation-permission filename
userclass-operation-permission 変数は,有効にしたいユーザ・クラス/グループ/操作/許可コードを指定する 3 つのコードを表します。 filename 変数には,許可を変更したいファイルの名前を指定します。 パターン照合文字を使用してファイルを指定することもできます。 詳しくは5.4.1.3 項を参照してください。
ユーザ・クラス,操作,および許可は次のように定義されます。
userclass を表すための英字
u
ユーザ (所有者)
g
グループ
o
他のすべてのユーザ (所有者とグループを除く)
a
全ユーザ (所有者,グループ,他のすべてのユーザ)
operation を表すためのシンボル
+
許可の追加
-
許可の削除
=
以前の設定を無視して許可の割り当て
r
読み取り
s
ユーザまたはグループ ID の設定。
この許可ビットでは,ファイルが起動されたときに,ファイルの所有者またはグループ所有者を実効ユーザ ID または実効グループ ID として設定します。
この許可設定を u または g オプションと組み合わせて使用すると,通常はその他のユーザにはアクセスできないファイルに対して,一時的または制限付きのアクセスを許可できるようになります。
詳細リスト (ls を参照) では,ユーザまたはグループの実行許可の位置に s が表示されて,ファイルが set-user-ID または set-group-ID の許可モードで実行されることを示します。
w
書き込み
x
実行
次の例では,まず
ls -l
コマンドを入力して,
ファイル
file1
の許可を表示します。
$ ls -l file1 -rw-r--r-- 1 larry system 101 Jun 5 10:03 file1 $
所有者 (larry) に読み取りと書き込み許可があるのに対し,グループおよび他のユーザには読み取り許可しかないことに注意してください。
ここで,フラグ
go+w
を指定して
chmod
コマンドを入力します。
このコマンドは,グループ (g
) と他のユーザ (o
) の両方に,すでに認められている読み取りアクセスに加えて,file1
に対する書き込み (+w
) アクセスを与えることによって,許可を拡張するものです。
$ chmod go+w file1 $
次に,そのファイルの新しい許可を表示します。
$ ls -l file1 -rw-rw-rw- 1 larry system 101 Jun 5 10:03 file1 $
これで,グループと他のすべてのシステム・ユーザに,file1
に対する書き込み許可が与えられました。
5.4.1.2 ディレクトリ許可の変更
ディレクトリ許可の変更手順は,ファイル許可の変更手順と同じです。
ただし,ディレクトリについての情報をリストするときは,ls -ld
コマンドを使用します。
$ ls -ld project drwxr-xr-x 2 larry system 32 Jun 5 10:07 project $
ここで,chmod g+w
コマンドで許可を変更し,グループ (g
) にディレクトリ
project
に対する書き込み許可 (+w
) を認めるようにします。
$ chmod g+w project $ ls -ld project drwxrwxr-x 2 larry system 32 Jun 5 10:07 project $
ディレクトリ内のすべてのエントリの許可に対して同じ変更を行いたい場合は,chmod
コマンドでパターン照合文字のアスタリスク (*) を使用することができます。
パターン照合文字については第 2 章を参照してください。
次の例では,chmod g+x *
コマンドは,グループ (g
) に対し,
現在のディレクトリ内のすべてのファイル (*) について実行 (x
) 許可を与えます。
$ chmod g+x * $
ここで,ls -l
コマンドを入力し,グループに対して現在のディレクトリ内のすべてのファイルについての実行 (x
) 許可が与えられたことを確認してください。
$ ls -l total 7 -rw-rwxrw- 1 larry system 101 Jun 5 10:03 file1 -rw-r-xr-- 1 larry system 171 Jun 5 10:03 file2 -rw-r-xr-- 1 larry system 130 Jun 5 10:06 file3 drwxrwxr-x 2 larry system 32 Jun 5 10:07 project -rw-r-xr-- 1 larry system 0 Jun 5 11:03 record1 -rw-r-xr-- 1 larry system 0 Jun 5 11:03 record6 drwxr-xr-x 2 larry system 32 Jun 5 10:31 reports $
絶対許可割り当て (=) は,許可が以前どのように設定されていたかに関係なく,ファイルについてのすべての許可を再設定します。
例 5-1
では,ls -l
コマンドで
file3
ファイルの許可を表示した後,
chmod a=rwx
コマンドで,すべてのユーザ (a
) に対し 3 つの許可 (rwx
) すべてを与えます。
例 5-1: 絶対許可の設定
$ ls -l file3 -rw-r-x-r-- 1 larry system 130 Jun 5 10:06 file3 $ chmod a=rwx file3 $ ls -l file3 -rwxrwxrwx 1 larry system 130 Jun 5 10:06 file3 $
許可を削除するために絶対割り当てを使用することもできます。
例 5-2
では,chmod a=rw newfile
コマンドは,
ファイル
file3
からすべてのユーザ (a
) の実行許可 (x
) を削除します。
例 5-2: 絶対許可の削除
$ chmod a=rw file3 $ ls -l file3 -rw-rw-rw- 1 larry system 130 Jun 5 10:06 file3 $
8 進数を使用して,ファイルおよびディレクトリの許可を変更することもできます。
8 進数許可コードを
chmod
コマンドで使用するときは,次の形式でコマンドを入力します。
chmod
octalnumber filename
octalnumber 変数は,所有者,グループ,および他のユーザについての許可を指定する 3 桁の 8 進数です。 filename 変数は,許可を変更するファイルの名前です。 これはファイル名でも,スペースで区切ったファイル名リストでもかまいません。 パターン照合文字を使用してファイルを指定することもできます。 詳しくは5.4.1.3 項を参照してください。
8 進数は各タイプの許可に対応します。
4 =
r
ead 2
=
w
rite 1 = ex
ecute
許可のグループ (許可フィールド) を指定するには,該当する 8 進数を加算します。
r
,w
,および
x
はそれぞれ,読み取り,書き込み,および実行を示します。
3 =
-wx
(2 + 1) 6
=
rw-
(4 + 2) 7
=
rwx
(4 + 2 + 1) 0
=
---
(許可なし)
表 5-2 は,8 通りの許可の組み合わせを列記したものです。
8 進数 | 2 進数 | 許可 | 説明 |
0 | 000 | なし |
許可は一切与えられていない |
1 | 001 | --x |
実行 |
2 | 010 | -w- |
書き込み |
3 | 011 | -wx |
書き込み/実行 |
4 | 100 | r-- |
読み取り |
5 | 101 | r-x |
読み取り/実行 |
6 | 110 | rw- |
読み取り/書き込み |
7 | 111 | rwx |
読み取り/書き込み/実行 |
ファイルまたはディレクトリの完全な許可コードは 3 桁の 8 進数で指定され,それぞれの数字が所有者,グループ,および他のユーザに対応します。 表 5-3 に,いくつかの代表的な許可コードと,それらと許可フィールドとの関係を示します。
8 進数 | 所有者フィールド | グループ・フィールド | 他のユーザ・フィールド | 完全なコード |
777 | rwx |
rwx |
rwx |
rwxrwxrwx |
755 | rwx |
r-x |
r-x |
rwxr-xr-x |
700 | rwx |
--- |
--- |
rwx------ |
666 | rw- |
rw- |
rw- |
rw-rw-rw- |
次の例では,8 進数を使用して
file3
の許可を変更しています。
$ ls -l file3 -rw-rw-rw- 1 larry system 130 Jun 5 10:06 file3 $ chmod 754 file3 $ ls -l file3 -rwxr-xr-- 1 larry system 130 Jun 5 10:06 file3 $
ファイルやディレクトリを作成すると,それに対して省略時の許可が設定されます。 この省略時の許可は,最初はオペレーティング・システムまたは実行しているプログラムのいずれかによって設定されます。 これにより,ファイルやディレクトリを作成するたびに,許可コードを指定する手間が省けます。 オペレーティング・システムは,省略時の許可として,実行ファイルに対しては 777 を,それ以外のファイルに対しては 666 を割り当てます。
ファイルまたはディレクトリの作成時にプログラムが設定する許可をさらに制限する場合は,umask
コマンドを使用してユーザ・マスクを指定します。
ユーザ・マスクは,ファイルまたはディレクトリが作成されるときにアクセス許可を決定する数値です。 したがって,ファイルまたはディレクトリを作成するとき,作成用プログラムが指定する許可から,umask 値が禁止するものをマイナスした結果に設定されます。
umask
コマンドの形式は次のとおりです。
umask
octalnumber
octalnumber 変数は,省略時の許可 (777 または 666) からマイナスする許可を指定する 3 桁の 8 進数です。
ユーザ・マスクの設定は,5.4.2 項で説明している許可ビットの設定に非常に似ています。 ファイルやディレクトリの許可コードは 3 桁の 8 進数で指定されます。 各桁が許可の種類を表します。 各桁の位置 (1 桁目,2 桁目,または 3 桁目) は,下記に対応する 3 ビットを表します。
1 桁目はファイルの所有者 (ユーザ) 用
2 桁目はファイルのグループ用
3 桁目はその他のユーザ用
ただし,ユーザ・マスクを設定すると,ファイルを作成するプログラムが要求する許可にかかわりなく,どの許可を与えないかを実際に指定することになります。
表 5-4
は,可能な 8 通りの
unmask
許可の組み合わせをわかりやすく列記したものです。
umask
許可の値は,通常の許可コードで指定される値の逆です。
これらの許可値は,ファイル作成プログラムによって設定される値に対して適用されます。
8 進数 | 許可 | 説明 |
0 | rwx |
読み取り/書き込み/実行 |
1 | rw- |
読み取り/書き込み |
2 | r-x |
読み取り/実行 |
3 | r-- |
読み取り |
4 | -wx |
書き込み/実行 |
5 | -w- |
書き込み |
6 | --x |
実行 |
7 | なし |
許可は一切与えられていない |
たとえば,027 というユーザ・マスクを指定すると,次のような許可が設定されます (ファイルは実行ファイルとします)。
所有者には,ファイル作成プログラムが要求するすべての許可が認められる。
グループには書き込み許可は与えられない。
その他のユーザには許可は全く与えられない。
自分のファイルおよびディレクトリに設定するユーザ・マスク値は,情報資源をシステムでどのように共用するかによって異なります。 次のガイドラインを参考にしてください。
非常にオープンなコンピュータ環境では,ユーザ・マスク値として 000 を指定するとよいでしょう。 これはファイルおよびディレクトリのアクセスに一切制限を認めないものです。 この場合,プログラムがファイルを作成して許可コードを指定するとき,ユーザ・マスクは,作成プログラムが指定した許可に一切制限を加えないことになります。
もう少し安全性が要求される環境では,ユーザ・マスク値として 066 を指定するとよいでしょう。 これは所有者には全面的にアクセスを認めますが,他のすべてのユーザには,ファイルの読み取りおよび書き込みを禁じるものです。 この場合,ファイルが作成されるとき,許可は,作成プログラムが指定する許可から,所有者以外のすべてのユーザに読み取り/書き込みアクセスを禁止するユーザ・マスク制限をマイナスした値に設定されます。
安全性が非常に重視される環境では,ユーザ・マスク値として 077 を指定するとよいでしょう。 これは,ユーザだけがファイルにアクセスできるということです。 この場合,ファイルを作成するとき,許可は,作成用プログラムが指定する許可から,ユーザ以外のすべての人にファイルの読み取り,書き込み,実行を禁止するユーザ・マスク制限をマイナスした値に設定されます。
umask
がどのように機能するかを理解するため,次のコマンドを入力したとしましょう。
$ umask 037
このコマンドは 740 という許可コードを設定し,次のような結果が生じます (ファイルが実行ファイルである場合)。
所有者にはすべての許可が認められる。
グループのメンバには書き込みおよび実行許可は認められない。
他のユーザには一切の許可が認められない。
ファイルを作成した直後は,省略時の設定で,エディタは常に次の省略時の許可を割り当てます。
つまり,所有者にはすべての許可が認められ,他のすべてのユーザには読み取りと実行許可だけが認められます。
ただし,以前に 037 というユーザ・マスクを設定しているため,ファイル許可にさらに制限を加えます。
その結果,所有者には相変わらずすべての許可が認められていますが,グループはファイルを実行できず,また他のすべてのユーザには許可が一切認められないことになります。
5.5.1 umask の設定
umask
コマンドは 2 通りの方法で実行することができます。
ログイン・スクリプトに含める。
これはユーザ・マスクを指定するうえで最も一般的でかつ効率的な方法です。
こうしておくと,ログインするといつも,指定された値が自動的に設定されます。
ログイン・スクリプトについての説明は,第 7 章を参照してください。
ログイン・スクリプトに
umask
コマンドを記述する例については,第 8 章を参照してください。
ログイン・セッション中にシェル・プロンプトに対して入力する。
設定されるユーザ・マスク値はそのログイン・セッションについてのみ有効です。
テキスト・エディタによって作成されるファイルの許可を制限する際に,ユーザ・マスクがどのように機能するかを示す例として,次の操作を実行してみてください。
次のコマンドを入力して,自分のユーザ・マスクの現在値を調べる。
$ umask
ユーザ・マスク値が 000 であれば,ファイルを作成するプログラムが設定する許可に対して一切制限を加えません。 ステップ 3 に進んでください。
ユーザ・マスク値が設定されていれば,それを書き留めます。 その後,ステップ 2 に進んでください。
ユーザ・マスク値を 000 に設定する。
これにより,ファイルを作成するプログラムによって設定される許可に対して一切の制限を加えません。 ユーザ・マスクを設定する前に,現在のユーザ・マスク値を必ず書き留めておいてください。 再設定する必要が生じるかもしれません。
次のコマンドを入力します。
$ umask 000
ファイルを作成し,保管してから,エディタを終了する。
ls-l
コマンドを使用して,そのファイルの許可を表示する。
読み取り/書き込み許可がすべてのユーザに与えられているとします。
$ ls -l -rw-rw-rw- 1 user-name 15 Oct 27 14:42 yourfile $
次のコマンドを入力して,ユーザ・マスクを
022
に再設定する。
$ umask 022
ユーザ・マスク 022 は次のとおり許可制限を設定します。 つまり,所有者にはすべての許可が認められ,その他のすべてのユーザには読み取りおよび実行許可だけが認められます。
別のファイルを作成し,保管してから,エディタを終了する。
ls -l
コマンドを使用して,ファイルの許可を表示する。
$ ls -l -rw-r--r-- 1 user-name 15 Oct 27 14:45 yourfile2 $
ここで,ユーザ・マスク値 022 に従って,グループと他のすべてのユーザに対する書き込み許可が削除されます。
ユーザ・マスクを元の値または別の値 (任意) に再設定する。
注意
ユーザ・マスクでファイルやディレクトリへのアクセスにどんな制限を課しても,スーパユーザ特権を有するユーザは,その制限を無効にできます。 詳細は,5.7 節を参照してください。
ユーザ・マスクを指定して得られる結果が,意図したものと異なる場合は,システム管理者に問い合わせてください。
オペレーティング・システムでの省略時のユーザ・マスク値は 022 です。
これは所有者にはすべてのアクセスを許可し,グループのメンバや他のすべてのユーザにはファイルへの書き込みを禁じるものです。
ただし,ご使用のシステムの設定によってはユーザ・マスクの省略値が異なる場合もあります。
5.6 ファイルにアクセスするための ID の変更
su
コマンドを使用すれば,ログイン・セッション中に ID を変更することができます。
ID を変更する理由は,自分が所有していないファイルにアクセスできるようにするためです。
システムのセキュリティを保護するため,所有者またはシステム管理者の許可がない限り,別の ID を引き継ぐべきではありません。
su
コマンドを使用すれば,そのユーザのパスワードを知っている場合に限って,そのアカウントにログインできます。
su
コマンドはユーザを認証してから,
プロセスのユーザ ID と実効ユーザ ID の両方を,新たに指定されたユーザ ID の値に再設定します。
実効ユーザ ID とは,プロセスで現在有効なユーザ ID のことです。
ただし,それはログインしている人のユーザ ID ではないこともあります。
su
コマンドの形式は次のとおりです。
su
username
username 変数は,引き継ぎたい ID を持っている人のユーザ名です。
ID を変更した後,自分が引き継いだ ID を確認したい場合は,whoami
コマンドを使用してください。
このコマンドは自分が引き継いだ ID のユーザ名を表示します。
新しい ID の下での作業が完了したら,自分自身のログイン ID に戻ります。
これを行うには,Ctrl/D を押すか,または
exit
コマンドを入力します。
次の
例 5-3
では,Juan が Lucy の ID を引き継ぎ,コマンドでそのことを確認し,ファイルを削除してから,コマンドで自分のログイン ID に戻る方法を示しています。
例 5-3: su コマンドの使用
$ whoami [1] juan $ su lucy [2] Password: ... [3] $ whoami [4] lucy $ rm file9 [5] $ exit [6] $ whoami [1] juan $
whoami
コマンドで ID を確認しています。
[例に戻る]
su
コマンドで
lucy
の ID を使用できるようにしています。
[例に戻る]
セキュリティ上の理由から,入力したパスワードは画面には表示されません。 [例に戻る]
ID が
lucy
になっていることを確認しています。
[例に戻る]
ファイルを削除しています。 [例に戻る]
exit
コマンドを実行すると元の ID に戻ります。
[例に戻る]
詳しくは,
su
(1)whoami
(1)5.7 スーパユーザの概念
システムには,一般ユーザの許可を無効にするスーパユーザが存在します。 スーパユーザはルートとも呼ばれます。
ルート・ユーザはシステムの実行に関する絶対的権限を持っています。 このユーザにはすべてのファイルとすべての装置にアクセスする権利があり,システムに対して変更を行うことができます。 ルート・ユーザはスーパユーザ特権を持っているユーザであるとも表現できます。
通常では一般ユーザが変更できないファイル (たとえば,/etc/passwd
) の編集
すべてのファイルの所有権と許可の変更
mount
や
reboot
のような制限付きコマンドの実行
システムで実行しているプロセスの強制終了
ユーザ・アカウントの追加,削除
システムのブートおよびシャットダウン
システムのバックアップ
上記のタスクの多くは通常,システム管理者が実行するものです。 これらの作業を実行するシステム管理者はスーパユーザ特権を必要とします。 システム管理者の任務はシステムを管理することであり,上記タスクの実行の他に,新しいソフトウェアをインストールしたり,システム性能を解析したり,ハードウェア故障を通報したりすることが含まれます。
ユーザがシステムのシステム管理者であるかどうか,つまり,ルート特権を持つか持たないかは,システム環境によります。 サイト構成および担当する業務により,ユーザの特権が決定されます。
たとえば,端末またはワークステーションから集中システムにアクセスして作業を行う場合は,おそらくシステム管理者ではなくルート特権を持たないと思われます。 このような場合は,システムの維持,構成,およびアップグレードに責任を負うシステム管理者が,ルート特権を持つことになります。
独立した,あるいは他のワークステーションまたはシステムとネットワークで接続されたワークステーションから自分のタスクを遂行している場合は, たしかに自分のワークステーションについてルート特権を持っているかもしれませんが,サイトのシステム管理者ではありません。 このような場合には,自分のワークステーションだけを管理できます。 共用マシンおよびネットワークはシステム管理者が管理することになります。
ルート・ユーザになるためには,su
コマンドを使用しますが,ルート・ユーザのパスワードも知っていなければなりません。
su
次の例は,Juan が管理者のタスクを遂行するためにルート・ユーザとなる手順を示しています。
$ su Password: ... #
新しいプロンプトの番号記号 (#) は,Juan がルート・ユーザになり,新たにシェルが作成されたことを示します。
ルート・ユーザのシェルは
/etc/passwd
ファイルに定義されています。
これで Juan は管理者としてのタスクを遂行することができます。
注意
システムの不正使用によってデータの改ざんや破壊が発生する可能性があるため,システムに対して絶対的権限を持っているルート・ユーザは,パスワードの保護には十分に気をつけてください。
ルート・ユーザとしての作業を完了したら,自分のログイン ID に戻ります。
これを行うには,Ctrl/Dを押すか,または
exit
コマンドを入力します。
その後,システム・プロンプトが表示されます。
5.8 所有者とグループの変更 (chown および chgrp コマンド)
許可を設定するだけでなく,所有者やグループを変更することによっても,ファイルやディレクトリへのアクセスを制御できます。
所有者を変更するときは
chown
コマンドを,また,グループを変更するときは
chgrp
コマンドを使用してください。
注意
chown
コマンドを使用するためには,スーパユーザ特権が必要です。 詳しくは5.7 節を参照してください。
chown
owner filename
owner 変数はファイルの新しい所有者のユーザ名です。 filename 変数は,所有権を変更する 1 つまたは複数のファイルのリストです。 パターン照合文字を使用してファイルを指定することもできます。 詳しくは5.4.1.3 項を参照してください。
chgrp
group file
group 変数は,新しいグループのグループ ID またはグループ名です。 ファイルのグループ所有権を変更するためには,ファイルの変更先のグループのメンバでなければなりません。 file 変数は,所有権を変更する 1 つまたは複数のファイルのリストを指定します。
詳しくは,
chown
(1)chgrp
(1)5.9 セキュリティに関する追加情報
ユーザのサイトで実施されているセキュリティ・ガイドラインは,ファイルを無断アクセスから保護するためのものです。 セキュリティ・ガイドラインについての詳細は,システム管理者に問い合わせてください。
さらに,信用の置けないソフトウェア (ソースのわからないものや,システム・セキュリティの点で妥当性が確認されていないソフトウェア) の実行は避けるのが賢明です。 プログラムを実行するときには,そのプログラムはユーザの持つ全アクセス権を有しているため,そのプログラムが機密ファイルに違法にアクセスして読んだり,または改変しても,それを妨げる手段は何もありません。
セキュリティを危うくする 3 種類のプログラムに留意すべきです。
トロイの木馬
トロイの木馬は,定義されたタスクを正しく遂行するか,または一見,遂行するように見えるプログラムです。 しかし,このプログラムは悪意のある隠れた機能も実行します。 トロイの木馬プログラムは,ユーザの意図するプログラムを実行するように見えますが,同時に望ましくない動作も実行します。 ユーザのファイルを改変または削除することによって破壊するか,あるいは違法なコピーを作ることによってその価値を危うくしないとも限りません。
代表的なトロイの木馬は
login
というプログラムです。
これはシステムのログイン・プロンプトを真似たプロンプトを画面に表示して,ユーザがユーザ名とパスワードを入力するのを待ちます。
プログラムはこの情報を,トロイの木馬を組み込んだユーザにメールまたはコピーします。
トロイの木馬が終了するとき,プログラムは
Login incorrect
と表示します。
その後,本当の
login
プログラムが実行されます。
ほとんどのユーザはパスワードを不正確に打ち込んだのだと思い,だまされたことには気付きません。
コンピュータ・ワーム
コンピュータ・ワームは,コンピュータ・ネットワークを動きまわって,それ自体のコピーを作るプログラムです。 たとえば,ログイン・コンピュータ・ワームはシステムにログインし,そのシステムに自らをコピーすると実行を開始し,また別のシステムにログインします。 こうして,このプロセスを無限に続けて行きます。
コンピュータ・ウイルス
コンピュータ・ウイルス・プログラムはトロイの木馬の一種です。 通常,トロイの木馬はお目当てのユーザ (一般には特権を持つユーザ) が実行してくれるのを受動的に待ちます。 しかしウイルスは,他の実行可能なファイルに侵入して自らを伝播させていきます。 そのため,プライバシーや完全性に対する脅威と被害の範囲が増大します。
システム管理者がインストールしたものではないプログラムには注意してください。 掲示板や信頼できないソースから入手したプログラムは,特に用心が必要です。 たとえプログラムのソース・コードがある場合でも,それが信頼に値するかどうかを確定することは,十分慎重にプログラムを検査したとしても常に可能なわけではありません。