Linux の 302 (Mixed Environment) 試験対策: ユーザー・アカウントとグループの管理

ユーザー・アカウントとグループ・アカウントの管理計画

ユーザー・アカウントとグループ・アカウントを管理しているとしたら気付くと思いますが、複数の OS が混在する環境では、ユーザーがこれらのアカウントを常にシームレスに使用できるとは限りません。これはユーザーにとっても、システム管理者にとっても、苛立たしい事態です。幸い、Samba スイートにはアカウントの管理プロセスを支援するツールがあります。この記事で、混在環境でのユーザー・アカウントとグループ・アカウントを管理する方法を学んでください。

Tracy Bost, Consultant and Trainer, Freelance

Author photo - Tracy BostTracy Bost は、経験豊かなソフトウェア開発者兼システム・エンジニアです。彼は Linux オペレーティング・システムの講師およびトレーナーも務めています。RHCE (Red Hat Certified Engineer) および MCSE (Microsoft Certified Systems Engineer) の認定を両方とも取得し、Linux Foundation の活発なメンバーでもあります。貸付産業、不動産、非営利セクターなどの業界に従事してきました。



2011年 11月 18日

この連載について

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

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

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

  • UNIX アカウント
  • Samba アカウントの管理
  • アカウントのマッピング
  • ファイルやディレクトリーに対するアカウントのアクセス権の強制設定

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

前提条件

この連載記事を最大限に活用するには、Linux の高度な知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。具体的には、この記事では読者が Linux コマンドライン関数の実用的な知識を持っていること、そして「Linux の 302 (Mixed environment) 試験対策: 概念」で説明している Samba の目的について、少なくとも全般的に理解していることを前提とします。記事で説明するアクションを実行するには、Samba ソフトウェアがインストールされている必要があります。さらに、Windows クライアントへネットワーク・アクセスできる必要もあります。


UNIX ユーザー・アカウントとグループ・アカウントの概要

選択的な 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 認定試験を受けることができます。

皆さんがお使いの 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 アカウントの管理

標準的な Samba 構成では、アカウント情報は以下の 3 つのパスワード・データベースのいずれかに保管されます。

  • smbpasswd
  • tdbsam
  • ldapsam

smbpasswd および tdbsam を使用する場合

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 ~]$

pdbedit を使用する場合

Samba スイートに付属の pdbedit は、充実した機能を備えたツールです。このツールは、3 つのどのバックエンド・データベースからでもアカウントを操作することができます。ユーザーの作成、変更、削除の他、pdbedit を使って以下の操作を実行することができます。

  • ユーザー・アカウントの一覧表示
  • ホーム・ディレクトリーの指定
  • ユーザー・アカウントのインポート
  • アカウント・ポリシーの設定

tdbsam データベースでは、pdbeditsambapasswd のどちらを使っても構いません (リスト 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 スイッチを指定することで、より詳細なアカウント情報を取得することができます。

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

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

pdbedit を使用してアカウント・ポリシーを設定することもできます。管理できるアカウント・ポリシーの名前は以下のとおりです。

  • min password length
  • password history
  • user must logon to change password
  • maximum password age
  • minimum password age
  • lockout duration
  • reset count minutes
  • bad lockout attempt
  • disconnect time
  • refuse 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 を入力してください。

ldapsam を使用する場合

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 のアカウント名
WindowsUNIX
Montymonty
bostttbost
sue.georgesue

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 のアカウント・グループ
WindowsUNIXWindows 相対 ID (RID)UNIX GID
Admins ドメインadm5124
Users ドメインusers513100
Guests ドメインguests514507

ドメイン・グループをマッピングするには 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 では、以下の手順でグループをマッピングしています。

  1. root 権限で net groupmap add コマンドを使用し、Windows グループ ntgroup='Domain Admin" を UNIX グループ unixgroup=adm にマッピングします。

    上記のステップを繰り返して、各グループをマッピングします。

  2. リスト 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 に強制設定されることが示されています。

参考文献

学ぶために

議論するために

  • 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=773507
ArticleTitle=Linux の 302 (Mixed Environment) 試験対策: ユーザー・アカウントとグループの管理
publish-date=11182011