●Active Directory連携
winbind機能を利用Linux側にSamba用のアカウントを作成することなくWindowsのユーザアカウントをLinux上で利用することが可能となります。ActiveDirectoryと連携してドメインメンバーサーバとする手順について以下に説明します。
Sambaドメイン構成のうちActive Directoryとしてドメイン参加することが可能です。この場合、ユーザ認証にはKerberosが利用されます。Linuxでは一般的にMIT Kerberosが実装として利用されています。
ここではWindows Server2008 R2で運用中のActive DirectoryドメインにSambaサーバを参加させるための設定方法に関して説明いたします。各サーバのパラメータは下記のようになっています。注意すべきはWindows2008のDNSにtestおよびsambaは予め登録しておいてください。これをしておかないとドメイン参加時にエラーになることがあります。
Windows Server 2008 R2 | |
Active Directoryドメイン | unix-power.local |
コンピュータ名 | test |
IPアドレス | 192.168.12.201 |
Sambaサーバ ( CentOS 6.3 ) | |
コンピュータ名 | SAMBA |
IPアドレス | 192.168.12.20 |
ActiveDirectoryとの連携に必要なwinbindおよびkerberosがインストールされているか確認しなければインストールを行います。
# rpm -qa | grep winbind samba-winbind-3.5.10-125.el6.i686 samba-winbind-clients-3.5.10-125.el6.i686 # rpm -qa | grep krb5 krb5-devel-1.9-33.el6_3.3.i686 krb5-workstation-1.9-33.el6_3.3.i686 krb5-libs-1.9-33.el6_3.3.i686 |
SambaがActiveDirectoryに対応としてビルドされていることを確認します。OpenLDAPとKerberosのライブラリが必要ですがこれらのライブラリが存在していれば自動的にActiveDrirectory機能が利用可能となります。lddでsmbdにリンクされるライブラリを確認することでActiveDirectory連携が利用可能かどうか判別することができます。
# ldd /usr/sbin/smbd linux-gate.so.1 => (0x008e3000) libldap-2.4.so.2 => /lib/libldap-2.4.so.2 (0x002c3000) liblber-2.4.so.2 => /lib/liblber-2.4.so.2 (0x00207000) libgssapi_krb5.so.2 => /lib/libgssapi_krb5.so.2 (0x00216000) libkrb5.so.3 => /lib/libkrb5.so.3 (0x0052f000) <省略> |
事前準備としてDNSサーバをADに向けておく必要があります。
# vi /etc/resolv.conf search unix-power.local nameserver 192.168.12.201 |
ADではKerberos認証が機能するため、時刻を正確に合しておく必要があります。AD環境ではクライアントは原則としてドメインコントローラと時刻同期をするらしい。Windows2008 R2において以下のコマンドをDOS窓からたたいて時刻を同期しておきます。
> w32tm /config /manualpeerlist:133.100.9.2 /syncfromflags:manual > net stop w32time > net start w32time > w32time /resync > w32tm /query /peers ピア数: 1 ピア: 133.100.9.2 状態: アクティブ 残り時間: 35.7795505s モード: 1 (対称アクティブ) 階層: 0 (未指定) ピアポーリング間隔: 0 (未指定) ホストポーリング間隔: 6 (64s) |
AD連携のためkrb.conf / smb.conf / nsswitch.conf / system-authをそれぞれ編集する必要がありますが個別に手動でやるのは手間なので次のコマンドで対話形式に設定を行う事が可能です。
これでOKを押すとそれぞれのファイルに保存されます。以下にそれぞれのファイルの内容を記載します。
●/etc/samba/smb.conf
[global] #--authconfig--start-line-- # Generated by authconfig on 2013/02/03 12:32:05 # DO NOT EDIT THIS SECTION (delimited by --start-line--/--end-line--) # Any modification may be deleted or altered by authconfig in future workgroup = UNIX-POWER password server = test.unix-power.local realm = UNIX-POWER.LOCAL security = ads idmap uid = 16777216-33554431 idmap gid = 16777216-33554431 template shell = /bin/bash winbind use default domain = false winbind offline logon = false #--authconfig--end-line-- dos charset = CP932 display charset = UTF-8 ; workgroup = WORKGROUP netbios name = SAMBA server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 cups options = raw load printers = no disable spoolss = yes printing = bsd socket address = 192.168.12.20 [homes] comment = Home Directories read only = No browseable = No [printers] comment = All Printers path = /var/spool/samba printable = Yes browseable = No [public] path = /var/samba/public read only = No |
各パラメータの意味は下記の通りです。
realm | ADのドメイン名を指定します。これは全て大文字で設定します |
workgroup | NTドメイン形式のドメイン名を利用するためにADサーバで設定 しているNTドメインのNetBIOS名を設定します |
security | AD連携機能を利用するときにはadsを指定します |
password server | ドメインコントローラを指定します。 |
idmap uid | winbindはWIndowsドメインコントローラから取得した情報を 元にLinux用のユーザアカウントを自動作成します。自動で作成 されるアカウントはwinbindによって管理されており/etc /passwdなどには現れません。またwinbindはユーザ情報を作 成するときにidmap uidにパラメータに指定した範囲のUIDを小 さい値から順番に割り当てます。従って既存のユーザアカウン トに割り当てられていないUIDの範囲で指定しなければなりま せん。 |
idmap gid | idmap uidと同様で自動的に作成されるグループに関する値の範 囲を指定します。 |
winbind enum users | ドメインコントローラに非常に多くのユーザが登録されている 場合、エントリの取得に時間がかかることがありますwinbindは ネットワークごしにユーザエントリを取得するためネットワー ク帯域幅がせまくユーザ数が多数に渡る場合など、ユーザ一覧 取得処理にかかる時間が無視できないものになることもありま す。このような環境でユーザ一覧の取得時に一覧の取得を抑制 するためのパラメータです。noを設定するとユーザ一覧の取得 を抑制します。 |
winbind enum groups | winbind enum groupsと同様のパラメータでnoを指定した場 合、グループ一覧の取得を抑制します。 |
template homedir | winbindによって自動的に作成されたユーザのホームディレクト リの初期パラメータとして割り当てられます。規定値は/home /%D/%Uと設定されているため/home/ドメイン名/ユーザ名が ホームディレクトリとして割り当てられます。 |
template shell | winbindによって自動的に作成されたユーザのログインシェルの 初期パラメータとして割り当てられます。規定値は/bin/falseが 設定されているためwinbindによって自動的に作成されたユーザ はシステムにログインすることができません。 |
winbind enable local accounts | このパラメータをyesに設定するとwinbindはユーザ作成要求が 発生したときにwinbind独自のデータベース内にユーザアカウン トを自動的に作成します。これと同時にadd user scriptなど、 ユーザ作成などに関する一部のパラメータは無視されます。 |
winbind separator | winbind機能を用いいるとWindowsドメインコントローラから 取得したユーザ情報はデフォルトでドメイン名\ユーザ名の形 式で表現されます。しかしLinuxではバックスラッシュは特別な 意味をもつことが多いので運用上あまり好ましくありません。 そこでバックスラッシュを他の文字に置き換えたい場合にこの パラメータに置き換える文字を指定します。 |
winbind use default domain | このパラメータをyesにするとwinbindによって作成されたユー ザ名からドメイン名が取り除かれます。その結果、sshなど samba以外のアプリケーションでwinbind経由で取得したユー ザ名を利用する場合にもドメイン名が含まれないため一般的な ユーザ名でログインすることが可能となり、ユーザの利便性が 向上します。 |
winbind cache time | winbindは性能向上のためにユーザ情報やグループ情報をキャッ シュとして保持しています。このパラメータはキャッシュを保 持する時間であり、指定した時間を過ぎて問い合わせがあると 再度ドメインコントローラから情報を取得します。 |
●/etc/krb5.conf
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = UNIX-POWER.LOCAL dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] EXAMPLE.COM = { kdc = kerberos.example.com admin_server = kerberos.example.com } UNIX-POWER.LOCAL = { kdc = test.unix-power.local } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM<br> |
Kerberosの設定は/etc/krb5.confにて行っています。パラメータの意味を以下に示します。
default_realm | ADのドメイン名を設定します。 smb.confのrealmのと同じ値を全て大文字で記載します |
[realms] | Kerberosに関する情報を格納するセクションです。 どのれるむに関する設定か指定します |
kdc | レルムでチケットの発行を行うサーバを指定します。 チケットはKerberosのユーザ認証に利用されます。 ADのDCに該当しFQDNの形式で利用されます |
[domain_realms] | DNS名とレルムのマッピングを設定します |
●/etc/nsswitch.conf
<省略> passwd: files winbind shadow: files winbind group: files winbind <省略> |
●/etc/pam.d/system-auth
auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_winbind.so use_first_pass auth required pam_deny.so account required pam_unix.so broken_shadow account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet session optional pam_keyinit.so revoke session required pam_limits.so session optional pam_mkhomedir.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so |
最後にKerberos認証に必要なチケットを取得するためにkinitを実行します。チケットの発行はDCで行われるためkinitの引数にWindowsサーバのドメイン管理者を指定します。これを実行する際にはpassword serverで指定している名前とドメインコントローラに設定されている名前が一致していないと失敗するのであっていない場合は合わせてから実行してください。
# kinit administrator Password for administrator@UNIX-POWER.LOCAL:********* # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@UNIX-POWER.LOCAL Valid starting Expires Service principal 02/03/13 12:50:06 02/03/13 22:50:10 krbtgt/UNIX-POWER.LOCAL@UNIX-POWER.LOCAL renew until 02/10/13 12:50:06 # net ads join -U administrator Enter administrator's password:********* Using short domain name -- UNIX-POWER Joined 'SAMBA' to realm 'unix-power.local' No DNS domain configured for samba. Unable to perform DNS Update. DNS update failed! |
チケットの取得に成功したらnetでADドメインに参加します。ADドメインに参加するときは利用するプロトコルとしてadsを指定します。このコマンドを実行するときはLinuxサーバがDNSに登録されている必要があります。
DNS登録を行わずにjoinしようとすると
# net ads join -U administrator Enter administrator's password:********* Using short domain name -- UNIX-POWER Joined 'SAMBA' to realm 'unix-power.local' No DNS domain configured for samba. Unable to perform DNS Update. DNS update failed! |
となってしまいます。DNS登録を行なってからjoinを試みると
# net ads join -U administrator Enter administrator's password:********* Using short domain name -- UNIX-POWER Joined 'SAMBA' to realm 'unix-power.local' |
成功しました。以下のコマンドでwinbindを起動します。
# /etc/rc.d/init.d/winbind start |
以下のコマンドでユーザ情報を取得してます。-uでユーザ名、-gでグループ名を取得できます。ドメインユーザであればユーザ名の前にWindows風にドメイン名がつきます。
# wbinfo -u SAMBA\user01 UNIX-POWER\administrator UNIX-POWER\guest UNIX-POWER\krbtgt # wbinfo -g UNIX-POWER\domain computers UNIX-POWER\domain controllers UNIX-POWER\schema admins UNIX-POWER\enterprise admins UNIX-POWER\cert publishers UNIX-POWER\domain admins UNIX-POWER\domain users UNIX-POWER\domain guests UNIX-POWER\group policy creator owners UNIX-POWER\ras and ias servers UNIX-POWER\allowed rodc password replication group UNIX-POWER\denied rodc password replication group UNIX-POWER\read-only domain controllers UNIX-POWER\enterprise read-only domain controllers UNIX-POWER\dnsadmins UNIX-POWER\dnsupdateproxy |
これでADアカウントを用いて既にログイン可能な状態ではあるのですがログインのタイミングでホームディレクトリが自動作成されるよう以下のコマンドでそれを有効にします。
# authconfig --enablemkhomedir --update nslcd を起動中: [ OK ] nscd を起動中: [ OK ] |
上のコマンドで有効となります。例えばSSHでログインする場合、アカウント名はUNIX-POWER\アカウント名となります。ホームディレクトリの位置などは以下のようになります。
$ pwd /home/UNIX-POWER/unixpower |
ドメイン名をつけるのが面倒な場合、これを省略することも可能です。/etc/samba/smb.confでwinbind use default domain = trueとすることでユーザ名だけでログインが可能となります。設定を編集し、winbindを再起動して有効化します。
# vi /etc/samba/smb.conf <省略> [global] winbind use default domain = true <省略> # /etc/rc.d/init.d/winbind restart |
再度、ユーザ、グループ名を取得してドメイン名がなくなったことを確認します。
# wbinfo -u SAMBA\user01 administrator guest krbtgt unixpower # wbinfo -g domain computers domain controllers schema admins enterprise admins cert publishers domain admins domain users domain guests group policy creator owners ras and ias servers allowed rodc password replication group denied rodc password replication group read-only domain controllers enterprise read-only domain controllers dnsadmins dnsupdateproxy unix-power |