Linux の 302 (Mixed Environment) 試験対策: Linux ファイルシステムと共有/サービス・パーミッション

Linux ファイルシステムでのファイル・パーミッションを理解する

システム管理者のための LPIC (Linux Professional Institute Certification) の LPI-302 試験に備えるために、Samba が Linux ファイルシステムとやりとりする方法やパーミッションを管理する方法を学んでください。

Sean A. Walberg, Senior Network Engineer

Photo of Sean WalbergSean Walberg はネットワーク・エンジニアであり、ネットワークについて 2 冊の本も書いています。これまで医療やメディアをはじめ、さまざまな業界に携わってきました。



2012年 1月 20日

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、LPIC-3 (Linux Professional Institute Certification レベル 3) 試験に備えるための教材にもなります。

連載の各記事についての説明とリンクについては、developerWorks の LPIC-3 ロードマップを参照してください。現在進行中のこのロードマップは、LPIC-3 試験の最新の目標 (2010年 11月) を反映しています。完成した記事はその都度ロードマップに追加されていきます。

この記事では、以下の内容について学びます。

  • ファイルおよびディレクトリーのパーミッション制御の効果的な使用方法
  • Samba による Linux ファイルシステムのパーミッションの操作方法

この記事は、LPIC-3 Specialty「302 Mixed Environment Exam」試験の主題 315 の目標 315.1 の試験対策となります。この目標の重要度は 3 です。

前提条件

この連載記事を最大限に活用するには、Linux の高度な知識と、この記事で説明するコマンドを演習できる実際の Linux システムが必要です。


Linux のファイル・パーミッションの復習

Samba と Linux ファイルシステムとを統合する場合、Linux でのファイル・パーミッションの概念が大々的に使用されます。

基本操作

選択的な LPI-302 試験について

LPIC (Linux Professional Institute Certification) には、さまざまなレベルがあり、レベルが上がるにつれ、より深い知識と経験が必要になってくるという点で、他の多くの認定と似ています。LPI-302 試験は、LPIC レベル階層のレベル 3 に位置する選択的な Specialty 認定試験であり、Linux システム管理に関する高度な知識が求められます。

LPIC レベル 3 (LPIC-3) 認定を取得するには、2 つのレベル 1 試験 (101 と 102)、2 つのレベル 2 試験 (201 と 202)、そして LPIC-3 Core Exam (301) に合格しなければなりません。これらの試験に合格した後、LPI-302 などの選択的な Specialty 認定試験を受けることができます。

Linux は、ファイルへのアクセスを極めて単純な方法で制御します。ファイルの所有者には、ユーザーとしての所有者と、グループとしての所有者があります。パーミッションは、ユーザー、グループ、その他 (その他すべてのユーザー) に対して指定されます。

ファイルのパーミッションは、読み取り、書き込み、実行という 3 つの基本操作に対する権限を制御します。読み取り権限は、ファイルまたはディレクトリーの内容を表示するためのアクセスを制御します。書き込み権限を持つユーザーには、ディレクトリー内のファイルの削除、変更、あるいは新規ファイルの作成が許可されます。バイナリー・ファイルまたはシェル・スクリプトを実行する場合、あるいはディレクトリーのコンテキストでディレクトリーに入るためには、実行権限が必要です。

ファイルのパーミッションで興味深いケースは、シェル・スクリプトです。通常のバイナリー・ファイルには実行権限を設定することができますが、読み取り権限を設定することはできません。ユーザーはプログラムを実行することはできても、プログラムの中身を見ることはできません。シェル・スクリプトを実行する場合は、これとは異なります。ユーザーがシェル・スクリプトを実行するには、実行するスクリプトを読み取るための読み取り権限が必要です。そして、実行権限により、ユーザーは例えば ./myscript.sh などのコマンドを使ってスクリプトを実行することができます。

Linux のファイル・パーミッションは、ファイルの「モード」と呼ばれるオクテット形式 (8 進数) の数字列で表記されます。各桁が、1 つのユーザー・グループに対する読み取り/書き込み/実行権限をエンコードします。1 桁目はファイルを所有するユーザーに適用され、2 桁目はファイルを所有するグループに対するパーミッション、最後の桁はその他のグループに対するパーミッションです。パーミッションは 4 桁で表現されることもあります。この場合、最初の桁がファイルの特殊なプロパティーをエンコードし、残りの 3 桁は上記と同じく、それぞれユーザー、グループ、その他に適用されます。

エンコードされたパーミッションを理解するには、2 進数を用いて解釈する必要があります。8 進数は、以下のように 3 ビットの 2 進数で表現することができます。

  • 001: 実行ビット
  • 010: 書き込みビット
  • 100: 読み取りビット

これらのビットを合わせた結果が、パーミッションです。読み取り操作と実行操作が可能なファイルは、読み取りビットと実行ビットの両方が設定されるので、2 進表記でのパーミッションは 101 となります。これは、8 進表記では 5 に相当します。3 つすべてのビットが設定される場合は 111 となり、8 進表記では 7 です。逆に、8 進表記の 6 は、2 進表記では 110 に相当し、読み取り、書き込みは許可され、実行は許可されないことを意味します。

これらの数値を 3 つすべてのグループに適用した場合、ファイルのモードが 644 であれば、そのファイルを所有するユーザーはファイルの読み取り/書き込み操作が許可され、グループとその他のユーザーにとっては、読み取り専用のファイルとなります。グループのパーミッションは、その他のユーザーのパーミッションに優先します。したがって、ファイルのモードが 604 の場合、ファイルを所有するグループには読み取りが制限される一方、その他のユーザーはファイルの読み取りが許可されます。モード 640 では、ファイルを所有するユーザーに読み取りおよび書き込み操作が許可され、ファイルを所有するグループに読み取り操作が許可されますが、その他のユーザーには一切の操作が許可されません。

コマンドラインでのファイル・パーミッションの操作

皆さん独自のフィードを作成してください

新しい記事が追加された際、あるいは内容が更新された際に通知を受けられるように、RSS、Atom、または HTML によるカスタム・フィードを作成することができます。それには、developerWorks RSS フィードにアクセスしてください。対象のゾーンとしては「Linux」を選択し、情報の種類としては「記事」を選択して、キーワードには「Linux Professional Institute」と入力します。そして最後にフィードの種類を選択します。

ファイルのモードを変更するコマンドは、chmod です。例えばコマンド chmod 700 foo は、以前のパーミッションが何に設定されていたかに関係なく、foo のパーミッションを 700 に変更します。

コマンドラインでパーミッションを設定またはクリアすることも可能です。8 進表記のパーミッションを指定する代わりに、[ugoa][[+-=][rwx] という形で相対パーミッションを指定することができます。最初の文字は ugoa のいずれかで、それぞれユーザー (user)、グループ (group)、その他 (other)、またはすべて (all) を意味します。次の記号は、現在のパーミッションに対する権限の追加 (+)、削除 (-)、または指定した権限への変更 (=) を表し、最後の文字で読み取り (r)、書き込み (w)、実行 (x) のビットを表します。

例えば、chmod u+x foo を実行すると、foo の実行ビットがセットされます。残りのビットは、すべて元のままです。chmod g-rw something を実行すると、グループの読み取り権限と書き込み権限が削除されます。

chmod には、--reference パラメーターを指定する使い方もあります。例えば、chmod --reference file1 file2 と入力すると、file2 に file1 と同じパーミッションが設定されます。

ファイルの所有権を変更するには、chown コマンドを使用します。例えば、chown sean foo は、foo の所有権を sean に変更します。ただし、ファイルの所有者を変更できるのは、root 権限を持つユーザーに限られます。

chgrp コマンドは、ファイルのグループを変更します。このコマンドを使用する一般ユーザーは、変更後の新しいグループに所属している必要があります。

マスク値の設定

ファイルのパーミッションは、実際には 2 進数で設定されるため、ビットをセット、クリアするには、2 進演算を適用することができます。パーミッションに適用できる 2 進演算は、ORAND です。2 進演算は、図 1 に示すような真理値表で表すことができます。

図 1. OR および AND の真理値表
OR および AND 演算子の真理値表を示す図

OR 演算の場合、いずれかのオペランドが 1 であれば、結果は true (1) になります。結果が false (0) となるのは、両方の入力が false の場合のみです。AND 演算子はその反対で、両方のビットが true でなければ、結果は true になりません。それ以外では、結果は false となります。重要な点として、オペランドの順序は関係ないことに注意してください。A OR B は、B OR A と同じことです。

複数のビットが関わる場合には、それぞれのビットが個別に計算されます。つまり、01 AND 1101 となります。最初の桁は、0 AND 1 は 0 であるため 0 となり、2 番目の桁は、1 AND 1 は 1 であるため 1 となります。ファイル・パーミッションでのビット・マスクの使用をさらに単純化するためには、OR 演算子を使用してビットを強制的にセットし、AND 演算子を使用してビットをクリアします。

8 進表記に話を戻してこれらの演算の例を説明すると、どのファイル・モードでも 600 で OR 演算を行った場合、ファイルを所有するユーザーの現在のパーミッションが何であろうと、そのユーザーには読み取りビットと書き込みビットがセットされます。775 で AND 演算を行う場合には、その他のユーザーの書き込みビットがクリアされます。これは、8 進表記の 5 は 2 進表記での 101 に相当し、書き込みビットは 010 であるからです。


Samba によってファイル・パーミッションを操作する方法

Samba サーバーへの接続は常に、その Samba サーバーに接続するユーザーが所有する個別のプロセスとして実行されます。したがって Samba プロセスは、ユーザーが直接サーバーにログインしているかのように、ユーザーに設定されたファイル・パーミッションと同じパーミッションに制限されます。要するに、ユーザーが Samba を介してファイルまたはディレクトリーを作成すると、その所有者は当然、そのファイル/ディレクトリーを作成したユーザー本人になります。ユーザーが Windows エクスプローラーからファイル・パーミッションを変更した場合は、chmod コマンドを使用したかの如く、変更されたパーミッションがファイル・モードに変換されます。

Samba には、さまざまな状況でパーミッションの割り当て方法を制御する一連のパラメーターがあります。ファイルのパーミッションを操作するパラメーターには、ビットをセットするためのパラメーター、ビットをクリアするためのパラメーターがあります。これらのパラメーターはすべて、共有レベルで使用することも、グローバル・レベルで使用して共有のすべてに適用させることもできます。他のグローバル・パラメーターと同じく、グローバルな振る舞いは、共有レベルで変更することができます。

ファイルおよびディレクトリーの作成

新しく作成するファイルには、パーミッション一式を設定する必要があります。同様に、Windows エクスプローラーの「New Folder (新規フォルダ)」コマンドで作成するディレクトリーにも、初期モードを指定する必要があります。ファイルを作成する場合とディレクトリーを作成する場合に適用する Samba パラメーターは異なります。

ファイルを作成する場合、Samba はファイルの作成要求をまずファイル・モードに変換します。その上で、create mask パラメーターに指定した値との AND 演算を実行してビットをクリアします。デフォルトのマスク値は 0744 です。このマスクとの AND 演算が実際に行うのは、グループとその他のユーザーからの書き込み権限と実行権限の削除です。続いて、AND 演算の結果として設定されたモードと force create mode パラメーターに指定した値との OR 演算を実行し、必要なビットをセットします。force create mode のデフォルトは 000 なので、デフォルトのまま使用すれば、パーミッションは変更されません。

ディレクトリーを作成する場合も同じプロセスに従います。ただし、初期パーミッションでは directory mask パラメーターに指定した値との AND 演算を実行してから、force directory mode パラメーターに指定した値との OR 演算を実行します。リスト 1 に、ファイルおよびディレクトリーの作成方法を変更する場合の構成例をいくつか記載します。

リスト 1. パラメーターを使用して新規ファイルおよびディレクトリーのパーミッションを変更する
[global]
create mask = 770
force create mode = 600
directory mask = 777
force directory mode = 711

[public]
create mask = 777
force create mode = 666

リスト 1 に記載されているパラメーターは 2 つのセクションに分けられています。[global] セクションに記載されているのは、ファイルとディレクトリーの両方に適用されるパラメーターです。create mask では、最後の桁が 0 に設定されていることから、ファイルのその他のユーザーに対応するビットはクリアされますが、それ以外のビットは対応する桁が 7 となっているため、変更されません。この結果を 600 と OR 演算することで、ファイルを所有するユーザーに、そのファイルに対する読み取り権限と書き込み権限が必ず付与されるようにしています。

ディレクトリーのモードは 777 と AND 演算されるため、パーミッション・ビットはいずれも変更されません。次に、711 との OR 演算を実行することで、所有者に読み取り権限、書き込み権限、および実行権限を付与し、その他すべてのユーザーには少なくとも実行権限を付与します。次のセクションの public 共有では制限が緩くなり、少なくともこの共有に含まれるファイルに対する読み取り権限と書き込み権限がユーザー全員に付与されます。

ファイルおよびディレクトリーのパーミッションの変更

Windows エクスプローラー内でファイルのセキュリティー・プロパティーを調べたことがある方は、ファイルへのアクセスを許可する相手を変更できることはご存知でしょう。パーミッションのデフォルトは、Linux の代表的なパーミッションではあるものの、Microsoft Windows NT グループにマッピングされていることがわかります。パーミッションを変更すると、変更したパーミッションは Linux のファイル・パーミッションに再マッピングされます。ファイルのパーミッションを変更するときには、ファイルを作成する場合とは別のパラメーター・セットによって、ビットのセットおよびクリアを制御します。

ファイルのパーミッションを変更する際には、以下のパラメーターが使用されます。

  • security mask: ファイルのパーミッションと AND 演算されます。
  • force security mode: ファイルのパーミッションと OR 演算されます。
  • directory security mask: ディレクトリーのパーミッションと AND 演算されます。
  • force directory security mode: ディレクトリーのパーミッションと OR 演算されます。

モード関連のパラメーターの要約

表 1 に、モード・ビットの設定またはマスク値の設定に関連するパラメーターをわかりやすく要約します。ビットはマスク値でクリアされてから設定されることに注意してください。

表 1. ファイル・モードを操作するための Samba パラメーター
状況ビットをセット (OR)ビットをクリア (AND)
ファイルの作成force create modecreate mask
ディレクトリーの作成force directory modedirectory mask
クライアントによるファイルのパーミッションの変更force security modesecurity mask
クライアントによるディレクトリーのパーミッションの変更force directory security modedirectory security mask

ユーザーおよびグループの所有権の強制設定

これまでに説明したパラメーターは、いずれもファイルのモードを変更し、それによって、ファイルを所有するユーザー、ファイルを所有するグループ、そしてその他すべてのユーザーの読み取り権限、書き込み権限、実行権限を変更します。デフォルトでファイルの所有権を持つのは、そのファイルを作成したユーザーとそのユーザーのグループです。けれども場合によっては、ファイルを別のユーザーやグループ (例えば、プロジェクト・グループや一般ユーザーなど) に所有させたほうが望ましいこともあり、それが最も有効なのは、複数のユーザー・グループが共有を使用する場合です。

Samba には、ファイルを所有するユーザーとグループを任意のユーザーおよびグループに強制的に設定する 2 つのパラメーター、force user および force group があります。これらのパラメーターはグローバルに使用することもできますが、共有レベルで使用したほうが遥かに実用的です。例えば、共有を force group = projecta で構成すると、共有内のすべてのファイルが projecta グループに属することになります。

force group パラメーターのもう 1 つの形では、グループ名の先頭にプラス記号 (+) を追加します。例えば、force group = +admins とすると、Samba はこのプラス記号を文字としては解釈せず、ユーザーがセカンダリー・グループとして admins グループに属している場合に限り、そのユーザーがプライマリー・グループとして admins に属しているものとして扱うようになります。この設定の場合、admins グループに属していないユーザーが新たにファイルを作成しても、そのファイルにはユーザー本来のプライマリー・グループが適用されます。


Samba のファイルおよびディレクトリーのパーミッションのまとめ

Samba には、ファイルのパーミッションの計算方法を左右する、さまざまなパラメーターがあります。これらのパラメーターは 8 進形式のマスクという形を取り、提案されるパーミッションと AND 演算を行うことで、セットされているのが望ましくないビットをクリアしてから、OR 演算を行うことでビットをセットします。ファイルとディレクトリーには、それぞれ個別にビットを設定します。また、新規ファイルが作成される場合やパーミッションが変更される場合にも、合計 8 つの異なるパラメーターでビットを設定します。さらに、特定の共有に対して、ファイルを所有するユーザーおよびグループを設定することもできます。

このように、Samba では極めて柔軟にパーミッションを制御することができますが、以上で説明した機能は慎重に使用しなければなりません。これらの機能による効果は、ユーザーが期待する内容に反する場合があるからです。

参考文献

学ぶために

議論するために

  • My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=785461
ArticleTitle=Linux の 302 (Mixed Environment) 試験対策: Linux ファイルシステムと共有/サービス・パーミッション
publish-date=01202012