2.5. Samba をドメインメンバーサーバーとして設定

AD または NT4 のドメインを実行している場合は、Samba を使用して Red Hat Enterprise Linux サーバーをメンバーとしてドメインに追加し、以下を取得します。

  • その他のドメインメンバーのドメインリソースにアクセスする
  • sshd などのローカルサービスに対してドメインユーザーを認証する
  • サーバーにホストされているディレクトリーおよびプリンターを共有して、ファイルサーバーおよびプリントサーバーとして動作する

2.5.1. Samba のドメインへの参加

本セクションでは、Red Hat Enterprise Linux システムをドメインに参加させる方法を説明します。

手順
  1. 以下のパッケージをインストールします。

    # yum install realmd oddjob-mkhomedir oddjob samba-winbind-clients \
           samba-winbind samba-common-tools samba
  2. ドメインメンバーでディレクトリーまたはプリンターを共有するには、samba パッケージをインストールします。

    # yum install samba
  3. AD に参加する場合は、Winbind Kerberos ロケータープラグインもインストールします。

    # yum install samba-winbind-krb5-locator

    このプラグインを使用すると、Kerberos は DNS サービスレコードを使用して、AD サイトに基づいて鍵配布センター (KDC) を探すことができます。

  4. 必要に応じて、既存の Samba 設定ファイル (/etc/samba/smb.conf) の名前を変更して、バックアップを作成します。

    # mv /etc/samba/smb.conf /etc/samba/smb.conf.old
  5. ドメインに参加します。たとえば、ドメイン ad.example.com に参加するには、以下のコマンドを実行します。

    # realm join --client-software=winbind ad.example.com

    上記のコマンドを使用すると、realm ユーティリティーが自動的に以下を実行します。

    • ad.example.com ドメインのメンバーシップに /etc/samba/smb.conf ファイルを作成します。
    • ユーザーおよびグループの検索用の winbind モジュールを、/etc/nsswitch.conf ファイルに追加します。
    • /etc/pam.d/ ディレクトリーの PAM (プラグ可能な認証モジュール) 設定ファイルを更新します。
    • winbind サービスを起動し、システムの起動時にサービスを起動できるようにします。
  6. 必要に応じて、/etc/samba/smb.conf ファイルの別の ID マッピングバックエンド、またはカスタマイズした ID マッピングを設定します。詳細は「Samba ID マッピング」を参照してください。
  7. 必要に応じて設定を検証します。「Samba がドメインメンバーとして正しく参加されたことを確認」を参照してください。
  8. winbind サービスが稼働していることを確認します。

    # systemctl status winbind
    ...
       Active: active (running) since Tue 2018-11-06 19:10:40 CET; 15s ago
    重要

    Samba がドメインのユーザーおよびグループの情報をクエリーできるようにするには、smb を起動する前に winbind サービスを実行する必要があります。

  9. samba パッケージをインストールしてディレクトリーおよびプリンターを共有している場合は、smb サービスを開始します。

    # systemctl start smb
  10. 必要に応じて、Active Directory へのローカルログインを認証する場合は、winbind_krb5_localauth プラグインを有効にします。「MIT Kerberos 用のローカル承認プラグインの使用」を参照してください。
関連情報
  • realm ユーティリティーの詳細は、次を参照してください。

    • man ページの realm(8)

2.5.2. Samba がドメインメンバーとして正しく参加されたことを確認

ドメインに正しく Red Hat Enterprise Linux を追加したことを確認するには、ドメインメンバーに、本セクションで説明しているテストを実行します。

2.5.2.1. オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証

getent ユーティリティーおよび chown ユーティリティーを使用して、オペレーティングシステムがドメインのユーザーおよびグループを取得できることを確認します。

手順
  1. AD ドメインの 管理者 アカウントをクエリーするには、以下を実行します。

    # getent passwd "AD\administrator"
    AD\administrator:*:10000:10000::/home/administrator@AD:/bin/bash
  2. AD ドメイン内の Domain Users グループのメンバーにクエリーするには、以下を実行します。

    # getent group "AD\Domain Users"
    AD\domain users:x:10000:user1,user2
  3. ファイルやディレクトリーに権限を設定する際に、ドメインのユーザーおよびグループを使用できることを確認します。たとえば、/srv/samba/example.txt ファイルの所有者を AD\administrator に設定し、グループを AD\Domain Users に設定するには、以下のコマンドを実行します。

    # chown "AD\administrator":"AD\Domain Users" /srv/samba/example.txt

2.5.2.2. AD ドメインユーザーが Kerberos チケットを取得できるかどうかの確認

AD 環境では、DC から Kerberos チケットを取得できます。

本セクションの手順では、管理者 ユーザーが、Kerberos チケットを取得できるかどうかを検証する方法を説明します。

前提条件
  • Samba ドメインメンバーに krb5-workstation パッケージをインストールします。
手順
  1. AD ドメインメンバーで、administrator@AD.EXAMPLE.COM プリンシパルのチケットを取得します。

    # kinit administrator@AD.EXAMPLE.COM
  2. キャッシュされた Kerberos チケットを表示します。

    # klist
    Ticket cache: KCM:0
    Default principal: administrator@AD.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    01.11.2018 10:00:00  01.11.2018 20:00:00  krbtgt/AD.EXAMPLE.COM@AD.EXAMPLE.COM
            renew until 08.11.2018 05:00:00

2.5.2.3. 利用可能なドメインの一覧表示

wbinfo ユーティリティーを使用して、winbindd サービスを介して利用可能なドメインを一覧表示します。

手順
# wbinfo --all-domains

Samba がドメインメンバーとして適切に参加すると、このコマンドは組み込みおよびローカルのホスト名を表示し、ドメインの Samba は信頼されるドメインを含むメンバーとなります。

例2.1 利用可能なドメインの表示

以下は、wbinfo --all-domains コマンドの出力例です。

# wbinfo --all-domains
BUILTIN
SAMBA-SERVER
AD

2.5.3. MIT Kerberos 用のローカル承認プラグインの使用

winbind サービスは、Active Directory ユーザーをドメインメンバーに提供します。特定の状況では、管理者が、ドメインメンバーで実行している SSH サーバーなどのローカルサービスに対して、ドメインユーザーが認証を行えるようにします。Kerberos を使用してドメインユーザーを認証している場合は、winbind サービスを介して、winbind_krb5_localauth プラグインが Kerberos プリンシパルを Active Directory アカウントに正しくマッピングできるようにします。

たとえば、Active Directory ユーザーの sAMAccountName 属性を EXAMPLE に設定し、小文字のユーザー名でユーザーがログインしようとすると、Kerberos はユーザー名を大文字で返します。その結果、エントリーは認証の失敗に一致しません。

winbind_krb5_localauth プラグインを使用すると、アカウント名が正しくマッピングされます。これは GSSAPI 認証にのみ適用され、初期のチケット付与チケット (TGT) の取得には該当しません。

前提条件
  • Samba が Active Directory のメンバーとして設定されている。
  • Red Hat Enterprise Linux が、Active Directory に対してログイン試行を認証している。
  • winbind サービスが実行している。
手順

/etc/krb5.conf ファイルを編集し、以下のセクションを追加します。

[plugins]
localauth = {
     module = winbind:/usr/lib64/samba/krb5/winbind_krb5_localauth.so
     enable_only = winbind
}
関連情報
  • man ページの winbind_krb5_localauth(8) を参照してください。

2.5.4. Samba ID マッピング

Windows ドメインは、ユーザーおよびグループを一意のセキュリティ識別子 (SID) で区別します。ただし、Linux では、ユーザーおよびグループごとに一意の UID と GID が必要です。Samba をドメインメンバーとして実行する場合は、winbindd サービスが、ドメインユーザーおよびグループに関する情報をオペレーティングシステムに提供します。

winbindd サービスが、ユーザーおよびグループの一意の ID を Linux に提供するようにするには、/etc/samba/smb.conf ファイルで ID マッピングを設定する必要があります。

  • ローカルデータベース (デフォルトドメイン)
  • Samba サーバーがメンバーになっている AD または NT4 のドメイン
  • ユーザーがこの Samba サーバーのリソースにアクセスする必要のある信頼ドメイン

2.5.4.1. Samba ID 範囲の計画

Linux の UID および GID を AD に保存するか、Samba がそれを生成するように設定するかに関係なく、各ドメイン設定には、他のドメインと重複しない一意の ID 範囲が必要です。

警告

重複する ID 範囲を設定すると、Samba が正常に機能しなくなります。

例2.2 一意の ID 範囲

以下は、デフォルト (*)、AD-DOM、および TRUST-DOM のドメインの非オーバーランディングの ID マッピング範囲を示しています。

[global]
...
idmap config * : backend = tdb
idmap config * : range = 10000-999999

idmap config AD-DOM:backend = rid
idmap config AD-DOM:range = 2000000-2999999

idmap config TRUST-DOM:backend = rid
idmap config TRUST-DOM:range = 4000000-4999999
重要

1 つのドメインに割り当てられるのは 1 つの範囲だけです。したがって、ドメイン範囲間で十分な容量を残しておきます。これにより、ドメインが拡大した場合に、後で範囲を拡張できます。

後で別の範囲をドメインに割り当てると、このユーザーおよびグループが作成したファイルおよびディレクトリーの所有権が失われます。

2.5.4.2. * デフォルトドメイン

ドメイン環境では、以下の各 ID マッピング設定を追加します。

  • Samba サーバーがメンバーとなっているドメイン
  • Samba サーバーにアクセスできる信頼された各ドメイン

ただし、Samba が、その他のすべてのオブジェクトに、デフォルトドメインから ID を割り当てます。これには以下が含まれます。

  • ローカルの Samba ユーザーおよびグループ
  • Samba の組み込みアカウントおよびグループ (BUILTIN\Administrators など)
重要

Samba が正常に機能できるようにするには、このセクションで説明されているデフォルトのドメインを設定する必要があります。

割り当てられた ID を永続的に格納するには、デフォルトのドメインバックエンドを書き込み可能にする必要があります。

デフォルトドメインには、以下のいずれかのバックエンドを使用できます。

tdb

デフォルトのドメインを、tdb バックエンドを使用するように設定する場合は、ID 範囲を設定します。この ID 範囲には、将来作成されるオブジェクトや、定義されたドメイン ID マッピング設定には含まれないオブジェクトを追加できます。

たとえば、/etc/samba/smb.conf ファイルの [global] セクションで以下を設定します。

idmap config * : backend = tdb
idmap config * : range = 10000-999999

詳細は「tdb ID マッピングバックエンドの使用」を参照してください。

autorid

autorid バックエンドを使用するように、デフォルトのドメインを設定する場合、ドメイン用の ID マッピング設定を追加するかどうかは任意になります。

たとえば、/etc/samba/smb.conf ファイルの [global] セクションで以下を設定します。

idmap config * : backend = autorid
idmap config * : range = 10000-999999

詳細は「autorid ID マッピングバックエンドの使用」を参照してください。

2.5.5. 異なる Samba ID マッピングバックエンド

Samba は、特定の設定に対して異なる ID マッピングバックエンドを提供します。最も頻繁に使用されるバックエンドは、以下の通りです。

バックエンドユースケース

tdb

* デフォルトドメインのみ

ad

AD ドメインのみ

rid

AD ドメインおよび NT4 ドメイン

autorid

AD、NT4、および * デフォルトのドメイン

以下のセクションでは、利点、バックエンドを使用する際の推奨シナリオ、および設定方法を説明します。

2.5.5.1. tdb ID マッピングバックエンドの使用

winbindd サービスは、デフォルトで書き込み可能な tdb ID マッピングバックエンドを使用して、セキュリティー識別子 (SID)、UID、および GID のマッピングテーブルを格納します。これには、ローカルユーザー、グループ、組み込みプリンシパルが含まれます。

このバックエンドは、* デフォルトドメインにのみ使用してください。以下に例を示します。

idmap config * : backend = tdb
idmap config * : range = 10000-999999
関連情報

2.5.5.2. ad ID マッピングバックエンドの使用

本セクションでは、ad ID マッピングバックエンドを使用するように Samba AD メンバーを設定する方法を説明します。

ad ID マッピングバックエンドは、読み取り専用 API を実装し、AD からアカウントおよびグループの情報を読み取ります。これには、以下の利点があります。

  • ユーザーとグループの全設定は、AD に集中的に保存されます。
  • ユーザーおよびグループの ID は、このバックエンドを使用するすべての Samba サーバーで一貫しています。
  • ID は、破損する可能性のあるローカルデータベースには保存されないため、ファイルの所有権は失われません。
注記

ad ID マッピングバックエンドは、一方向の信頼を使用する Active Directory ドメインに対応していません。一方向の信頼で Active Directory のドメインメンバーを設定する場合は、tdbrid、または autorid のいずれかの ID マッピングバックエンドを使用します。

ad バックエンドは、AD から以下の属性を読み込みます。

AD 属性名オブジェクトの種類マッピング先

sAMAccountName

ユーザーおよびグループ

オブジェクトのユーザー名またはグループ名

uidNumber

ユーザー

ユーザー ID (UID)

gidNumber

グループ

グループ ID (GID)

loginShell [a]

ユーザー

ユーザーのシェルのパス

unixHomeDirectory [a]

ユーザー

ユーザーのホームディレクトリーのパス

primaryGroupID [b]

ユーザー

プライマリグループ ID

[a] idmap config DOMAIN:unix_nss_info = yes を設定している場合に限り、Samba がこの属性を読み込みます。
[b] idmap config DOMAIN:unix_primary_group = yes を設定している場合に限り、Samba がこの属性を読み込みます。
前提条件

ad ID マッピングバックエンドを使用する場合は、以下を実行している。

  • ユーザーおよびグループはいずれも、AD で一意の ID が設定され、ID が、/etc/samba/smb.conf ファイルで設定されている範囲内にある。ID が範囲外にあるオブジェクトは、Samba サーバーでは利用できません。
  • ユーザーおよびグループには、AD ですべての必須属性が設定されている。必要な属性がないと、ユーザーまたはグループは Samba サーバーで使用できなくなります。必要な属性は、設定によって異なります。
手順
  1. /etc/samba/smb.conf ファイルの [global] セクションを編集します。

    1. デフォルトドメイン (*) に ID マッピング設定が存在しない場合は追加します。以下に例を示します。

      idmap config * : backend = tdb
      idmap config * : range = 10000-999999
    2. AD ドメインの ad ID マッピングバックエンドを有効にします。

      idmap config DOMAIN : backend = ad
    3. AD ドメインのユーザーおよびグループに割り当てられている ID の範囲を設定します。以下に例を示します。

      idmap config DOMAIN : range = 2000000-2999999
      重要

      この範囲は、このサーバーの他のドメイン構成と重複させることはできません。また、この範囲には、今後割り当てられる ID がすべて収まる大きさを設定する必要があります。詳細は「Samba ID 範囲の計画」を参照してください。

    4. Samba が AD から属性を読み取る際に RFC 2307 スキーマを使用するように設定します。

      idmap config DOMAIN : schema_mode = rfc2307
    5. Samba が、対応する AD 属性からログインシェルおよびユーザーホームディレクトリーのパスを読み取るようにする場合は、以下を設定します。

      idmap config DOMAIN : unix_nss_info = yes

      または、すべてのユーザーに適用される、ドメイン全体のホームディレクトリーのパスおよびログインシェルを統一して設定できます。以下に例を示します。

      template shell = /bin/bash
      template homedir = /home/%U
    6. デフォルトでは、Samba は、ユーザーオブジェクトの primaryGroupID 属性を、Linux のユーザーのプライマリーグループとして使用します。または、代わりに gidNumber 属性に設定されている値を使用するように Samba を設定できます。

      idmap config DOMAIN : unix_primary_group = yes
  2. /etc/samba/smb.conf ファイルを検証します。

    # testparm
  3. Samba 設定を再読み込みします。

    # smbcontrol all reload-config
  4. 設定が期待どおりに機能することを確認します。「オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証」を参照してください。
関連情報

2.5.5.3. rid ID マッピングバックエンドの使用

本セクションでは、rid ID マッピングバックエンドを使用するように Samba ドメインメンバーを設定する方法を説明します。

Samba は、Windows SID の相対識別子 (RID) を使用して、Red Hat Enterprise Linux で ID を生成できます。

注記

RID は、SID の最後の部分です。たとえば、ユーザーの SID が S-1-5-21-5421822485-1151247151-421485315-30014 の場合、対応する RID は 30014 になります。

rid ID マッピングバックエンドは、AD ドメインおよび NT4 ドメインのアルゴリズムマッピングスキームに基づいてアカウントおよびグループの情報を計算する読み取り専用 API を実装します。バックエンドを設定する場合は、idmap config DOMAIN : range パラメーターで、RID の最小値および最大値を設定する必要があります。Samba は、このパラメーターで設定される RID の最小値および最大値を超えるユーザーまたはグループをマッピングしません。

重要

読み取り専用のバックエンドとして、rid は、BUILTIN グループなど、新しい ID を割り当てることができません。したがって、* デフォルトドメインにはこのバックエンドを使用しないでください。

rid バックエンドを使用した利点
  • 設定された範囲内の RID があるドメインユーザーとグループはすべて、自動的にドメインメンバーで利用可能になります。
  • ID、ホームディレクトリー、およびログインシェルを手動で割り当てる必要はありません。
rid バックエンドを使用した場合の短所
  • すべてのドメインユーザーは、割り当てられた同じログインシェルとホームディレクトリーを取得します。ただし、変数を使用できます。
  • 同じ ID 範囲設定で rid バックエンドを使用している Samba ドメインメンバーでは、ユーザー ID とグループ ID が同じになります。
  • ドメインメンバーで個々のユーザーまたはグループを除外して、利用できないようにすることはできません。設定されている範囲外にあるユーザーとグループのみが除外されます。
  • 異なるドメインのオブジェクトの RID が同じ場合は、winbindd サービスが ID の計算に使用する式に基づき、複数ドメインの環境で重複する ID が発生する場合があります。
手順
  1. /etc/samba/smb.conf ファイルの [global] セクションを編集します。

    1. デフォルトドメイン (*) に ID マッピング設定が存在しない場合は追加します。以下に例を示します。

      idmap config * : backend = tdb
      idmap config * : range = 10000-999999
    2. ドメインの rid ID マッピングバックエンドを有効にします。

      idmap config DOMAIN : backend = rid
    3. 今後割り当てられるすべての RID が収まる大きさの範囲を設定します。以下に例を示します。

      idmap config DOMAIN : range = 2000000-2999999

      Samba は、そのドメインの RID がその範囲内にないユーザーおよびグループを無視します。

      重要

      この範囲は、このサーバーの他のドメイン構成と重複させることはできません。詳細は「Samba ID 範囲の計画」を参照してください。

    4. すべてのマッピングユーザーに割り当てられるシェルおよびホームディレクトリーのパスを設定します。以下に例を示します。

      template shell = /bin/bash
      template homedir = /home/%U
  2. /etc/samba/smb.conf ファイルを検証します。

    # testparm
  3. Samba 設定を再読み込みします。

    # smbcontrol all reload-config

    設定が期待どおりに機能することを確認します。「オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証」を参照してください。

関連情報

2.5.5.4. autorid ID マッピングバックエンドの使用

本セクションでは、Samba ドメインメンバーを設定して、autorid ID マッピングバックエンドを使用する方法を説明します。

autorid バックエンドは、rid ID マッピングバックエンドと同様の動作をしますが、異なるドメインに対して自動的に ID を割り当てることができます。これにより、以下の状況で autorid バックエンドを使用できます。

  • * デフォルトドメインのみ
  • * デフォルトドメインと追加のドメインでは、追加のドメインごとに ID マッピング設定を作成する必要はありません。
  • 特定のドメインのみ
注記

デフォルトドメインに autorid を使用する場合は、ドメイン用の ID マッピング設定を追加するかどうかは任意です。

このセクションの一部は、Samba Wiki に公開されているドキュメント「idmap config autorid」に掲載されています。ライセンスは、CC BY 4.0 にあります。著者および貢献者は、Wiki ページの history タブを参照してください。

autorid バックエンドを使用した利点
  • 設定された範囲内に計算した UID と GID があるすべてのドメインユーザーおよびグループは、ドメインメンバーで自動的に利用可能になります。
  • ID、ホームディレクトリー、およびログインシェルを手動で割り当てる必要はありません。
  • 複数ドメイン環境内の複数のオブジェクトが同じ RID を持つ場合でも、重複する ID はありません。
短所
  • Samba ドメインメンバー間では、ユーザー ID とグループ ID は同じではありません。
  • すべてのドメインユーザーは、割り当てられた同じログインシェルとホームディレクトリーを取得します。ただし、変数を使用できます。
  • ドメインメンバーで個々のユーザーまたはグループを除外して、利用できないようにすることはできません。計算された UID または GID が、設定された範囲外にあるユーザーとグループのみが除外されます。
手順
  1. /etc/samba/smb.conf ファイルの [global] セクションを編集します。

    1. * デフォルトドメインの autorid ID マッピングバックエンドを有効にします。

      idmap config * : backend = autorid
    2. 既存および将来の全オブジェクトに ID を割り当てられる大きさの範囲を設定します。以下に例を示します。

      idmap config * : range = 10000-999999

      Samba は、このドメインで計算した ID が範囲内にないユーザーおよびグループを無視します。

      警告

      範囲を設定し、Samba がそれを使用して開始してからは、範囲の上限を小さくすることはできません。範囲にその他の変更を加えると、新しい ID 割り当てが発生し、ファイルの所有権が失われる可能性があります。

    3. 必要に応じて、範囲サイズを設定します。以下に例を示します。

      idmap config * : rangesize = 200000

      Samba は、idmap config * : range パラメーターに設定されている範囲からすべての ID を取得するまで、各ドメインのオブジェクトにこの数の連続 ID を割り当てます。

    4. すべてのマッピングユーザーに割り当てられるシェルおよびホームディレクトリーのパスを設定します。以下に例を示します。

      template shell = /bin/bash
      template homedir = /home/%U
    5. 必要に応じて、ドメイン用の ID マッピング設定を追加します。個別のドメインの設定が利用できない場合、Samba は以前に設定した * デフォルトドメインの autorid バックエンド設定を使用して ID を計算します。

      重要

      各ドメインに追加のバックエンドを設定する場合は、すべての ID マッピング設定の範囲がオーバーラップしないようにしてください。詳細は「Samba ID 範囲の計画」を参照してください。

  2. /etc/samba/smb.conf ファイルを検証します。

    # testparm
  3. Samba 設定を再読み込みします。

    # smbcontrol all reload-config
  4. 設定が期待どおりに機能することを確認します。「オペレーティングシステムが、ドメインのユーザーアカウントおよびグループを取得できるかどうかの検証」を参照してください。
関連情報
  • バックエンドの計算された ID の詳細は、man ページの idmap_autorid(8)THE MAPPING FORMULAS セクションを参照してください。
  • idmap config rangesize パラメーターの使用方法は、man ページの idmap_autorid(8)rangesize パラメーターの説明を参照してください。
  • 変数の置換の詳細は、man ページの smb.conf(5)VARIABLE SUBSTITUTIONS セクションを参照してください。
  • 「testparm ユーティリティーを使用した smb.conf ファイルの検証」