このセクションでは自宅サーバーとしてLinuxを扱ううえで役に立つ基本操作基礎知識テクニックについて初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
LinuxOSの使いこなし術

LinuxOSを使いこなす

クライアントOSとの違い

絶対パスと相対パス

"パスが通っている"とは?

"/"と"."と".."の意味

"."(ドット)ファイルについて

ワイルドカードと正規表現

コマンドの強制終了

コマンド操作の補完機能

コマンド操作の履歴機能

リダイレクトとパイプ

属性とパーミッション〜その1

属性とパーミッション〜その2

アカウント情報ファイルの操作

ランレベルについて

システムが起動しないときは

ハードディスクの増設

アプリケーションの導入法


OSの種類で異なるパーミッションの考え方

ディレクトリ(またはフォルダ)、ファイルという単位でデータが構成されている多くの OS は、使い勝手を良くするために、あるいは セキュリティ を維持しやすくするするために、ディレクトリやファイルには、その内容や作成日時とは全く別に、 「属性」 というものが付与できるようになっています。

どういった属性が付与可能で、その属性がどういった振る舞いをするかはOSの種類によって様々です。

例えば WindowsOS の場合、ファイルが実行できるものかどうかという区別や、ファイルと アプリケーション との結びつきを示す 「関連付け」 と呼ばれるものなどについては、ファイル名の 「拡張子」 で属性を決定します。

また、ファイルを不可視にしたり(隠しファイル属性)、書き込み不可にしたり(読み取り専用属性)、という設定については、ファイル名とは無関係にファイルシステムが設定を請け負います。

更に、 サーバー 系のWindowsOSや、 Windows2000 WindowsXP Professional、 WindowsVista Windows7 のビジネスモデルなどの上位の クライアント 向けOS場合には、任意のディレクトリに対して複数の ユーザーアカウント 、あるいは複数のユーザーグループアカウント単位での 「アクセス制限」 を設けることができます。これもファイルシステムレベルで管理されます。

WindowsOSがこのような複雑な管理方式になっているのは、ネットワークでの使用を前提としていなかった MS-DOS の頃からのファイルシステムを継承しながら、相互に ファイルサーバー として運用することを主な目的としなければならないためです。

一方、 WBEL CentOS を含む LinuxOS の他、 BSD 及びBSDをベースとする MacOSX などの UNIX 系OSは、WindowsOSとは全く異なるシンプルな管理の方法をとります。

その理由はいうまでもなく、UNIX系OSがネットワーク接続での使用が前提の 「クライアントが直接サーバーに ログイン して操作する」 という方式でスタートしたという経緯があり、現在でもその方式で充分に運用可能であるためです。

UNIX系OSの場合、 アカウント によるアクセス制限のことを一般的に パーミッション と呼びます。

このパートでは、UNIX系OS共通のパーミッションの仕組みについて解説します。

なお、パーミッションを変更する コマンド については、 chmod,chown,chgrp各コマンドの説明 をご覧ください。

このページの先頭へ↑

UNIXのパーミッションの例

UNIX OS のディレクトリとファイルには、そのひとつひとつに、

「所有者」

「所有グループ」

「その他のユーザー」

という三種類の アカウント 属性があり、更にそれぞれのアカウント属性に対して、

「読み取り許可」

「書き換え許可」

「実行許可」

という三種類のファイルアクセス属性が設定されて パーミッション が構成されています。

例えば、 BIND のブートファイル "/etc/named.conf" BIND(〜9.3.x)を構成するファイルの説明 BIND(9.7.x〜)を構成するファイルの説明 には、 デフォルト で次のようなパーミッションが与えられています。

/etc/named.conf アカウント 読み取り許可 書き換え許可 実行許可
所有者 root ×
所有グループ root × ×
その他のユーザー - × ×

/etc/named.confのパーミッション

つまりこの "/etc/named.conf" というファイルは、システムを利用するすべてのアカウントがその内容を読むことができますが、内容を書き換えることができるのは "root" アカウントだけ、ということになります。

ディレクトリの場合、 実行許可 というパーミッションは、 ディレクトリを開くことを許可 をいう意味になります。

また、同じくBINDのゾーンファイルが格納されているディレクトリ "/var/named/" BIND(〜9.3.x)を構成するファイルの説明 BIND(9.7.x〜)を構成するファイルの説明 には、次のようなパーミッションが与えられています。

/var/named/ アカウント 読み取り許可 書き換え許可 実行許可
所有者 root
所有グループ named ×
その他のユーザー - × × ×

/var/named/のパーミッション

つまり、この "/var/named/" というディレクトリは、 "root" アカウントと、 "named" グループに属するアカウントにしか開くことができません。

また、 "named" アカウントは "/var/named/" を開くことはできますが、「書き換え許可」はありませんから、その中にファイルをコピーしたり、ファイルを作成したりすることはできません。その権限を持つのは "root" アカウントのみです。

ではもうひとつ、文字列の抽出 コマンド である "/bin/ grep " のパーミッションを示しましょう。

/bin/grep アカウント 読み取り許可 書き換え許可 実行許可
所有者 root
所有グループ root ×
その他のユーザー - ×

/bin/grepのパーミッション

"/bin/grep" のパーミッションは、全てのアカウントに対して実行許可が与えられている以外は、 "/etc/named.conf" と同じです。

さて、ここで間違えないようにしてほしいのは、「書き換え許可」のパーミッションは、あくまで「内容の書き換え」に対する許可ですから、対象となるディレクトリやファイルの移動、削除などは、 「書き換え許可のある所有者」 のみが行うことができる、ということです。

同様に、パーミッションそのものの変更は、パーミッションの内容に関係なく、そのディレクトリやファイルの所有者のみが行うことができる行為です。

ただしいかにrootアカウントといえども、実行許可のないファイルは実行できません。
つまり実行許可は、許可というより「属性」に近いと考えるべきでしょう。
もちろん、rootアカウントは任意のファイルに実行許可を与えることができますから、すべての実行型ファイルを実行可能だといえなくはありません。

ただし、 "root" アカウントだけが例外的に、システム上のすべてのディレクトリとファイルに対して、内容の書き換えや削除、移動、パーミッションの変更を無条件に行うことができます。

もちろん、 "root" アカウントは、任意のディレクトリやファイルの、所有者や所有グループも自由に変更することもできます。

これで大体のイメージは掴めたかもしれませんが、なじみの深い WindowsOS のファイルアクセス制御のルールとは根本的に異なりますので、WindowsOSに詳しい方にはそのことが先入観になってかえって難しく感じるかもしれません。

そこで、以下にWindowsOSとの相違点を示します。

・UNIXでは、全てのディレクトリとファイルに、同じ形式でパーミッションが設定される。

WindowsOSの場合は、 ユーザーアカウント 単位でのアクセス制御が可能なのはフォルダ(ディレクトリ)に対してのみです。

これに対してUNIXでは、すべてのディレクトリとファイルに区別なくパーミッションが設定されます。

・UNIXでは、実行属性を付与しなければそのファイルを実行することができない。

WindowsOSの場合、実行ファイルは ".com" ".exe" ".bat" などの、システムの 環境変数 "PATHEXT" で設定された拡張子を付与することで実行形式として許可される、という仕組みになっています。

もちろんWindowsOSの場合もUNIX系OSの場合も、実行属性を与えて意味のあるファイルは、 バイナリ 形式の実行プログラムか、 シェル スクリプト などの実行型 テキスト ファイルということになります。
ただのデータファイルに実行属性を付けても、何の意味もないことはお解かりと思います。

UNIX系OSの場合はそういう仕組みではなく、パーミッションで実行属性を与えることになります。

従ってUNIXのファイルシステムでは、WindowsOSのように拡張子の種類で実行ファイルかどうかを判断することはできないということになります。

・UNIXでは、パーミッション以外の属性は存在しない。

UNIX系OSでは、WidnowsOSの隠しファイル属性に相当するものとして、 ドットファイル というルールがあります。
これはファイル名で決めたれたルールですから、属性ではありません。

WindowsOSのファイルシステムには、ユーザーアカウントとは無関係にシステム属性、読み取り専用属性、隠しファイル属性、アーカイブ属性という、主にファイルの保護やバックアップに関係した属性がありますが、UNIXには同様の属性はありません。

UNIX系OSのファイルシステムが難しく思えるもう一つの理由は、

「全てのディレクトリとファイルにパーミッションを設定しなければならない。」

という点にあると思います。

逆に、UNIXに慣れた人にとっては、フォルダ単位でしかアカウント制御ができず、属性を設定するのに「この場合は拡張子で、この場合は設定コマンドで。」というWindowsOSの方式はかえって煩わしく、難しいといえます。

WindowsOSとUNIXは多くの点で扱いが異なりますが、特にこのパーミッションの部分に関しては 「感覚的な」 レベルから仕組みが異なっていますから、 「これをWindowsOSの場合に置き換えると...」 という覚え方ではいつまで経っても身につきません。

最初はもちろん仕方がありませんが、いつかはWindowsOSで身につけた感覚を捨てて望むことこそ、パーミッションをマスターする早道ではないでしょうか。

このページの先頭へ↑

パーミッションの表記方法

UNIX OS パーミッション には、視覚的な解りやすさを重視した 「文字形式」 と、直感的な操作を重視した 「数字形式」 とがあります。

文字形式によるパーミッションの表記

ディレクトリやファイルを ls コマンドに"-l"オプションを付けて詳細表示を行ったときに表される表記方法です。

で示されている部分が、左から所有者の アカウント 、所有グループのアカウントとなります。
"/var/named" の場合は、所有者が "root" 、所有グループが "named" というわけです。
[root@web1 ~]# ls -l -d /var/namedEnter
drwxr-xr-x  4 root   named    4096  6月 17 08:11 /var/named
[root@web1 ~]# ls -l -d /var/named/named.caEnter
-rw-r--r--  1 named   named    2518 12月 24 2004 /var/named/named.ca
[root@web1 ~]#

上の で示した部分が パーミッション の文字形式による表記部分です。以下にその詳細を図解してみましょう。

文字形式によるパーミッション表記の例
文字形式によるパーミッション表記の例

一番先頭の一文字は種類を示します。ディレクトリの場合は "d" シンボリックリンク の場合は "l" 、ファイルの場合は "-" と表記します。もちろんこの部分はパーミッションではありません。2桁目からがパーミッションの表記になります。

パーミッション部分の最初の3桁は所有者のパーミッションです。左から読み取り許可 "r" 、書き換え許可 "w" 、実行許可 "x" を並べて表記します。許可しない部分には "-" を表記します。

次の3桁は所有グーループのパーミッション、最後の3桁はその他の任意のユーザーのパーミッションになります。表記の方法は所有者の場合と同じです。

文字形式の場合は、このように種類の一桁を含めた10桁の文字列になります。

数字形式によるパーミッションの表記

読み取り許可に "4" 、書き換え許可に "2" 、実行許可に "1" という数字を与え、所有者、所有グループ、その他、ごとに合計して3桁の数字で パーミッション だけを表す表記法です。

数字形式によるパーミッション表記の例
数字形式によるパーミッション表記の例

つまり、

[root@web1 ~]# ls -l -d /var/namedEnter
drwxr-xr-x  4 root   named    4096  6月 17 08:11 /var/named
[root@web1 ~]# ls -l -d /var/named/named.caEnter
-rw-r--r--  1 named   named    2518 12月 24 2004 /var/named/named.ca
[root@web1 ~]#

の場合、ディレクトリ "/var/named" のパーミッションは "755" 、ファイル "/var/named/named.ca" のパーミッションは "644" ということになります。

このページの先頭へ↑

覚えるべきパーミッションは数パターンでOK

パーミッション の組み合わせはON-OFFが9桁ですから、数学的に計算すると2の9乗=512パターンも存在することになります。

しかし実をいうと、通常使用されるパーミッションはわずか数種類に過ぎません。ですから、その組み合わせの多さに驚くことも恐れることもありません。

その一番大きな理由は、今回構築する サーバー の運用目的が、家庭内の少人数で利用する ファイルサーバー か、逆に不特定多数のアクセスを受ける 公開サーバー であり、基本的に 所有グループ単位での管理が不要だから です。

所有グループ単位でのアクセス制御が必要となるのは、例えば会社内の営業部や仕入部、総務部、といった、部課毎にアクセス権を設けるような場合が考えられます。

しかし、宅内サーバーのようにわずか数人でしか使用しないファイルサーバーの場合は、わざわざグループ分けして制御を複雑にする必要はないといえます。

Webサーバー の場合は不特定多数のユーザーからのアクセスを受けますが、これらのユーザーは各人が別々の アカウント ログイン するわけではなく、全員が同じアカウントを一時借用するに過ぎませんから、所有グループの概念は必要ありません。

また、 メールサーバー の場合は、サーバー上にメールボックスを持つ一人一人が個別の ユーザーアカウント を持つことになりますが、メールボックスとユーザーは原則として一対一で受信を行いますから、ここでもグループ分けの必要性はないといえます。

実際のところ、最近の LinuxOS ディストリビューション は、 useradd コマンド をオプションなしで実行すると、新規のユーザーアカウントが作られると同時に全く同じ名前のグループアカウントが作られ、新規のユーザーアカウントはそのグループアカウントに含まれる唯一ユーザーアカウントとして登録されます。

つまり、ユーザーアカウント "tanaka" はグループアカウント "tanaka" に属する唯一のユーザーアカウント、ユーザーアカウント "suzuki" は、グループアカウント "suzuki" に属する唯一のユーザーアカウント、という具合に登録されていくわけです。

これは、

「現在ではLinuxOS自身が、グループアカウントでユーザーアカウントを分けて管理するという手段を基本的に用いていない。」

ということを意味します。極端にいえば、現在のLinuxOSのサーバーシステムでは、 「グループアカウントは原則としてアクセス制御に用いない」 ということが当たり前になっているわけです。

現実に、文字形式で "-rwxr-xr-x" 、数字形式で "755" のように、所有グループとその他のユーザーのパーミッションが同じになってケースがほとんどであるのは、実はそういう理由によるものです。

ただ、その理屈でいえば、 "-rwxrwxr-x(775)" 、でも "-rwx---r-x(705)" 、でも 同じことではないか、と思われるかもしれませんが、それではもしも何らかの事情で所有グループ単位での制御が必要となったとき、関係するすべてのファイルやディレクトリに対して、前者は非常に セキュリティ の甘い状態からの再設定を、後者は全くアクセス不能な状態からの再設定を行わなければならなくなるため、どちらにせよ好ましいものではないということになります。

という訳ですから、実際には所有者に関する3桁と、所有グループとその他をひっくるめた3桁の、合計6桁分だけを考えれば良いことになります。

このことは、現在のLinuxOSのディストリビューションの アーキテクチャ が、運用規模に関係なく「所有グループ」という概念を重視しない傾向にあり、宅内サーバーの構築にも決して不向きではないことを示しているといえるでしょう。

また、パーミッションのパターンが現実に少ない理由はその他にもあります。

例えば、ファイルを実行したり、ディレクトリを開いたりするには、当然のことながらそのファイルやディレクトリを読み取る必要があるわけですから、 「読み取り許可のない実行許可」 というのは通常あり得ません。

同じような理由から、 「読み取り許可のない書き換え許可」 という設定もまずあり得ないでしょう。

更に 「所有者に対するアクセス制限がその他のユーザーに対するアクセス制限よりも厳しい」 という設定も現実的ではありません。

そういった現実的な面を考慮すると、実際に設定されるパーミッションは、大体次のようなパターンになります。

誰でも実行可能なファイル"-rwxr-xr-x(755)"

システム上の大部分の コマンド シェル スクリプト がこの形式です。

また、一部の例外を除くと所有者は "root" 、所有グループも "root" に設定されています。

もちろん、すべてのユーザーに実行許可が与えられているからといって、任意のユーザーが実際にそのコマンドやシェルスクリプトを実行できるとは限りません。

例えばそのコマンドがrootアカウント以外にはアクセスできないファイルを参照しなければならないとか、そういう部分で実行を拒否されるケースが多数あります。

誰でもオープン可能なディレクトリ"drwxr-xr-x(755)"

システム上の大部分のディレクトリがこの形式です。

一部の例外を除くと所有者は "root" 、所有グループも "root" に設定されています。

もちろん、ディレクトリを開くことができても、その中にあるファイルの内容を見たり、実行したりできるかどうかはそれらのパーミッションに依存しますし、所有者以外はそのディレクトリにファイルをコピーしたり、作成したりすることはできません。

誰でも読み取り可能なファイル"-rw-r--r--(644)"

システム上、第三者に見られてもセキュリティ上問題のない大部分のファイルに設定されるパーミッションです。

例えば、システム上重要なものである サーバー アプリケーション の設定ファイルであっても、 ユーザーアカウント に関するアクセス制御の情報やパスワード情報などの記載がないものは基本的にはこのパーミッションが設定されます。

もちろん大部分が、所有者は "root" 、所有グループも "root" に設定されています。

誰でも書き込み可能なディレクトリ"drwxrwxrwx(777)"

ファイルサーバー として複数のアカウントでの書き込みが必要な共用ディレクトリや、作業用のディレクトリなどに設定されるパーミッションです。

対象のディレクトリの中に、任意のユーザーアカウントで任意のファイルを書き込むことが可能です。

自由に書き込みができるということは、それだけ セキュリティ が低いということですから、扱いには注意が必要です。

誰でも書き込み可能なファイル"-rw-rw-rw-(666)"

Webサーバー CGI などの サーバーサイドアプリケーション を使用するとき、一時的なデータの書き込みに利用されるファイルに与えられることの多いパーミッションです。

対象のファイルの中に、任意のユーザーが任意のデータを書き込むことが可能です。

自由に書き込みができるということは、それだけ セキュリティ が低いということですから、扱いには注意が必要です。

特に個人情報を記録するようなCGIを利用するときは注意が必要です。

所有者のみ読み書き可能なファイル"-rw-------(600)"

セキュリティ 上、書き込みだけではなくサーバー管理者や所有者以外には内容を見せることが好ましくないファイルに設定されるパーミッションです。

例えば、システムのパスワードを記述したファイルや、 FTPサーバー など「外部からの書き込み」が可能な サーバー アプリケーション の設定ファイル、更に ログ ファイルの多くがこの形式です。

このページの先頭へ↑

パーミッションについてその他

実際に パーミッション を変更するには、 chmod コマンド 、所有者や所有グループを変更するには chown chgrp コマンドを使用します。

また、実はこのパートで説明した以外にも、いくつか特殊なパーミッションの設定が存在しますが、それは 特殊なパーミッションの説明 で説明します。

サーバー 構築の作業の大半は、サーバー アプリケーション の設定ファイルの修正ですが、ほとんどの場合は適切なパーミッションが設定された デフォルト の設定ファイルが準備されていますから、基本的にはパーミッションを変更する必要はないはずです。

ただ、 BIND のゾーンファイルや、 vsftp のユーザーアクセス制限リストのように、新規に設定ファイルファイルを作成しなければならない場合もありますが、こういう場合には 「サーバーアプリケーションから同じ扱いを受ける別の設定ファイル」 を、 "-p" オプション付きの cp コマンドでコピーして使えば、パーミッションの間違いでの動作不具合を防ぐことができます。

さて、サーバーアプリケーションの設定作業は、その大部分を "root" アカウントで行うことになります。

このパートで説明したとおり、システム最高管理者アカウントである "root" は、ファイルの所有者が何であろうと、パーミッションが何であろうと完全なアクセス権を持っていますから、どんな作業であっても実行されてしまいます。これは煩わしさがない反面、非常に危険なことといえます。

"root" アカウントで何かの作業を行うときは、くれぐれもご注意ください。

このサイトは リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。今のところ更新予定はありませんのでご了承ください。
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。