この記事では、以下の概念について学びます。
- UNIX アカウント
- Samba アカウントの管理
- アカウントのマッピング
- ファイルやディレクトリーに対するアカウントのアクセス権の強制設定
この記事は、LPIC-3 Specialty「302 Mixed Environment Exam」試験の主題 313 の目標 313.1 の試験対策となります。この目標の重要度は 4 です。
この連載記事を最大限に活用するには、Linux の高度な知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。具体的には、この記事では読者が Linux コマンドライン関数の実用的な知識を持っていること、そして「Linux の 302 (Mixed environment) 試験対策: 概念」で説明している Samba の目的について、少なくとも全般的に理解していることを前提とします。記事で説明するアクションを実行するには、Samba ソフトウェアがインストールされている必要があります。さらに、Windows クライアントへネットワーク・アクセスできる必要もあります。
皆さんがお使いの Samba サーバーは、おそらく単独では存在していないでしょう。ユーザーがファイルやディレクトリーにアクセスする必要があるとしても、それにはまず、ユーザーは認証を受けなければなりません。ユーザーは Linux ワークステーションからアクセスする場合も、Windows デスクトップからアクセスする場合もありますが、いずれにしても、ユーザーには Samba サーバーで認識されるアカウントが必要です。
認証されたユーザーには、ファイル、ディレクトリー、プリント・サービスへの適切なアクセス権が必要です。これらのアクセス権を効率的に管理できるようにするための機能として Samba にはグループがあります。
ローカルの UNIX アカウントからリモートのユーザー・アカウントへの橋渡しを務めるのは、sam バックエンド・データベースです。ユーザーを Samba サーバーに認証させるにはいくつかの方法がありますが、Samba アカウントの詳細を探る前に、UNIX のユーザー・アカウントおよびグループ・アカウントの管理についての基本をしっかりと理解しておく必要があります。
Linux コンピューターで useradd などのツールを使ってローカル・ユーザー・アカウントを作成すると、そのアカウント情報は /etc/passwd ファイルに書き込まれます。このファイルには、ユーザーのユーザー名、ホーム・ディレクトリー、デフォルト・シェル、そしてアカウントに関連するあらゆるコメントが保管されます。このファイルに情報が保管されているアカウントは、一般に UNIX ローカル・アカウントと呼ばれます。この記事では、「UNIX アカウント」と「ローカル・アカウント」という用語を同じ意味で使用します。
リスト 1 のコードは、monty というユーザー名のローカル・アカウントを作成します。アカウントのコメント・セクションには「Monty Python」という説明を入れ
(-c)、ホーム・ディレクトリーを指定し (-m)、このユーザーに /bin/bash をデフォルト・シェルとして割り当てています (-s)。
リスト 1. ローカル・アカウントを作成する
[tbost@samba ~]$ sudo useradd -c'Monty Python' -m -s /bin/bash monty [tbost@samba ~]$ less /etc/passwd | grep monty monty:x:504:504:Monty Python:/home/monty:/bin/bash [tbost@samba ~]$ |
/etc/passwd の各行は、ユーザー・アカウント・レコードを表します。レコードごとに、区切り文字であるコロン (:) で区切られた 7 つのフィールドがあります。Samba アカウントを管理するときに特に関連してくるのは、最初のフィールドが示すユーザー名、3 番目のフィールドが示すユーザー ID (UID)、そして 4 番目のフィールドが示すグループ ID (GID) です。
あらゆるマルチユーザー・コンピューターでの管理の負担を軽減する上で、グループ・アカウントは重要な役割を果たします。Samba サーバーの管理者は通常の構成作業の一環として、目的のグループが特定のディレクトリー、ファイル、プリント・サービスにアクセスできるようにする必要があります、
ローカル側の Samba アカウント構成に取り組んでいる場合、ほとんどの Samba 構成では、ユーザー・アカウントと同様に、UNIX グループ・アカウントもローカル Samba サーバー上に作成する必要があります。UNIX グループ・アカウント情報は、/etc/group ファイルに格納することができます。一部の Linux ディストリビューションでは、新規ユーザーのそれぞれに対してローカル・プライベート・グループが作成されます。これは、ユーザー monty を追加する場合にも当てはまります。
[tbost@samba ~]$ less /etc/group | grep monty monty:x:504: [tbost@samba ~]$ |
上記のコードは、ユーザー monty 用に作成されたプライベート・グループのアカウントを表示します。Windows コンピューターが含まれる混在環境で作業しているとしたら、Windows ではユーザー・アカウントとグループ・アカウントに同じ名前を使用できないことを覚えておいてください。
ユーザー・アカウントと同じように、グループ・アカウントもローカル UNIX サーバー上に存在している必要があります。グループ・アカウントがローカル UNIX
サーバー上に存在していなければ、Samba はそのグループ・アカウントを使用することができません。グループを作成するには、groupadd などのユーティリティーを使用するか (リスト 2 を参照)、vim などのエディターを使って直接 /etc/group ファイルを編集します。
リスト 2. グループ・アカウントを作成してユーザーを追加する
[tbost@samba ~]$ sudo groupadd accounting [tbost@samba ~]$ sudo usermod -G accounting monty [tbost@samba ~]$ less /etc/group | grep accounting accounting:x:506:monty [tbost@samba ~]$ |
リスト 2 のコードは、/sbin/groupadd ツールを使用してグループを作成し、次に /sbin/usermod
ツールを使用して、作成したグループにユーザーを追加します。複数のユーザーをグループに追加するには、そのためのタスクを実行するスクリプトを作成するか、あるいはユーザーを直接
/etc/group ファイルに追加します。グループのメンバーは、最後のコロンで区切られたフィールドに、カンマ (,) で区切って追加します。グループを手動で作成する場合、各グループには固有の GID を設定しなければならないことに注意してください。
標準的な Samba 構成では、アカウント情報は以下の 3 つのパスワード・データベースのいずれかに保管されます。
- smbpasswd
- tdbsam
- ldapsam
smbpasswd データベースは、Samba がバージョン 3.4 になる以前はデフォルトのバックエンド・データベースとして Samba で使用されていました。Samba 3.4 で smbpasswd は非推奨となり、代わりに tdbsam がデフォルトのバックエンド、ならびにユーザー数が 250 を下回る環境での推奨バックエンド・データベースとなっています。
tdbsam データベースは、smbpasswd よりもスケーラブルであると考えられています。デフォルトで smbpassd を採用する Samba
バージョンを使用している場合、smb.conf ファイルの global セクションに passdb = tdbsam というパラメーターを指定することで、バックエンド・データベースを変更することができます。
ただし、smbpasswd は単なるデータベースではありません。これは Samba スイートに付属しているツールであり、Samba アカウントを単純な Samba 構成で管理するための手段として使用することができます。Samba アカウントを作成するには root 権限が必要です。Samba アカウントを作成する前に、該当するアカウントがローカル Linux サーバーに存在していることを確認してください。リスト 3 に、smbpasswd を使用して Samba ユーザー・アカウントを作成するコードを記載します。
リスト 3. smbpasswd を使用して Samba ユーザー・アカウントを作成する
[tbost@samba ~]$ sudo smbpasswd -a monty New SMB password: Retype new SMB password: Added user monty. |
ユーザーは、自分のパスワードを変更する場合に smbpasswd を使用することができます (リスト 4 を参照)。
リスト 4. ローカル・ユーザーが smbpasswd を使用してパスワードを変更する場合
[monty@samba ~]$ smbpasswd Old SMB password: New SMB password: Retype new SMB password: Password changed for user monty [monty@samba ~]$ |
あるいは、パスワードを同期するように Samba を構成することもできます。そうすることで、ユーザーがローカル・アカウントのパスワードを変更すると、Samba のパスワードも更新されるようにすることができます。
[global] unix password sync = yes |
ユーザーが長時間 Samba サーバーにアクセスする必要がなければ、一時的にアカウントを無効にして、後日、そのアカウントを有効にすることができます。ユーザーが Samba サーバーにアクセスする必要が完全になくなった場合には、アカウントを削除することも可能です。リスト 5 に、これらの操作を行うためのコマンドを記載します。
リスト 5. smbpasswd を使用して Samba アカウントを無効化、有効化、削除する
[tbost@samba ~]$ sudo smbpasswd -d monty Disabled user monty. [tbost@samba ~]$ sudo smbpasswd -e monty Enabled user monty. [tbost@samba ~]$ sudo smbpasswd -x monty Deleted user monty. [tbost@samba ~]$ |
Samba スイートに付属の pdbedit は、充実した機能を備えたツールです。このツールは、3
つのどのバックエンド・データベースからでもアカウントを操作することができます。ユーザーの作成、変更、削除の他、pdbedit を使って以下の操作を実行することができます。
- ユーザー・アカウントの一覧表示
- ホーム・ディレクトリーの指定
- ユーザー・アカウントのインポート
- アカウント・ポリシーの設定
tdbsam データベースでは、pdbedit と sambapasswd のどちらを使っても構いません (リスト 6 を参照)。ただし、pdbedit で実行するコマンドには必ず root 権限が必要です。
リスト 6. smbpasswd および pdbedit を使用してバックエンド・データベースを操作する
[tbost@samba ~]$ sudo smbpasswd -a monty New SMB password: Retype new SMB password: Added user monty. [tbost@samba ~]$ sudo pdbedit -L monty:504:Monty Python [tbost@samba ~]# sudo pdbedit -L --verbose Unix username: monty NT username: Account Flags: [U ] User SID: S-1-5-21-2247757331-3676616310-3820305120-1001 Primary Group SID: S-1-5-21-2247757331-3676616310-3820305120-513 Full Name: Monty Python Home Directory: \\samba\monty HomeDir Drive: Logon Script: Profile Path: \\samba\monty\profile Domain: SAMBA Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: never Kickoff time: never Password last set: Tue, 24 May 2011 14:19:46 CDT Password can change: Tue, 24 May 2011 14:20:16 CDT Password must change: Tue, 24 May 2011 14:20:16 CDT Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
リスト 6 には例として、smbpassd を使用してユーザーを作成した後、pdbedit を使用して Samba ユーザーを一覧表示する方法が示されています。pdbedit に --verbose スイッチを指定することで、より詳細なアカウント情報を取得することができます。
pdbedit を使用してアカウント・ポリシーを設定することもできます。管理できるアカウント・ポリシーの名前は以下のとおりです。
min password lengthpassword historyuser must logon to change passwordmaximum password ageminimum password agelockout durationreset count minutesbad lockout attemptdisconnect timerefuse machine password change
リスト 7 のコードは、パスワードの最小長を 8 文字に変更した後、パスワードの最大有効期間を 30 日に変更します。-P スイッチは、事前定義されたポリシー名のいずれかと完全一致させるストリングを引数に取り、-C スイッチはアカウント・ポリシーの設定値を引数に取ります。
リスト 7. pdbedit を使用してアカウントを管理する
[tbost@samba ~]$ sudo pdbedit -P 'min password length' -C 8 account policy "min password length" description: Minimal password length (default: 5) account policy "min password length" value was: 5 account policy "min password length" value is now: 8 [tbost@samba ~]$ sudo pdbedit -P 'maximum password age' -C 30 ... account policy "maximum password age" value was: 4294967295 account policy "maximum password age" value is now: 30 |
使用可能なコマンドについての詳細は、man pdbedit マニュアルを参照するか、pdbedit -h を入力してください。
LDAP (Lightweight Directory Access Control) などの既存のディレクトリー・サービスを使用している場合や、大規模な環境
(つまり、ユーザー数が 250 を超える環境) で作業している場合には、ldapsam バックエンドを使用することができます。3
つのバックエンド・データベースのうち、グループ・アカウントを保管できるのは唯一 ldapsam だけです。すべてのユーザーとグループを ldap バックエンドに保管すれば、すべてのサーバーが一貫した UID および GUI を使用できるようになります。この記事では LDAP の構成方法についての詳しい説明はしませんが、LDAP サーバーが置かれている場所は、smb.conf で idmap backend パラメーターを使用して指定します。
以下のパラメーター・セットは、Samba に対してそのバックエンド・ストレージとして、ホスト directory-services.example.org に置かれている
LDAP ディレクトリー・サービスを使用するように指示します。この場合、あらかじめ、Samba と対話するように構成された LDAP
サーバーを使用できるようにしておく必要があります (idmap については、次のセクションで詳しく説明します)。
[global] idmap backend = ldap:ldap://directory-services.example.org:636 |
お使いの Samba
サーバーが、ある特定のドメイン内のスタンドアロン・サーバーだとしたら、マッピング・ファイルを使用するだけで、おそらく事は足りるでしょう。その一方、別のドメインから
Samba に接続するユーザーで構成された環境では、idmap ツールが UID と GID との適切なマッピングを手助けします。
sampasswd と TDB ファイルを使用したユーザー・マッピング
Samba サーバーに接続する Windows ユーザーが、Samba サーバーに作成されているユーザー名とまったく同じユーザー名を持っている場合には、マッピング・ファイルは必要ありません。一方、Windows ユーザー名が Samba サーバー上のユーザー名と正確に一致しない場合には、マッピング・ファイルを作成して、ユーザー名をリンクさせることができます。注意する点として、Linux は大/小文字を区別しますが、Windows ユーザー名には大/小文字の区別がありません。つまり、TBost という Windows ユーザー名は、ローカル・アカウント tbost とは別のものです。表 1 に、Windows アカウント名と UNIX アカウント名とのマッピングを示します。
表 1. マッピングに使用される Windows および UNIX のアカウント名
| Windows | UNIX |
|---|---|
| Monty | monty |
| bostt | tbost |
| sue.george | sue |
Samba アカウントを作成するときには、Windows アカウント名を使用してください。こうすれば、Windows アカウントを該当する UNIX アカウントにマッピングするファイルの場所を smb.conf ファイルに指定することができます。リスト 8 に、UNIX でのアカウント・マッピングを記載します。
リスト 8 . UNIX での単純なアカウント・マッピング
[tbost@samba ~]$ sudo vi /etc/samba/smb.conf [global] username map = /etc/samba/smbusers ... ... ... [tbost@samba ~]$ sudo vi /etc/samba/smbusers # Unix_name = SMB_name1 SMB_name2 ... root = administrator admin nobody = guest pcguest smbguest monty = Monty tbost = bostt sue = sue.george |
リスト 8 に示すコードのコマンドは、username map パラメーターを構成して
/etc/samba/smbusers をマッピング・ファイルとして使用するように構成します。アカウントをマッピングする際の作業は簡単です。等号 (=) の左側にUNIX アカウント名を指定し、右側に Samba アカウント名を指定するだけで、Samba は接続したユーザーを適切なアカウントにマッピングします。
標準的な Samba サーバー環境では、Samba スイートで提供されている net groupmap コマンドを使用してグループ・マッピングを構成することができます。例えば、Windows ユーザー・アカウント Monty、bostt、および sue.george が、それぞれ Domain Admins、Domain Users、Domain Guests グループ・アカウントのメンバーであるとします。これらのユーザーに、Samba サーバー上での同様の UNIX グループのグループ・アカウントの許可を持たせるには、以下のように、UNIX アカウント・ユーザー名を各グループに追加します。
adm:x:4:root,adm,daemon,monty,tbost,sue users:x:100:monty,tbost,sue guests:x:507:monty,tbost,sue |
上記のリストは、Samba サーバー上の完全なグループ・リストの一部に過ぎません。adm グループと users グループは、Linux オペレーティング・システムのインストール時に作成されたものです。各ユーザーをそれぞれ適切なグループに追加する必要があります (表 2 を参照)。
表 2. マッピングに使用される Windows および UNIX のアカウント・グループ
| Windows | UNIX | Windows 相対 ID (RID) | UNIX GID |
|---|---|---|---|
| Admins ドメイン | adm | 512 | 4 |
| Users ドメイン | users | 513 | 100 |
| Guests ドメイン | guests | 514 | 507 |
ドメイン・グループをマッピングするには net groupmap コマンドを使用し (リスト 9
を参照)、ドメイン・グループのマッピングを一覧表示するには net groupmap list コマンドを使用します。Samba 3.x からは、Windows グループの RID と UNIX GID との間の関係を作成できる、新しいグループ・マッピング機能を使用できるようになっています。
リスト 9. groupmap コマンドを使用してグループをマッピングする
[tbost@samba ~]$sudo net groupmap add ntgroup="Domain Admins" unixgroup=adm \ rid=512 type=d Successfully added group Domain Admins to the mapping db as a domain group [tbost@samba ~]$ sudo net groupmap add ntgroup="Domain Users" unixgroup=users \ rid=513 type=d Successfully added group Domain Users to the mapping db as a domain group [tbost@samba ~]$sudo net groupmap add ntgroup="Domain Guests" unixgroup=guests \ rid=514 type=d Successfully added group Domain Guests to the mapping db as a domain group [tbost@samba ~]$sudo net groupmap list Domain Users (S-1-5-21-2247757331-3676616310-3820305120-513) -> users Domain Guests (S-1-5-21-2247757331-3676616310-3820305120-514) -> guests Domain Admins (S-1-5-21-2247757331-3676616310-3820305120-512) -> adm |
リスト 9 では、以下の手順でグループをマッピングしています。
- root 権限で
net groupmap addコマンドを使用し、Windows グループ ntgroup='Domain Admin" を UNIX グループ unixgroup=adm にマッピングします。上記のステップを繰り返して、各グループをマッピングします。
- リスト 9 の最後のコマンドで、グループのマッピングを表示します。
ほとんどの環境では、上記のマッピングで十分です。けれども、Samba サーバーに、異なるドメインから複数の Samba サーバーまたはワークステーションが接続するような複雑な環境を管理する場合には、識別情報のマッピング (IDMAP) および Winbind について十分に理解しておかなければなりません。IDMAP は、セキュリティー ID (SID) とローカル UNIX UID/GID の相互運用に関する問題を克服するのに役立ちます。
Samba サーバーが Windows ドメインのメンバーとなっている場合には、Winbind を使用して SID を UID/GID
にマッピングすることができます。その場合、smb.conf ファイルに idmap パラメーターの範囲と、Winbind がアカウント情報をキャッシュする期間を指定することができます。
[global] idmap uid = 20000-50000 idmap gid = 20000-50000 winbind cache time = 300 |
上記のコードで使用されている最初の 2 つのパラメーターは、Winbind に対し、20000 から 50000 の範囲のローカル UID と、20000 から 50000
の範囲の GID を使用するように指示しています。この構成は、ローカル・ユーザーまたはグループ・アカウントの数が数千に及ぶことはない Samab
サーバーには比較的安全な範囲です。winbind cache time = 300 パラメーターは、Winbind に対してアカウント情報を 300 秒間キャッシュするように指示します。デフォルトでは、Winbind は winbind_idmap.tdb ファイルにマッピングを保管します。
ユーザーのそれぞれをグループに追加する代わりに、force user および force group パラメーターを使用すると、面倒を省ける場合があります。これらのパラメーターを設定すると、Samba は許可されたユーザーを、指定されたユーザーおよびグループのアクセス権を持つユーザーとして接続します。この方法が特に役立つのは、多数のユーザーがアクセスできるようにする共有を作成するときに、これらのユーザーに同じアクセス権を設定すれば十分な場合です。
[global] username map = /etc/samba/smbusers force user = guest force group = +employees |
上記のコードでは、force user パラメーターにより、接続したすべてのユーザーはファイルの操作時に guest ユーザーとして扱われます。ただし、ユーザーが有効なユーザー・アカウントで接続しなければならないことに変わりはありません。この構成には、ユーザー・アカウントが guest に強制設定され、グループ・アカウントが employees に強制設定されることが示されています。
学ぶために
- Samba
3.x マニュアルの第 11 章で、Samba アカウント情報データベースの詳細を学んでください。
- Samba
3.x マニュアルの第 12 章で、grup マッピングの詳細を学んでください。
pdbeditマニュアルで、pdbedit ツールについての詳しい説明を読んでください。- Samba
マニュアルの第 14 章で、スタンドアロン・サーバーとプライマリー・ドメイン・コントローラー・サーバーの識別情報のマッピング (IDMAP)
について詳しく学んでください。
- LPIC Program サイトでは、LPI の 3 つの Linux
システム管理資格認定レベルについて、詳しい目標、タスクのリスト、そして出題例を調べられます。特に、LPI-302
の具体的な目標とタスクおよび出題例を調べてください。
- developerWorks の連載「LPI exam
prep」をすべて読んで、Linux の基礎を学び、2009年4月以前の LPI 試験の目標に基づくシステム管理者認定試験に備えてください。
- 「Exam
Preparation Resources for Revised LPIC Exams」に、LPI で管理している他の認定の教材がリストされています。
- developerWorks Linux ゾーンで、Linux
開発者および管理者向けのハウツー記事とチュートリアル、そしてダウンロード、ディスカッション、フォーラムなど、豊富に揃った資料を探してください。
- Twitter で developerWorks
をフォローするか、developerWorks で Linux
に関するツイートのフィードに登録してください。
- さまざまな IBM 製品および IT 業界についての話題に絞った developerWorks の Technical
events and webcasts で時代の流れをキャッチしてください。
- 無料の developerWorks
Live! briefing に参加して、IBM 製品およびツール、そして IT 業界の傾向を素早く学んでください。
- developerWorks の on-demand
demos で、初心者向けの製品のインストールとセットアップから、熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。
議論するために
- My developerWorks
コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。
