MIRACLE

メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

テクノロジー情報

技術フォーラム


Samba が動作する Linux マシンを Windows ドメインに参加させる方法
― MIRACLE LINUX V2.1 における Samba Winbind 利用方法 ―

  1. はじめに

    MIRACLE LINUX Standard Edition V2.1 および Red Hat Linux Advanced Server 2.1 powered by MIRACLE では Samba 2.2.4 日本語版が採用されています。

    Samba 2.2.4 日本語版でのさまざまな新機能の中で、Winbind 機能は従来のドメインメンバ (Security=DOMAIN) 機能を置き換える重要でかつ大変便利な機能です。
    ここではこの Winbind 機能の利用方法を紹介します。

  2. Winbind 機能概要

    Winbind は以下の機能を提供します。

    • Linux と Windows の間の統一ログオン

      Windows ドメイン内の(ドメインに参加した)すべてのマシンに対し、同じユーザアカウントとパスワードを使って Linux、Windows のログオンを統一可能にします。



      Fig1. Winbind 機能

      従来の Samba 2.0系でも Samba マシンを Windows ドメインに参加させることが可能でしたが、その場合はパスワードだけが Windows ドメインに認証されるだけで、各 Linux マシン上にユーザやグループの登録が別途必要でした。

      そのため、Linux + Sambaのマシンが多くなるとユーザやグループの管理が面倒でした。

      Winbind はこうした問題を解決しますが、以下の制限事項も残っています。

    • winbind の制限事項
      • ドメインコントローラを Windows NT4.0/2000にしないとドメインを構築することができない。
        Sambaをドメインコントローラにすると winbind は利用できません。

      • Windows の RID から UNIX の ID(uid、gid)へのマップは演算的に作られたものではなく、winbind が未登録とみなしたユーザーやグループから割り当てられます。
        従って、ドメイン内のすべての Linux で uid、gid は同じになるとは限らないし、マップ情報を保持しているファイルが改ざんされたり,破壊されると RID から UNIX の ID へのマップを復旧することは困難です。
        (NFSを使用する時、uid と gid が統一されないので問題となります)

      • Linux の passwd コマンドでの Windows ドメインパスワードの変更はできません。
        smbpasswd -r ドメインサーバ名

        で可能なので

        alias passwd = smbpasswd -r ドメインサーバ名

        を一般ユーザの bash_profile に入れたり、SWAT によるパスワード変更をルール付けるといいでしょう。

      • 現状の winbind の PAM モジュールは、ユーザ毎にログインできるワークステーションを制限することやログオン時間を制限する機能などを実現していません。

  3. 設定手順

    Winbind の設定は以下の手順で行います。

    1. Samba インストール確認
    2. Winbind (smb.conf) の設定
    3. Windows ドメインに Samba マシンを登録
    4. マシン・アカウントの作成
    5. Winbind デーモンの起動と動作確認
    6. NSSWITCH (/etc/nsswitch.conf) の設定
    7. PAM (/etc/pam.d/system-auth) の設定

    以下に順を追って説明します。

  4. Samba インストール確認

    Winbind を利用するには、Samba 2.2.4 日本語版(もしくはこれより新しい版のもの)が必要です。

    Samba がインストールされているかは以下のコマンドで確認します。

    # rpm -q samba

    Samba のパッケージとバージョンが表示されればインストールされていることになります。

    もし、インストールされていなければ、MIRACLE LINUX のインストール CD をマシンに挿入し、以下のコマンドでインストールします。

    # mount /mnt/cdrom
    # rpm -Uvh /mnt/cdrom/Miracle/RPMS/samba*.rpm

    すでにインストールされている場合でも、以下の作業を行う前にSambaデーモンを停止させておく必要がありますので、以下のようにして停止しておいてください。

    # service smb stop

  5. Winbind (smb.conf) の設定

    Winbind は従来の Samba の smbd や nmbd と異なるデーモンですが、設定ファイルは同じ /etc/samba/smb.conf を使用し、以下の項目を設定します。(下記以外のものは SWAT のドキュメント参照してください)

    smb.conf パラメータ パラメータの意味
    security Winbind を使用する時は必ず security=DOMAIN を指定します。
    workgroup Windows PDC (Primary Domain Controler) *注1が持つドメイン名と同じ Windows ドメイン名を指定します。
    password server Winodws PDC のホスト名を指定します。
    DNS や /etc/hosts、WINS 等で名前解決できるようにしておきましょう。
    同一セグメントに PDC が存在するか、WINS サーバが存在する場合は、*を指定することも可能です。
    wins server WINS サーバの IP アドレスを指定します。
    Windows PDC を WINS サーバとし、その IP アドレスを指定するのが望ましいです。
    wins support=yes とするのは望ましくありません。
    encrypt passwords Windows PDC は暗号化パスワードを使用するので、必ず Yes を指定します。
    winbind separator Windows ドメインとユーザ名のセパレータを指定します。
    通常 Windows ドメイン・ユーザは「ドメイン名¥ユーザ名」で表現され、デフォルトのセパレータは「¥」記号です。
    しかし、UNIX のシェルの中で「¥」は特殊な意味を持つため、このセパレータを変更したいときに指定します。
    代替としては、「/」などでも良いですがディレクトリのセパレータとなっているので不都合がでる場合もあります。「+」記号や「_(アンダーバー)」記号などが良いでしょう。

    デフォルト)winbind separator = \ 
    使用例)winbind separator = + 
    winbind uid winbind が UNIX/Linux ユーザに割り当てる uid (ユーザID) の範囲を指定します。
    /etc/passwd や NIS の中で使用されていない範囲を指定しなければなりません。

    デフォルト)winbind uid = なし
    使用例)winbind uid = 10000-20000
    winbind gid winbind が UNIX/Linux ユーザに割り当てる gid (グループID) の範囲を指定します。
    /etc/groupや NIS の中で使用されていない範囲を指定しなければならなりません。

    デフォルト)winbind gid = なし
    使用例)winbind gid = 10000-20000  
    winbind cache time winbind デーモンがユーザ情報、グループ情報をキャッシュする時間を秒単位で指定します。

    デフォルト)winbind cache time = 15 
    winbind enum users 大規模システムでのユーザ一覧取得を抑制するためのオプションです。
    デフォルトは yes ですが、no にすると setpwent()、getpwent()、endpwent() のシステム関数で一覧が取得できなくなり、finger などの一部のプログラムが動作しなくなることがあります。

    デフォルト)winbind enum users = yes
    winbind enum groups 大規模システムでのグループ一覧取得を抑制するためのオプションです。
    デフォルトは yes ですが、no にすると setgrent()、getgrent()、 endgrent() のシステム関数で一覧が取得できなくなり、一部のプログラムが動作しなくなる可能性があります。

    デフォルト)winbind enum groups = yes
    template homedir ユーザホームディレクトリを指定します。

    デフォルト)template homedir = /home/%D/%U

    これは、/home/ドメイン名/ユーザ名 を意味します。
    template shell ユーザのデフォルト・シェルを指定します。

    デフォルト)template shell = /bin/false

    デフォルトでは、Linux にログインできないので、telnet や ssh を使用する場合は、template shell = /bin/bash 等を指定します。

    *注1)Windows NT による NT ドメインには、PDC (Primary Domain Controler) と BDC (Backup Domain Controler) が存在しますが、Windows 2000 の Active Directory には PDC、BDC は存在せず DC (Domain Controler) のみとなります。

    Fig.2 に smb.conf の設定を載せます。
    なお Winbind を使用する場合、以下のパラメータは決して指定してはいけません。

    domain logon = yes
    domain master = yes

    [global]
    	coding system = euc
    	client code page = 932
    	workgroup = MIRACLE
    	server string = Samba %v on %h
    	security = DOMAIN
    	encrypt passwords = Yes
    	password server = win2kdc
    	deadtime = 15
    	read size = 65536
    	socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    	lm announce = False
    	preferred master = False
    	local master = No
    	domain master = False
    	dns proxy = No
    	wins server = 192.168.0.1
    	winbind uid = 1000-1500
    	winbind gid = 2000-2500
    	template shell = /bin/bash
    	winbind separator = _
    

    Fig2 smb.conf 設定例(重要な部分だけを抜粋しています)

  6. Windows NT4.0/2000 Serverでの設定

    Windows NT4.0/2000 Server をドメインコントローラとして、ドメインを構築する必要があります。
    (必要に応じてこのマシンをWINSサーバやDNSサーバとすると良いでしょう)

    次に Windows ドメインのドメイン・コントローラである Windows NT4.0 /2000 Server上の "サーバマネージャ"(SRVMGR.EXE) を使って Samba マシンを Windows NT Workstaton として Windows ドメインに追加します。
    (Windows2000ではスタート・メニューにないので「ファイル名を指定して実行」を使って起動します)


    Fig3. サーバマネージャ

    この時、Sambaマシンでなく、ドメインに参加するWindows NT/2000/XPマシンすべてを登録すると良いでしょう。
    (Windows 95/98/Meは必要ない)


  7. Sambaマシンのトラスト・アカウントを作成

    今度はドメインのメンバになるすべての Samba マシンの上で root ユーザになってドメイン参加のためのトラスト・アカウントを作成します。
    参加する Windows ドメインの名前が DOMNAME , PDC(プライマリ・ドメイン・コントローラ) のコンピュータ名が DOMPDC の場合の方法は以下の通りです。

    # smbpasswd -j DOMNAME -r DOMPDC
    smbpasswd: Joined domain DOMAIN.

    事前に Samba サーバを停止させ、PDC の名前解決と ping ができるように確認しておきましょう。
    (上記の例では ping DOMPDC がうまくいくことを確認)
    ping がうまくいかない時は、PDC のコンピュータ名と IP アドレスを /etc/hosts に記述するか、もしくは後述する LIBNSS_WINS を設定するのが良いでしょう。


  8. ネーム サービス スイッチの設定(/etc/nsswitch.conf)

    該当マシンを Samba でしか利用しない場合(telnet や ftp で使用しない場合)は、NSSWITCH の設定だけ(PAM の設定無し)で Winbind は利用可能になります。

    /etc/nsswitch.conf の中で以下の行を探し、変更します。

    [変更前の例]

    passwd:    files nisplus nis
    group:     files nisplus nis

    [変更後の例]

    passwd:     files winbind
    group:      files winbind

    ネットワークが複数セグメントにまたがっている場合やマシン台数がある程度ある場合は、PDC(Primary Domain Controler)の Windows サーバを WINS サーバとして、すべての Linux/Windows マシンで LIBNSS_WINS を利用することを推奨します。


  9. 認証機構の設定(/etc/pam.d/system-auth)

    該当マシンを Samba でだけでなく ssh や telnet、ftp でも使用する場合は、ローカルマシンの認証方法を指定するため、PAM の設定も必要です。

    /etc/pam.d/system-auth を以下のように

    auth        sufficient    /lib/security/pam_winbind.so



    account     sufficient    /lib/security/pam_winbind.so

    を追加して修正します。

    ユーザホームを自動で作成したい場合は

    session     required      /lib/security/pam_mkhomedir.so skel=/etc/skel umask=0022

    も追加するといいでしょう。

    #%PAM-1.0
    auth        required      /lib/security/pam_env.so
    auth        sufficient    /lib/security/pam_unix.so likeauth nullok
    auth        sufficient    /lib/security/pam_winbind.so
    auth        required      /lib/security/pam_deny.so
    
    account     required      /lib/security/pam_unix.so
    account     sufficient    /lib/security/pam_winbind.so
    
    password    required      /lib/security/pam_cracklib.so retry=3
    password    sufficient    /lib/security/pam_unix.so nullok use_authtok md5 shadow
    password    required      /lib/security/pam_deny.so
    
    session     required      /lib/security/pam_limits.so
    session     required      /lib/security/pam_unix.so
    session     required      /lib/security/pam_mkhomedir.so skel=/etc/skel umask=0022
    

    Fig4. /etc/pam.d/system-auth の設定例

  10. Winbind と Samba の起動

    以上で設定は完了で各マシンで winbind デーモンと Samba プロセス(nmbd、smbd デーモン)を設定すれば完了です。

    # service smb start
    # service winbind start

    OS 起動時にデーモンが自動起動するように以下も設定しておきましょう。

    # chkconfig smb on
    # chkconfig winbind on

    もし、うまく起動できなければ、/var/log/samba/ にあるエラーログの内容を確認し、設定を修正しましょう。


  11. ユーザとグループの管理

    Winbind を利用する場合は PDC となる Windows NT/2000 サーバにユーザを追加するだけで、Linux への telnet、ftp、ssh ログインも Samba へのファイル共有も同じパスワードでアクセス可能になります。

    Windows NT4.0 サーバでのユーザ管理は「ドメインユーザマネージャ」(usrmgr.exe)で、Windows 2000 サーバでのユーザ管理は「Active Directory ユーザーとコンピュータ」で行います。


    Fig5. Windows 2000 サーバの「Active Directory ユーザーとコンピュータ」

  12. Winbindの動作確認

    wbinfo コマンドを使うと winbind から情報を取り出すことができ、winbind の設定がうまくいっているか確認できます。使用方法は以下の通りです。

    [コマンドの文法]

    wbinfo [-t] [-u] [-g] [-m] 
           [-h NETBIOS名]
           [-i IPアドレス] 
           [-n ユーザ名/グループ名] 
           [-s セキュリティ識別子] 
           [-U ユーザID] 
           [-G グループID] 
           [-S セキュリティ識別子] 
           [-Y セキュリティ識別子] 
           [-r ユーザ名] 
           [-a ユーザ名%パスワード] 
           [-A ユーザ名%パスワード]
    

    [引数の意味]

    引数 引数の意味
    -t Samba サーバが smbpasswd コマンドによって Windows NT ドメインに参加したときに作成されたマシン・アカウントが機能しているかテストする。
    -u Windows NT ドメイン内で利用できる全ユーザをリストする。すべての信頼できるドメインのユーザもまた、リストされる。この操作では winbindd に見えないユーザの ID は取得できない。
    -g Windows NT ドメイン内で利用できる全グループをリストする。すべての信頼できるドメインのグループもまた、リストされる。この操作では winbindd に見えないグループの ID は取得できない。
    -m 信頼されたドメインの一覧を表示する。
    このリストには、サーバがプライマリドメインコントローラとなっている Windows NT ドメインは含まれない。
    -n ユーザ名/グループ名 指定された名前に対応する SID (セキュリティ識別子)を問い合わせる。ドメイン名を winbindd の区切り文字を使ってユーザ名の前に付加することもできる。
    例えば、CWDOM1/Administrator は ドメイン CWDOM1 の Administrator ユーザを問い合わせる。
    ドメインに何も指定しなかったときには smb.conf の workgroup パラメータの値が使用される。
    -s セキュリティ識別子 SID の名前解決に使用する。これは、 前に述べた -n オプションの逆の働きをする。
    SID には Microsoft 形式での ASCII 文字列を指定しなければいけない。
    例えば S-1-5-21-1455342024-3071081365-2475485837-500 である。
    -U ユーザID UNIX/Linux のユーザ ID を Windows の SID への変換を試みる。
    指定された uid が winbind での uid の範囲内でなければ、エラーとなる。
    -G グループID UNIX/Linux のグループ ID を Windows の SID への変換を試みる。指定されたグループ ID が winbind での gid の範囲内でなければ、エラーとなる。
    -S sid SID を UNIX/Linux のユーザ ID に変換する。
    SID が winbindd のマップする UNIX/Linux のユーザに該当しない場合は、エラーとなる。
    -Y sid SID を UNIX/Linux のグループ ID に変換する。
    SID が winbindd のマップする UNIX/Linux のグループに該当しない場合は、エラーとなる。
    -r ユーザ名 ドメインコントローラに定義されたユーザが所属するグループ ID 一覧を表示する。
    -a ユーザ名%パスワード winbind 経由でユーザ名とパスワードの認証を試みて、そのプロトコルと結果を表示する。
    -A ユーザ名%パスワード winbind 経由でユーザ名とパスワードをドメインコントローラに格納する。


    Fig6. Wbinfo 実行例

  13. Windowsクライアントからの使用方法

    ドメインに参加している Windows サーバを利用する方法と同じ方法で Samba マシンが利用できます。

    • クライアントが Windows NT/2000/XP の場合は、Samba と同様にクライアントをドメインに参加させる設定をすること。
    •  ドメインサーバにドメインユーザを登録する。
    •  ドメインユーザが登録されていれば、Windows クライアントおよび Samba マシンにはユーザ登録は必要ない。
    • ユーザホーム機能を使用する場合は、予めホームディレクトリを以下のように作成する必要がある。
      ただし、Fig4 で説明した pam_mkhomedir.so を設定した場合は、Linux にログインした時に自動的にユーザホームが作成される。

      ホームディレクトリ作成例)

      ドメイン名が MIRACLE、ユーザ名が odagiri、smb.conf の設定が Fig2 の場合
      # mkdir -p /home/MIRACLE/odagiri
      # chown MIRACLE_odagiri /home/MIRACLE/odagiri

    Fig7 に Winbind を使って MIRACLE ドメインの odagiri がログインした場合の SWAT STATUS ページの表示例を示します。



    Fig7 SWAT STATUS ページの表示例

    これを見てわかる通り UNIX/Linux 上でのユーザ名は、「ドメイン名+ユーザ名」となります。

    例えば、ドメイン名が MIRACLE (必ず英大文字)でユーザ名が odagiri、セパレータが _ の場合は、Linux 上のユーザ名は MIRACLE_odagiri となります。
    ssh や ftp を使用するときは注意してください。

    以上が winbind の機能であり、従来の Samba 2.0系の security=domain 機能よりも格段に Windows NT ドメインとの親和性が向上していることがわかると思います。


補足1.LIBNSS_WINS使用方法

既存のネットワークが Windows NT/2000 サーバのドメインによって構築されている場合、Windows マシンの名前解決が WINS (Windows Internet Name Service) によって管理されている場合があります。

こうしたネットワークに後から Samba サーバをドメインメンバとして追加する場合、Samba マシン自体は WINS クライアントにもなれるので、Samba マシンの名前解決は容易に実現できます。

ところが Samba マシンを Windows クライアントから利用する場合、Samba(Linux) マシンから Windows クライアントの名前解決ができないと telnet や ftp などがうまくできなかったり、ログオンに時間がかかるなどの問題が発生することがあります。

こうした問題を解決するために libnss_wins を利用すれば、UNIX/Linux でのホスト名の名前解決で DNS やhosts ファイルに加え、WINS を使用して名前解決ができるようになります。
(WINS サーバには Samba マシンと Windows NT/2000 サーバだけがなることができ、WINS クライアントはWindows 95 以降のすべての Windows マシンと Samba マシンがなることができます)

通常 UNIX/Linux でのホスト名の名前解決は DNS や hosts ファイルや NIS が用いられ、WINS を参照しません。
そのため、Windows の ping コマンドでは WINS を参照して名前解決できるマシンも Linux の ping では WINS を参照しないため、名前解決できないことがあります。

Linux や Windows サーバだけを DNS で管理すれば問題はないように見えますが、Windows クライアントを WINS や DHCP のみで管理している場合、Linux マシンから Windows クライアントの名前解決できなかったり、古い Windows マシンでは DNS による NBT 名前解決できなかったり、動的 DNS が利用ができなかったりして、制限事項がありました。
(Windows クライアントから Samba サーバの名前解決ができても、Samba サーバ側から Windows クライアントの名前解決ができないとエラーとなったり、接続が遅くなったりすることがあります)

LIBNSS_WINS の設定方法は、/etc/nsswitch.conf の中で以下の hosts 行を探し、変更します。

<変更前の例>

hosts: files nisplus nis dns

<変更後>

hosts: files wins dns

これでホスト名の解決時に/etc/hostsの検索後、DNSに問い合わせる前にWINSを検索するようになります。
(winsとdnsのどちらを先にするかは、ネットワーク環境により決定ください。)

リモートのWINSサーバのアドレスは、smb.conf の中に以下のように指定します。

wins server = 123.45.56.78

もし、そのマシン自身のSambaがWINSサーバとする場合は、smb.conf の中に以下のように指定すれば、ローカル(127.0.0.1)を参照します。

wins support = yes

もちろん、このWINSの設定はSambaマシンやWindowsクライアントすべてで統一しないと意味がないし、これができていないトラブルの元になるので注意してください。

しかし、WINSサーバがなくてもWindowsと同じようにポート137へのブロードキャストでも名前解決ができるので、ネットワーク・セグメントが1つしかない場合なら便利な機能です。

なお、Windows NT/2000サーバをWINSサーバにするときはコンポーネントの追加で「Windows Internet Service」を追加します。
(ワークステーションやWindows 9xはWINSサーバになれません)


補足2.PAM(Pluggable Authentication Modules)について

システム管理者が認証プログラムを再コンパイルせずに認証ポリシーを設定できるようにする方法です。

PAMを使用する場合、/etc/pam.dにあるPAM設定ファイルを編集することによって、プログラムに認証モジュールをプラグインする方法を制御できます。

PAMには次の4つのタイプのモジュールがあり、特定のサービスへのアクセスを制御します。

  • auth
    実際の認証を提供(パスワードの要求およびチェック)し、所属グループなどを設定する。
  • account
    認証が許可されることをチェックする。
    (アカウントが期限切れでないか、ユーザーがその時刻のログインを認められているか、など)。
  • password
    パスワードの設定に使用される。
  • session
    ユーザーが認証された後で使用され、sessionモジュールによって、ユーザーが自分のアカウントを使用できるようになる。
    (例えば、ユーザーのホームディレクトリをマウントしたり、メールボックスを利用できるようにする)

PAM制御フラグは、チェック結果に対する処理方法をPAMに提供します。
モジュールは特定の順序でスタックされるので、制御フラグによって、ユーザーが後に続くモジュールの重要度を設定することができます。

PAMの規格によって、以下の4つのタイプの制御フラグが定義されています。

  • required (必要)フラグモジュール
    許可される認証の順序で完全にチェックされなければならないもの。
    requiredモジュールのチェックが失敗すると、(スタックされた)同じタイプのほかのモジュールがチェックされるまでユーザーには何も通知されない。
  • requisite (必須)フラグモジュール
    これも、許可される認証の順序で完全にチェックされなければならない。
    ただし、 requisite モジュールのチェックが失敗した場合は、RequiredまたはRequisitモジュールが最初に失敗したことを知らせるメッセージがユーザーに直ちに通知される。
  • sufficient (十分)フラグモジュール
    このチェックが失敗しても無視される。
    ただし、 sufficient フラグモジュールのチェックが成功し、その上のrequired フラグモジュールがすべて成功した場合、このタイプのほかのモジュールはチェックされず、このモジュールタイプ全体のチェックが成功したと見なされる。
  • optional (任意)フラグモジュール
    このタイプのモジュール以外がすべて成功または失敗した時、成功または失敗した optional フラグモジュールによって、そのモジュールタイプ全体のPAM認証が決定される。
■この資料の評価をお願いします。
とても参考になった
参考になった
どちらでもない
あまり参考にならなかった
まったく参考にならなかった

コメントがある場合は以下に記述してください。技術資料として取り上げてほしいテーマも受け付けています。

以下は任意です。

お名前(フルネーム) :
会社名 :
メールアドレス :
 

ページトップへ



テクノロジー情報
リナックス関連
イベント/セミナー資料
オラクル/DB関連
Samba関連
研修のご紹介
FAQ
インストレーションガイド
ソフトウェアダウンロード
実績のあるシステム構成

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2008 MIRACLE LINUX CORPORATION. All Rights Reserved.