「Active Directory 統合化」の版間の差分
(en:Active Directory Integrationへの転送ページ) |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
(3人の利用者による、間の9版が非表示) | |||
1行目: | 1行目: | ||
+ | [[Category:ディレクトリサービス]] |
||
− | #redirect[[en:Active Directory Integration]] |
||
+ | [[en:Active Directory Integration]] |
||
+ | [[ru:Active Directory Integration]] |
||
+ | {{Related articles start}} |
||
+ | {{Related|Samba}} |
||
+ | {{Related|Samba/Active Directory ドメインコントローラ}} |
||
+ | {{Related|SOGo}} |
||
+ | {{Related articles end}} |
||
+ | データセンターのシステム管理者にとってヘテロジニアスな環境の共存は大きな課題です。ヘテロジニアスな環境とは様々なオペレーティングシステムのサーバー (大抵は Microsoft Windows と Unix/Linux) が混じり合っていることを意味します。中でもユーザーの管理や認証は最も解決が難しい問題です。この問題を解決する方法としてはディレクトリサーバーの使用が一般的でしょう。様々な *NIX に対応したオープンソース・商用のソリューションは数多く存在します。しかしながら、Windows との相互運用性の問題を解決できるソリューションは多くありません。アクティブディレクトリ (AD) は Windows ドメインネットワークのために Microsoft によって作成されたディレクトリサービスです。AD は Windows Server オペレーティングシステムには大抵含まれています。アクティブディレクトリを動作させるサーバーコンピュータはドメインコントローラと呼ばれます。 |
||
+ | |||
+ | [[Wikipedia:ja:Active Directory|Active Directory]] はネットワークの管理とセキュリティの中心地として機能します。Windows ドメインタイプのネットワークに含まれる、あらゆるユーザーとコンピュータの認証と管理を取り仕切って、ネットワーク上の全てのコンピュータにセキュリティポリシーを適用したり、ネットワークコンピュータにソフトウェアをインストールしたりアップデートすることができます。例えば、ユーザーが Windows ドメインの中のコンピュータにログインするとき、パスワードを確認したりユーザーが管理者か通常ユーザーか判断するのは Active Directory です。 |
||
+ | |||
+ | Active Directory は [[Wikipedia:Ldap|Lightweight Directory Access Protocol (LDAP)]] バージョン 2 と 3, [[Kerberos]], DNS を使用します。これらの規格は Linux でも同じく使うことができますが、つなぎ合わせるのは簡単な作業ではありません。以下の手順では AD ドメインに対して Arch Linux ホストを認証できるように設定します。 |
||
+ | |||
+ | このガイドでは既存の Windows Active Directory ドメインに Arch Linux ホストを統合する方法を説明しています。先に進む前に、既存の Acitve Directory ドメインと、次のことが行える適当な権限を持ったユーザーがドメイン内に必要です: ユーザーを確認してコンピュータアカウントを追加する (Domain Join)。 |
||
+ | |||
+ | このドキュメントは Active Directory や Samba に関するコンプリートガイドではありません。参照セクションに書かれている情報も読んでください。 |
||
+ | |||
+ | == 用語 == |
||
+ | |||
+ | Active Directory について詳しくない場合、覚えておいた方が良いキーワードがいくつか存在します。 |
||
+ | |||
+ | * '''Domain''' : コンピュータやアカウントをグループ化するのに使用する名前。 |
||
+ | * '''SID''' : メンバーとしてドメインに参加するコンピュータ。それぞれ一意な SID または System Identifier を持つ。 |
||
+ | * '''SMB''' : Server Message Block。 |
||
+ | * '''NETBIOS''': DNS の代替として使われるネットワーク命名プロトコル。レガシーな技術ですが、Windows ネットワークでは依然として使われています。 |
||
+ | * '''WINS''': Windows Information Naming Service。Windows ホストの Netbios 名を解決するのに使われます。 |
||
+ | * '''Winbind''': Windows を認証するためのプロトコル。 |
||
+ | |||
+ | == Active Directory の設定 == |
||
+ | このセクションの内容は Windows Server 2012 R2 のデフォルト設定で動作することを確認しています。 |
||
+ | |||
+ | === GPO の更新 === |
||
+ | |||
+ | Windows Server ではデジタル署名がデフォルトで有効になっており、クライアントとサーバーの両方で有効にする必要があります。特定バージョンの Samba では、Linux クライアントからドメイン・共有に接続するときに問題が発生する可能性があります。{{ic|smb.conf}} ファイルに以下のパラメータを追加することが推奨されています: |
||
+ | |||
+ | client signing = auto |
||
+ | server signing = auto |
||
+ | |||
+ | 上記の設定で上手く行かない場合、AD グループポリシーの ''Digital Sign Communication (Always)'' を無効化する必要があります。設定するには: |
||
+ | |||
+ | {{ic|ローカルポリシー}} -> {{ic|セキュリティポリシー}} -> {{ic|Microsoft ネットワークサーバー}} -> {{ic|常に通信にデジタル署名を行う}} -> {{ic|このポリシーの設定を定義する}} をオンにして {{ic|無効}} ラジオボタンを使って下さい。 |
||
+ | |||
+ | Windows Server 2008 R2 を使っている場合、Default Domain Controller Policy -> コンピュータの構成 -> ポリシー -> Windows の設定 -> セキュリティの設定 -> ローカルポリシー -> セキュリティオプション -> ''Microsoft ネットワーククライアント: 常に通信にデジタル署名を行う'' から GPO のポリシーを修正する必要があります。 |
||
+ | |||
+ | GPO を無効化するとドメインの全てのメンバーのセキュリティに影響が及ぶので注意してください。 |
||
+ | |||
+ | == Linux ホストの設定 == |
||
+ | |||
+ | 次にホストの設定を行います。設定を全て行うには root あるいは sudo 権限が必要です。 |
||
+ | |||
+ | === インストール === |
||
+ | |||
+ | 以下のパッケージを[[インストール]]してください: |
||
+ | * {{Pkg|samba}}。[[Samba]] を参照。 |
||
+ | * {{Pkg|pam-krb5}} |
||
+ | * {{Pkg|ntp}} あるいは {{Pkg|openntpd}}。[[Network Time Protocol daemon|NTPd]] や [[OpenNTPD]] を参照。 |
||
+ | |||
+ | === DNS の更新 === |
||
+ | |||
+ | Active Directory は DNS にかなり依存しています。{{ic|/etc/resolv.conf}} を編集して Active Directory ドメインコントローラを使うようにしてください: |
||
+ | {{hc|/etc/resolv.conf| |
||
+ | nameserver <IP1> |
||
+ | nameserver <IP2> |
||
+ | }} |
||
+ | <IP1> と <IP2> を使用する AD サーバーの IP アドレスに置き換えて下さい。AD ドメインが DNS フォワーディングや再帰を許可していない場合、リゾルバを追加する必要があります。 |
||
+ | |||
+ | {{Note|マシンで Windows と Linux をデュアルブートしている場合、両方のオペレーティングシステムをドメインのメンバーに加えるときは Linux の設定の DNS ホストネームと netbios 名は変えるようにしてください。}} |
||
+ | |||
+ | === NTP の設定 === |
||
+ | [[Network Time Protocol daemon|NTPd]] や [[OpenNTPD]] を読んで NTP サービスを設定してください。OpenNTPD はメンテナンスされていないので注意です。 |
||
+ | |||
+ | 設定で、AD サーバーの IP アドレスを使うようにしてください。もしくは、Active Directory サーバーが同期しているのと同じ stratum の NTP サーバーを使うことも可能です。ただし、AD サーバーは基本的に NTP をサービスとして実行しています。 |
||
+ | |||
+ | デーモンはかならず'''起動時に自動的に同期'''するように設定してください。 |
||
+ | |||
+ | === Kerberos === |
||
+ | |||
+ | AD の名前が example.com で、かつ AD は2つのドメインコントローラ、PDC と BDC という名前のプライマリコントローラ (pdc.example.com) とセカンダリコントローラ (bdc.example.com) で管理されていると仮定します。この例では IP アドレスはそれぞれ 192.168.1.2 と 192.168.1.3 です。構文に気をつけてください。大文字・小文字には意味があります。 |
||
+ | |||
+ | {{hc|/etc/krb5.conf|<nowiki> |
||
+ | [libdefaults] |
||
+ | default_realm = EXAMPLE.COM |
||
+ | clockskew = 300 |
||
+ | ticket_lifetime = 1d |
||
+ | forwardable = true |
||
+ | proxiable = true |
||
+ | dns_lookup_realm = true |
||
+ | dns_lookup_kdc = true |
||
+ | |||
+ | [realms] |
||
+ | EXAMPLE.COM = { |
||
+ | kdc = PDC.EXAMPLE.COM |
||
+ | admin_server = PDC.EXAMPLE.COM |
||
+ | default_domain = EXAMPLE.COM |
||
+ | } |
||
+ | |||
+ | [domain_realm] |
||
+ | .kerberos.server = EXAMPLE.COM |
||
+ | .example.com = EXAMPLE.COM |
||
+ | example.com = EXAMPLE.COM |
||
+ | example = EXAMPLE.COM |
||
+ | |||
+ | [appdefaults] |
||
+ | pam = { |
||
+ | ticket_lifetime = 1d |
||
+ | renew_lifetime = 1d |
||
+ | forwardable = true |
||
+ | proxiable = false |
||
+ | retain_after_close = false |
||
+ | minimum_uid = 0 |
||
+ | debug = false |
||
+ | } |
||
+ | |||
+ | [logging] |
||
+ | default = FILE:/var/log/krb5libs.log |
||
+ | kdc = FILE:/var/log/kdc.log |
||
+ | admin_server = FILE:/var/log/kadmind.log |
||
+ | </nowiki>}} |
||
+ | |||
+ | {{Note|Heimdal 1.3.1 から Windows Server 2008 以前まで AD 認証に必要だった DES 暗号化は無効化されています。必要な場合は {{Ic|[libdefaults]}} セクションに {{ic|1=allow_weak_crypto = true}} を追加してください。}} |
||
+ | |||
+ | ==== Kerberos チケットを発行する ==== |
||
+ | {{note|キーとコマンドはユーザー個別です: sudo で root になると、非特権アカウントで別々のキーを使って別々の AD ユーザーに接続できます。ドメインがひとつしかない場合、@EXAMPLE.COM は不要です。}} |
||
+ | |||
+ | AD ドメインコントローラに kerberos チケットをリクエストします ('''大文字は必須です'''): |
||
+ | {{bc|kinit administrator@EXAMPLE.COM}} |
||
+ | |||
+ | ドメイン管理者の権限があるユーザー名を使ってください。 |
||
+ | |||
+ | ==== チケットを確認する ==== |
||
+ | トークンを受け取ったかどうか確認するには '''klist''' を実行してください。以下のように出力されるはずです: |
||
+ | {{hc|# klist| |
||
+ | Ticket cache: FILE:/tmp/krb5cc_0 |
||
+ | Default principal: administrator@EXAMPLE.COM |
||
+ | |||
+ | Valid starting Expires Service principal |
||
+ | 02/04/12 21:27:47 02/05/12 07:27:42 krbtgt/EXAMPLE.COM@EXAMPLE.COM |
||
+ | renew until 02/05/12 21:27:47 |
||
+ | }} |
||
+ | |||
+ | === pam_winbind.conf === |
||
+ | |||
+ | {{ic|/etc/security/pam_winbind.conf}} が見つからないというエラーが表示される場合、ファイルを作成して以下を書き込んでください: |
||
+ | |||
+ | {{hc|/etc/security/pam_winbind.conf|<nowiki> |
||
+ | [global] |
||
+ | debug = no |
||
+ | debug_state = no |
||
+ | try_first_pass = yes |
||
+ | krb5_auth = yes |
||
+ | krb5_ccache_type = FILE |
||
+ | cached_login = yes |
||
+ | silent = no |
||
+ | mkhomedir = yes |
||
+ | </nowiki>}} |
||
+ | |||
+ | 上記の設定では、winbind はログイン時にユーザーのキータブを作成するようになります (krb5_ccache_type = FILE)。AD ユーザーとしてログインした後にシェルで klist を実行することで確認できます。kinit を実行する必要はありません。{{ic|/etc/krb5.keytab}} のパーミッションを 600 から 640 などに変更しなくてはならない場合があります ({{Bug|52621}} を参照)。 |
||
+ | |||
+ | === Samba === |
||
+ | Samba は SMB/CIFS ネットワークプロトコルを再実装したフリーソフトウェアです。Linux マシンを Windows ネットワークサーバー・クライアントとして機能させるツールも含まれています。 |
||
+ | |||
+ | {{Note|Windows 環境をどうやって構築したかによって設定は大きく変わってきます。トラブルシューティングと調査の用意が必要です。}} |
||
+ | |||
+ | このセクションでは、先に 'Global' セクションを編集して認証ができるようにします。後で、設定に戻って共有を追加します。 |
||
+ | |||
+ | {{hc|/etc/samba/smb.conf|<nowiki> |
||
+ | [Global] |
||
+ | netbios name = MYARCHLINUX |
||
+ | workgroup = EXAMPLE |
||
+ | realm = EXAMPLE.COM |
||
+ | server string = %h ArchLinux Host |
||
+ | security = ads |
||
+ | encrypt passwords = yes |
||
+ | password server = pdc.example.com |
||
+ | client signing = auto |
||
+ | server signing = auto |
||
+ | |||
+ | idmap config * : backend = tdb |
||
+ | idmap config * : range = 10000-20000 |
||
+ | |||
+ | winbind use default domain = Yes |
||
+ | winbind enum users = Yes |
||
+ | winbind enum groups = Yes |
||
+ | winbind nested groups = Yes |
||
+ | winbind separator = + |
||
+ | winbind refresh tickets = yes |
||
+ | winbind offline logon = yes |
||
+ | winbind cache time = 300 |
||
+ | |||
+ | template shell = /bin/bash |
||
+ | template homedir = /home/%D/%U |
||
+ | |||
+ | preferred master = no |
||
+ | dns proxy = no |
||
+ | wins server = pdc.example.com |
||
+ | wins proxy = no |
||
+ | |||
+ | inherit acls = Yes |
||
+ | map acl inherit = Yes |
||
+ | acl group control = yes |
||
+ | |||
+ | load printers = no |
||
+ | debug level = 3 |
||
+ | use sendfile = no |
||
+ | </nowiki>}} |
||
+ | |||
+ | === ドメインに参加 === |
||
+ | |||
+ | ドメインに参加するには AD の管理者アカウントが必要です。ここでは管理者の名前が Administrator とします。使用するコマンドは 'net ads join' です: |
||
+ | {{hc|# net ads join -U Administrator| |
||
+ | Administrator's password: xxx |
||
+ | Using short domain name -- EXAMPLE |
||
+ | Joined 'MYARCHLINUX' to realm 'EXAMPLE.COM' |
||
+ | }} |
||
+ | |||
+ | == サービスの起動とテスト == |
||
+ | |||
+ | === Samba の起動 === |
||
+ | |||
+ | おそらく、あなたはまだ再起動していません。X セッションを起動している場合、セッションを終了して、他のコンソールにログインすることで、ログインを維持できます。 |
||
+ | |||
+ | Samba デーモン {{ic|smb.service}}, {{ic|nmb.service}}, {{ic|winbind.service}} を起動・有効化してください。 |
||
+ | |||
+ | {{Note|{{Pkg|samba}} 4.8.0-1 から、Samba デーモンのユニットは {{ic|smbd.service}}, {{ic|nmbd.service}}, {{ic|winbindd.service}} から {{ic|smb.service}}, {{ic|nmb.service}}, {{ic|winbind.service}} に名前が変更されています。}} |
||
+ | |||
+ | 次に NSSwitch の設定を修正します。NSSwitch には Linux ホストに様々なソースから情報を取得する方法が設定されています。この場合、ユーザー・グループ・ホストのソースとして Active Directory を追加してください: |
||
+ | |||
+ | {{hc|/etc/nsswitch.conf| |
||
+ | passwd: files winbind |
||
+ | shadow: files winbind |
||
+ | group: files winbind |
||
+ | |||
+ | hosts: files dns wins |
||
+ | }} |
||
+ | |||
+ | === Winbind のテスト === |
||
+ | winbind が AD にクエリを送信できるかどうか確認します。以下のコマンドで AD ユーザーのリストが返ってくるはずです (以下の出力ではドメインコントローラに 'test.user' という名前の Active Directory ユーザーが作成されていることが確認できます): |
||
+ | |||
+ | {{hc|# wbinfo -u| |
||
+ | administrator |
||
+ | guest |
||
+ | krbtgt |
||
+ | test.user |
||
+ | }} |
||
+ | |||
+ | AD グループも同じように確認ができます: |
||
+ | |||
+ | {{hc|# 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 |
||
+ | }} |
||
+ | |||
+ | === nsswitch のテスト === |
||
+ | |||
+ | ホストからドメインにユーザーやグループを問い合わせられることを確認するために、'getent' コマンドを実行して nsswitch の設定をテストします。標準的な Arch Linux なら以下のような出力が表示されます: |
||
+ | |||
+ | {{hc|# getent passwd| |
||
+ | root:x:0:0:root:/root:/bin/bash |
||
+ | bin:x:1:1:bin:/bin:/bin/false |
||
+ | daemon:x:2:2:daemon:/sbin:/bin/false |
||
+ | mail:x:8:12:mail:/var/spool/mail:/bin/false |
||
+ | ftp:x:14:11:ftp:/srv/ftp:/bin/false |
||
+ | http:x:33:33:http:/srv/http:/bin/false |
||
+ | nobody:x:99:99:nobody:/:/bin/false |
||
+ | dbus:x:81:81:System message bus:/:/bin/false |
||
+ | ntp:x:87:87:Network Time Protocol:/var/empty:/bin/false |
||
+ | avahi:x:84:84:avahi:/:/bin/false |
||
+ | administrator:*:10001:10006:Administrator:/home/EXAMPLE/administrator:/bin/bash |
||
+ | guest:*:10002:10007:Guest:/home/EXAMPLE/guest:/bin/bash |
||
+ | krbtgt:*:10003:10006:krbtgt:/home/EXAMPLE/krbtgt:/bin/bash |
||
+ | test.user:*:10000:10006:Test User:/home/EXAMPLE/test.user:/bin/bash |
||
+ | }} |
||
+ | |||
+ | そしてグループもテスト: |
||
+ | {{hc|# getent group| |
||
+ | root:x:0:root |
||
+ | bin:x:1:root,bin,daemon |
||
+ | daemon:x:2:root,bin,daemon |
||
+ | sys:x:3:root,bin |
||
+ | adm:x:4:root,daemon |
||
+ | tty:x:5: |
||
+ | disk:x:6:root |
||
+ | lp:x:7:daemon |
||
+ | mem:x:8: |
||
+ | kmem:x:9: |
||
+ | wheel:x:10:root |
||
+ | ftp:x:11: |
||
+ | mail:x:12: |
||
+ | uucp:x:14: |
||
+ | log:x:19:root |
||
+ | utmp:x:20: |
||
+ | locate:x:21: |
||
+ | rfkill:x:24: |
||
+ | smmsp:x:25: |
||
+ | http:x:33: |
||
+ | games:x:50: |
||
+ | network:x:90: |
||
+ | video:x:91: |
||
+ | audio:x:92: |
||
+ | optical:x:93: |
||
+ | floppy:x:94: |
||
+ | storage:x:95: |
||
+ | scanner:x:96: |
||
+ | power:x:98: |
||
+ | nobody:x:99: |
||
+ | users:x:100: |
||
+ | dbus:x:81: |
||
+ | ntp:x:87: |
||
+ | avahi:x:84: |
||
+ | domain computers:x:10008: |
||
+ | domain controllers:x:10009: |
||
+ | schema admins:x:10010:administrator |
||
+ | enterprise admins:x:10011:administrator |
||
+ | cert publishers:x:10012: |
||
+ | domain admins:x:10013:test.user,administrator |
||
+ | domain users:x:10006: |
||
+ | domain guests:x:10007: |
||
+ | group policy creator owners:x:10014:administrator |
||
+ | ras and ias servers:x:10015: |
||
+ | allowed rodc password replication group:x:10016: |
||
+ | denied rodc password replication group:x:10017:krbtgt |
||
+ | read-only domain controllers:x:10018: |
||
+ | enterprise read-only domain controllers:x:10019: |
||
+ | dnsadmins:x:10020: |
||
+ | dnsupdateproxy:x:10021: |
||
+ | }} |
||
+ | |||
+ | DC のユーザーアカウントが表示されない場合、{{ic|smb.conf}} ファイルに以下の行を追加してください: |
||
+ | {{hc|/etc/samba/smb.conf|<nowiki> |
||
+ | winbind trusted domains only = no |
||
+ | </nowiki>}} |
||
+ | |||
+ | === Samba コマンドのテスト === |
||
+ | |||
+ | net コマンドを使ってみて Samba が AD と通信できることを確認します: |
||
+ | |||
+ | {{hc|# net ads info|<nowiki> |
||
+ | [2012/02/05 20:21:36.473559, 0] param/loadparm.c:7599(lp_do_parameter) |
||
+ | Ignoring unknown parameter "idmapd backend" |
||
+ | LDAP server: 192.168.1.2 |
||
+ | LDAP server name: PDC.example.com |
||
+ | Realm: EXAMPLE.COM |
||
+ | Bind Path: dc=EXAMPLE,dc=COM |
||
+ | LDAP port: 389 |
||
+ | Server time: Sun, 05 Feb 2012 20:21:33 CST |
||
+ | KDC server: 192.168.1.2 |
||
+ | Server time offset: -3 |
||
+ | </nowiki>}} |
||
+ | |||
+ | {{hc|# net ads lookup| |
||
+ | [2012/02/05 20:22:39.298823, 0] param/loadparm.c:7599(lp_do_parameter) |
||
+ | Ignoring unknown parameter "idmapd backend" |
||
+ | Information for Domain Controller: 192.168.1.2 |
||
+ | |||
+ | Response Type: LOGON_SAM_LOGON_RESPONSE_EX |
||
+ | GUID: 2a098512-4c9f-4fe4-ac22-8f9231fabbad |
||
+ | Flags: |
||
+ | Is a PDC: yes |
||
+ | Is a GC of the forest: yes |
||
+ | Is an LDAP server: yes |
||
+ | Supports DS: yes |
||
+ | Is running a KDC: yes |
||
+ | Is running time services: yes |
||
+ | Is the closest DC: yes |
||
+ | Is writable: yes |
||
+ | Has a hardware clock: yes |
||
+ | Is a non-domain NC serviced by LDAP server: no |
||
+ | Is NT6 DC that has some secrets: no |
||
+ | Is NT6 DC that has all secrets: yes |
||
+ | Forest: example.com |
||
+ | Domain: example.com |
||
+ | Domain Controller: PDC.example.com |
||
+ | Pre-Win2k Domain: EXAMPLE |
||
+ | Pre-Win2k Hostname: PDC |
||
+ | Server Site Name : Office |
||
+ | Client Site Name : Office |
||
+ | NT Version: 5 |
||
+ | LMNT Token: ffff |
||
+ | LM20 Token: ffff |
||
+ | }} |
||
+ | |||
+ | {{hc|<nowiki># net ads status -U administrator%password | less</nowiki>|<nowiki> |
||
+ | objectClass: top |
||
+ | objectClass: person |
||
+ | objectClass: organizationalPerson |
||
+ | objectClass: user |
||
+ | objectClass: computer |
||
+ | cn: myarchlinux |
||
+ | distinguishedName: CN=myarchlinux,CN=Computers,DC=leafscale,DC=inc |
||
+ | instanceType: 4 |
||
+ | whenCreated: 20120206043413.0Z |
||
+ | whenChanged: 20120206043414.0Z |
||
+ | uSNCreated: 16556 |
||
+ | uSNChanged: 16563 |
||
+ | name: myarchlinux |
||
+ | objectGUID: 2c24029c-8422-42b2-83b3-a255b9cb41b3 |
||
+ | userAccountControl: 69632 |
||
+ | badPwdCount: 0 |
||
+ | codePage: 0 |
||
+ | countryCode: 0 |
||
+ | badPasswordTime: 0 |
||
+ | lastLogoff: 0 |
||
+ | lastLogon: 129729780312632000 |
||
+ | localPolicyFlags: 0 |
||
+ | pwdLastSet: 129729764538848000 |
||
+ | primaryGroupID: 515 |
||
+ | objectSid: S-1-5-21-719106045-3766251393-3909931865-1105 |
||
+ | ...<snip>... |
||
+ | </nowiki>}} |
||
+ | |||
+ | == PAM の設定 == |
||
+ | |||
+ | PAM の様々なルールを変更して、Active Directory ユーザーがシステムを使ってログインしたり sudo を利用できるように設定します。ルールを変更するときは、アイテムの順番やルールが '''required''' と '''sufficient''' のどちらになっているかが正しく設定を行うために非常に重要なので注意してください。PAM ルールの書き方を知らないのであればルールを変更しないほうが賢明です。 |
||
+ | |||
+ | ログインに関しては、PAM はまず AD のアカウントを検索して、マッチする AD アカウントが存在しなかった場合にローカルアカウントを使うようにするべきでしょう。そこで、認証プロセスに {{ic|pam_winbind.so}} を含めるようにエントリを追加します。 |
||
+ | |||
+ | Arch Linux の PAM 設定は {{ic|/etc/pam.d/system-auth}} に認証プロセスを集めるようになっています。{{ic|pambase}} の標準設定から初めて以下のように変更します: |
||
+ | |||
+ | === system-auth === |
||
+ | |||
+ | ==== "auth" セクション ==== |
||
+ | |||
+ | 以下の行を探して下さい: |
||
+ | |||
+ | auth required pam_unix.so ... |
||
+ | |||
+ | 上記の行を削除して、以下のように置き換えます: |
||
+ | |||
+ | auth [success=1 default=ignore] pam_localuser.so |
||
+ | auth [success=2 default=die] pam_winbind.so |
||
+ | auth [success=1 default=die] pam_unix.so nullok |
||
+ | auth requisite pam_deny.so |
||
+ | |||
+ | ==== "account" セクション ==== |
||
+ | |||
+ | 以下の行を探して下さい: |
||
+ | |||
+ | account required pam_unix.so |
||
+ | |||
+ | 上記の行を削除しないで、下に以下の行を追加します: |
||
+ | |||
+ | account [success=1 default=ignore] pam_localuser.so |
||
+ | account required pam_winbind.so |
||
+ | |||
+ | ==== "password" セクション ==== |
||
+ | |||
+ | 以下の行を探して下さい: |
||
+ | |||
+ | password required pam_unix.so ... |
||
+ | |||
+ | 上記の行を削除して、以下のように置き換えます: |
||
+ | |||
+ | password [success=1 default=ignore] pam_localuser.so |
||
+ | password [success=2 default=die] pam_winbind.so |
||
+ | password [success=1 default=die] pam_unix.so sha512 shadow |
||
+ | password requisite pam_deny.so |
||
+ | |||
+ | ==== "session" セクション ==== |
||
+ | |||
+ | 以下の行を探して下さい: |
||
+ | |||
+ | session required pam_unix.so |
||
+ | |||
+ | 上記の行を削除しないで、すぐ上に以下の行を追加します: |
||
+ | |||
+ | session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 |
||
+ | |||
+ | pam_unix 行の下には、以下を追加してください: |
||
+ | |||
+ | session [success=1 default=ignore] pam_localuser.so |
||
+ | session required pam_winbind.so |
||
+ | |||
+ | === passwd === |
||
+ | |||
+ | ==== "password" セクション ==== |
||
+ | |||
+ | Active Directory ユーザーでログインして 'passwd' コマンドでパスワードを変更するには、{{ic|/etc/pam.d/passwd}} ファイルに設定が必要です。 |
||
+ | |||
+ | 以下の行を探して下さい: |
||
+ | |||
+ | password required pam_unix.so sha512 shadow nullok |
||
+ | |||
+ | 上記の行を削除して、以下の行に置き換えてください: |
||
+ | |||
+ | password include system-auth |
||
+ | |||
+ | === ログインのテスト === |
||
+ | |||
+ | 新しいコンソールセッション (あるいは ssh) を起動して AD のユーザー名・パスワードを使ってログインしてみて下さい。ドメイン名は Winbind の設定で 'default realm' として設定したので任意です。ssh を使う場合、{{ic|/etc/ssh/sshd_config}} ファイルを修正して kerberos 認証を有効にする必要があります: {{ic|(KerberosAuthentication yes)}}。 |
||
+ | |||
+ | {{bc| |
||
+ | test.user |
||
+ | EXAMPLE+test.user |
||
+ | }} |
||
+ | |||
+ | 上記のどちらでも動作するはずです。{{ic|/home/example/test.user}} が自動的に作成されます。Linux アカウントを使って他のセッションにログインして、root でログインできることを確認してください。ただし、root でログインするのは最低でも一つのセッションであることを覚えておいて下さい。 |
||
+ | |||
+ | == 共有の設定 == |
||
+ | 上で共有の設定については飛ばしていました。ログインができるようになったら、{{ic|/etc/samba/smb.conf}} に戻って、Windows ネットワークから利用したいホストのエクスポートを追加してください。 |
||
+ | |||
+ | {{hc|/etc/samba/smb.conf|<nowiki> |
||
+ | [MyShare] |
||
+ | comment = Example Share |
||
+ | path = /srv/exports/myshare |
||
+ | read only = no |
||
+ | browseable = yes |
||
+ | valid users = @NETWORK+"Domain Admins" NETWORK+test.user |
||
+ | </nowiki>}} |
||
+ | |||
+ | 上記の例では、'''NETWORK''' というキーワードを使っています。このキーワードをドメイン名に置き換えてはいけません。グループを追加する場合は、グループの前に '@' 記号を付け加えます。Samba が設定ファイルを読み込んだときに正しくパースできるように {{ic|Domain Admins}} はクォートで囲みます。 |
||
+ | |||
+ | == マシンのキータブファイルを追加してケルベロス認証を使ってパスワードがなくてもマシンに ssh できるようにする == |
||
+ | このセクションではマシンのキータブファイルを生成して、ドメイン内の他のマシンからパスワードを使わずにケルベロス認証で ssh 接続する方法を説明しています。GPU ワークステーションや OpenMP 計算ノードのように、ドメイン内にシステムが大量に存在していて、上の方法で追加したサーバー/ワークステーションに ssh でユーザーがログインできるようにする必要がある場合を想定しています。このような場合、ログインするたびに毎回パスワードを入力するのは御免でしょう。その一方、鍵認証ではケルベロスによる NFSv4 共有などをマウントすることは不可能です。そこで、ケルベロスのチケットを転送することでクライアントからマシンにパスワードを入力してなくてもログインできるようにします。 |
||
+ | |||
+ | === マシンのキータブファイルの作成 === |
||
+ | root で 'net ads keytab create -U administrator' を実行するとマシンのキータブファイルが {{ic|/etc/krb5.keytab}} に作成されます。設定ファイルで keytab 認証を有効化する必要があるという警告が表示されるので、次のステップで有効化します。キータブファイルが既に存在する場合、コマンドがフリーズするという問題が発生することがあります。そのようなときは、既存の {{ic|/etc/krb5.keytab}} の名前を変更してコマンドを再度実行すれば上手くいくはずです。 |
||
+ | |||
+ | {{bc|# net ads keytab create -U administrator}} |
||
+ | |||
+ | キータブの中身を確認するには次を実行: |
||
+ | |||
+ | {{hc|# klist -k /etc/krb5.keytab|<nowiki> |
||
+ | Keytab name: FILE:/etc/krb5.keytab |
||
+ | KVNO Principal |
||
+ | ---- -------------------------------------------------------------------------- |
||
+ | 4 host/myarchlinux.example.com@EXAMPLE.COM |
||
+ | 4 host/myarchlinux.example.com@EXAMPLE.COM |
||
+ | 4 host/myarchlinux.example.com@EXAMPLE.COM |
||
+ | 4 host/myarchlinux.example.com@EXAMPLE.COM |
||
+ | 4 host/myarchlinux.example.com@EXAMPLE.COM |
||
+ | 4 host/MYARCHLINUX@EXAMPLE.COM |
||
+ | 4 host/MYARCHLINUX@EXAMPLE.COM |
||
+ | 4 host/MYARCHLINUX@EXAMPLE.COM |
||
+ | 4 host/MYARCHLINUX@EXAMPLE.COM |
||
+ | 4 host/MYARCHLINUX@EXAMPLE.COM |
||
+ | 4 MYARCHLINUX$@EXAMPLE.COM |
||
+ | 4 MYARCHLINUX$@EXAMPLE.COM |
||
+ | 4 MYARCHLINUX$@EXAMPLE.COM |
||
+ | 4 MYARCHLINUX$@EXAMPLE.COM |
||
+ | 4 MYARCHLINUX$@EXAMPLE.COM |
||
+ | </nowiki>}} |
||
+ | |||
+ | === keytab 認証の有効化 === |
||
+ | 以下の行を {{ic|/etc/samba/smb.conf}} に追加してキータブファイルを使用するように winbind を設定してください: |
||
+ | |||
+ | kerberos method = secrets and keytab |
||
+ | dedicated keytab file = /etc/krb5.keytab |
||
+ | |||
+ | 追加すると以下のようになります: |
||
+ | |||
+ | {{hc|/etc/samba/smb.conf|<nowiki> |
||
+ | [Global] |
||
+ | netbios name = MYARCHLINUX |
||
+ | workgroup = EXAMPLE |
||
+ | realm = EXAMPLE.COM |
||
+ | server string = %h ArchLinux Host |
||
+ | security = ads |
||
+ | encrypt passwords = yes |
||
+ | password server = pdc.example.com |
||
+ | kerberos method = secrets and keytab |
||
+ | dedicated keytab file = /etc/krb5.keytab |
||
+ | |||
+ | idmap config * : backend = tdb |
||
+ | idmap config * : range = 10000-20000 |
||
+ | |||
+ | winbind use default domain = Yes |
||
+ | winbind enum users = Yes |
||
+ | winbind enum groups = Yes |
||
+ | winbind nested groups = Yes |
||
+ | winbind separator = + |
||
+ | winbind refresh tickets = yes |
||
+ | |||
+ | template shell = /bin/bash |
||
+ | template homedir = /home/%D/%U |
||
+ | |||
+ | preferred master = no |
||
+ | dns proxy = no |
||
+ | wins server = pdc.example.com |
||
+ | wins proxy = no |
||
+ | |||
+ | inherit acls = Yes |
||
+ | map acl inherit = Yes |
||
+ | acl group control = yes |
||
+ | |||
+ | load printers = no |
||
+ | debug level = 3 |
||
+ | use sendfile = no |
||
+ | </nowiki>}} |
||
+ | |||
+ | root 権限で 'systemctl restart winbind.service' を実行して winbind.service を再起動してください: |
||
+ | |||
+ | {{bc|# systemctl restart winbind.service}} |
||
+ | |||
+ | 以下のコマンドを実行してマシンのチケットを取得することで問題がないか確認します: |
||
+ | |||
+ | {{bc|# kinit MYARCHLINUX$ -kt /etc/krb5.keytab}} |
||
+ | |||
+ | 上記のコマンドでは何も出力が返ってこなくても 'klist' で以下のように表示されるはずです: |
||
+ | |||
+ | {{hc|# klist| |
||
+ | Ticket cache: FILE:/tmp/krb5cc_0 |
||
+ | Default principal: MYARCHLINUX$@EXAMPLE.COM |
||
+ | |||
+ | Valid starting Expires Service principal |
||
+ | 02/04/12 21:27:47 02/05/12 07:27:42 krbtgt/EXAMPLE.COM@EXAMPLE.COM |
||
+ | renew until 02/05/12 21:27:47 |
||
+ | }} |
||
+ | |||
+ | ここでよくある間違いは $ を最後に付けるのを忘れるのと大文字・小文字を間違えることです。キータブのエントリは正確に記述してください。 |
||
+ | |||
+ | === サーバーの sshd の設定 === |
||
+ | |||
+ | 後は sshd_config にオプションを追加して {{ic|sshd.service}} を再起動するだけです。 |
||
+ | |||
+ | {{ic|/etc/ssh/sshd_config}} の適当な箇所を以下のように編集して下さい: |
||
+ | |||
+ | {{hc|# /etc/ssh/sshd_config| |
||
+ | |||
+ | ... |
||
+ | |||
+ | # Change to no to disable s/key passwords |
||
+ | ChallengeResponseAuthentication no |
||
+ | |||
+ | # Kerberos options |
||
+ | KerberosAuthentication yes |
||
+ | #KerberosOrLocalPasswd yes |
||
+ | KerberosTicketCleanup yes |
||
+ | KerberosGetAFSToken yes |
||
+ | |||
+ | # GSSAPI options |
||
+ | GSSAPIAuthentication yes |
||
+ | GSSAPICleanupCredentials yes |
||
+ | |||
+ | ... |
||
+ | |||
+ | }} |
||
+ | |||
+ | sshd.service を再起動するには: |
||
+ | |||
+ | {{bc|# systemctl restart sshd.service}} |
||
+ | |||
+ | === 必要なオプションをクライアントに追加 === |
||
+ | |||
+ | まず、クライアントのチケットを転送できるようにする必要があります。基本的に標準設定になっていますが確認しておいたほうが良いでしょう。{{ic|/etc/krb5.conf}} の forwardable オプションが 'true' に設定されていることを確認してください: |
||
+ | |||
+ | {{bc|<nowiki>forwardable = true</nowiki>}} |
||
+ | |||
+ | 次に以下のオプションを .ssh/config ファイルに追加してください: |
||
+ | |||
+ | GSSAPIAuthentication yes |
||
+ | GSSAPIDelegateCredentials yes |
||
+ | |||
+ | ssh コマンドで -o オプションを使うことで直接オプションを利用することもできます (詳しくは 'man ssh' を参照)。 |
||
+ | |||
+ | === セットアップのテスト === |
||
+ | クライアント側: |
||
+ | |||
+ | 正しいチケットが発行されていることを確認してください。わからない場合は 'kinit' を実行。 |
||
+ | |||
+ | ssh を使ってマシンに接続: |
||
+ | |||
+ | {{bc|ssh myarchlinux.example.com }} |
||
+ | |||
+ | パスワードを入力しなくても接続されるはずです。 |
||
+ | |||
+ | 鍵認証を追加で有効にしている場合、実際に使われている認証方式を確認するために次を実行してください: |
||
+ | |||
+ | {{bc|ssh -v myarchlinux.example.com }} |
||
+ | |||
+ | サーバーで DEBUG3 を有効にしたり journalctl でジャーナルを見ることでデバッグできます。 |
||
+ | |||
+ | === AD によって認証されたユーザーのキータブを生成 === |
||
+ | |||
+ | (何らかの理由で) クライアントがローカルマシン上のドメインアカウントを使用しない場合、ワークステーションに ssh する前に kinit を実行するように設定するのは難しいかもしれません。そのような場合、こちらの方法があります。 |
||
+ | |||
+ | システムのユーザーで以下を実行: |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | ktutil |
||
+ | addent -password -p username@EXAMPLE.COM -k 1 -e RC4-HMAC |
||
+ | - enter password for username - |
||
+ | wkt username.keytab |
||
+ | q |
||
+ | </nowiki>}} |
||
+ | |||
+ | 以下を実行してファイルをテスト: |
||
+ | |||
+ | {{bc|kinit username@EXAMPLE.COM -kt username.keytab}} |
||
+ | |||
+ | 上記のコマンドでは、パスワードは要求されませんし何も出力が返されません。それで上手くいっていれば、上記の行を {{ic|~./bashrc}} に追加するだけで、パスワードを入力しなくてもケルベロスのチケットを入手することができるようになり、それによって、パスワードを入力せずにワークステーションにアクセスすることができるはずです。そして完全にケルベロス化されているので、チケットを使って NFSv4 や CIFS の認証を通すことが可能です。 |
||
+ | |||
+ | 'username.keytab' ファイルはマシンごとに固有の中身とはなっていないので、どこにでもコピーできます。例えば Linux マシンでファイルを作成して、Mac クライアントにコピーしてもかまいません。 |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | * [[wikipedia:ja:Active Directory]] |
||
+ | * [[wikipedia:ja:Samba]] |
||
+ | * [[wikipedia:ja:ケルベロス認証]] |
||
+ | * [http://www.samba.org/samba/docs Samba: ドキュメント] |
||
+ | * {{ic|smb.conf(5)}} man ページ |
||
+ | |||
+ | === 商用ソリューション === |
||
+ | * Centrify |
||
+ | * Likewise |
2024年7月10日 (水) 20:55時点における最新版
データセンターのシステム管理者にとってヘテロジニアスな環境の共存は大きな課題です。ヘテロジニアスな環境とは様々なオペレーティングシステムのサーバー (大抵は Microsoft Windows と Unix/Linux) が混じり合っていることを意味します。中でもユーザーの管理や認証は最も解決が難しい問題です。この問題を解決する方法としてはディレクトリサーバーの使用が一般的でしょう。様々な *NIX に対応したオープンソース・商用のソリューションは数多く存在します。しかしながら、Windows との相互運用性の問題を解決できるソリューションは多くありません。アクティブディレクトリ (AD) は Windows ドメインネットワークのために Microsoft によって作成されたディレクトリサービスです。AD は Windows Server オペレーティングシステムには大抵含まれています。アクティブディレクトリを動作させるサーバーコンピュータはドメインコントローラと呼ばれます。
Active Directory はネットワークの管理とセキュリティの中心地として機能します。Windows ドメインタイプのネットワークに含まれる、あらゆるユーザーとコンピュータの認証と管理を取り仕切って、ネットワーク上の全てのコンピュータにセキュリティポリシーを適用したり、ネットワークコンピュータにソフトウェアをインストールしたりアップデートすることができます。例えば、ユーザーが Windows ドメインの中のコンピュータにログインするとき、パスワードを確認したりユーザーが管理者か通常ユーザーか判断するのは Active Directory です。
Active Directory は Lightweight Directory Access Protocol (LDAP) バージョン 2 と 3, Kerberos, DNS を使用します。これらの規格は Linux でも同じく使うことができますが、つなぎ合わせるのは簡単な作業ではありません。以下の手順では AD ドメインに対して Arch Linux ホストを認証できるように設定します。
このガイドでは既存の Windows Active Directory ドメインに Arch Linux ホストを統合する方法を説明しています。先に進む前に、既存の Acitve Directory ドメインと、次のことが行える適当な権限を持ったユーザーがドメイン内に必要です: ユーザーを確認してコンピュータアカウントを追加する (Domain Join)。
このドキュメントは Active Directory や Samba に関するコンプリートガイドではありません。参照セクションに書かれている情報も読んでください。
目次
用語
Active Directory について詳しくない場合、覚えておいた方が良いキーワードがいくつか存在します。
- Domain : コンピュータやアカウントをグループ化するのに使用する名前。
- SID : メンバーとしてドメインに参加するコンピュータ。それぞれ一意な SID または System Identifier を持つ。
- SMB : Server Message Block。
- NETBIOS: DNS の代替として使われるネットワーク命名プロトコル。レガシーな技術ですが、Windows ネットワークでは依然として使われています。
- WINS: Windows Information Naming Service。Windows ホストの Netbios 名を解決するのに使われます。
- Winbind: Windows を認証するためのプロトコル。
Active Directory の設定
このセクションの内容は Windows Server 2012 R2 のデフォルト設定で動作することを確認しています。
GPO の更新
Windows Server ではデジタル署名がデフォルトで有効になっており、クライアントとサーバーの両方で有効にする必要があります。特定バージョンの Samba では、Linux クライアントからドメイン・共有に接続するときに問題が発生する可能性があります。smb.conf
ファイルに以下のパラメータを追加することが推奨されています:
client signing = auto server signing = auto
上記の設定で上手く行かない場合、AD グループポリシーの Digital Sign Communication (Always) を無効化する必要があります。設定するには:
ローカルポリシー
-> セキュリティポリシー
-> Microsoft ネットワークサーバー
-> 常に通信にデジタル署名を行う
-> このポリシーの設定を定義する
をオンにして 無効
ラジオボタンを使って下さい。
Windows Server 2008 R2 を使っている場合、Default Domain Controller Policy -> コンピュータの構成 -> ポリシー -> Windows の設定 -> セキュリティの設定 -> ローカルポリシー -> セキュリティオプション -> Microsoft ネットワーククライアント: 常に通信にデジタル署名を行う から GPO のポリシーを修正する必要があります。
GPO を無効化するとドメインの全てのメンバーのセキュリティに影響が及ぶので注意してください。
Linux ホストの設定
次にホストの設定を行います。設定を全て行うには root あるいは sudo 権限が必要です。
インストール
以下のパッケージをインストールしてください:
DNS の更新
Active Directory は DNS にかなり依存しています。/etc/resolv.conf
を編集して Active Directory ドメインコントローラを使うようにしてください:
/etc/resolv.conf
nameserver <IP1> nameserver <IP2>
<IP1> と <IP2> を使用する AD サーバーの IP アドレスに置き換えて下さい。AD ドメインが DNS フォワーディングや再帰を許可していない場合、リゾルバを追加する必要があります。
NTP の設定
NTPd や OpenNTPD を読んで NTP サービスを設定してください。OpenNTPD はメンテナンスされていないので注意です。
設定で、AD サーバーの IP アドレスを使うようにしてください。もしくは、Active Directory サーバーが同期しているのと同じ stratum の NTP サーバーを使うことも可能です。ただし、AD サーバーは基本的に NTP をサービスとして実行しています。
デーモンはかならず起動時に自動的に同期するように設定してください。
Kerberos
AD の名前が example.com で、かつ AD は2つのドメインコントローラ、PDC と BDC という名前のプライマリコントローラ (pdc.example.com) とセカンダリコントローラ (bdc.example.com) で管理されていると仮定します。この例では IP アドレスはそれぞれ 192.168.1.2 と 192.168.1.3 です。構文に気をつけてください。大文字・小文字には意味があります。
/etc/krb5.conf
[libdefaults] default_realm = EXAMPLE.COM clockskew = 300 ticket_lifetime = 1d forwardable = true proxiable = true dns_lookup_realm = true dns_lookup_kdc = true [realms] EXAMPLE.COM = { kdc = PDC.EXAMPLE.COM admin_server = PDC.EXAMPLE.COM default_domain = EXAMPLE.COM } [domain_realm] .kerberos.server = EXAMPLE.COM .example.com = EXAMPLE.COM example.com = EXAMPLE.COM example = EXAMPLE.COM [appdefaults] pam = { ticket_lifetime = 1d renew_lifetime = 1d forwardable = true proxiable = false retain_after_close = false minimum_uid = 0 debug = false } [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/kdc.log admin_server = FILE:/var/log/kadmind.log
Kerberos チケットを発行する
AD ドメインコントローラに kerberos チケットをリクエストします (大文字は必須です):
kinit administrator@EXAMPLE.COM
ドメイン管理者の権限があるユーザー名を使ってください。
チケットを確認する
トークンを受け取ったかどうか確認するには klist を実行してください。以下のように出力されるはずです:
# klist
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@EXAMPLE.COM Valid starting Expires Service principal 02/04/12 21:27:47 02/05/12 07:27:42 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 02/05/12 21:27:47
pam_winbind.conf
/etc/security/pam_winbind.conf
が見つからないというエラーが表示される場合、ファイルを作成して以下を書き込んでください:
/etc/security/pam_winbind.conf
[global] debug = no debug_state = no try_first_pass = yes krb5_auth = yes krb5_ccache_type = FILE cached_login = yes silent = no mkhomedir = yes
上記の設定では、winbind はログイン時にユーザーのキータブを作成するようになります (krb5_ccache_type = FILE)。AD ユーザーとしてログインした後にシェルで klist を実行することで確認できます。kinit を実行する必要はありません。/etc/krb5.keytab
のパーミッションを 600 から 640 などに変更しなくてはならない場合があります (FS#52621 を参照)。
Samba
Samba は SMB/CIFS ネットワークプロトコルを再実装したフリーソフトウェアです。Linux マシンを Windows ネットワークサーバー・クライアントとして機能させるツールも含まれています。
このセクションでは、先に 'Global' セクションを編集して認証ができるようにします。後で、設定に戻って共有を追加します。
/etc/samba/smb.conf
[Global] netbios name = MYARCHLINUX workgroup = EXAMPLE realm = EXAMPLE.COM server string = %h ArchLinux Host security = ads encrypt passwords = yes password server = pdc.example.com client signing = auto server signing = auto idmap config * : backend = tdb idmap config * : range = 10000-20000 winbind use default domain = Yes winbind enum users = Yes winbind enum groups = Yes winbind nested groups = Yes winbind separator = + winbind refresh tickets = yes winbind offline logon = yes winbind cache time = 300 template shell = /bin/bash template homedir = /home/%D/%U preferred master = no dns proxy = no wins server = pdc.example.com wins proxy = no inherit acls = Yes map acl inherit = Yes acl group control = yes load printers = no debug level = 3 use sendfile = no
ドメインに参加
ドメインに参加するには AD の管理者アカウントが必要です。ここでは管理者の名前が Administrator とします。使用するコマンドは 'net ads join' です:
# net ads join -U Administrator
Administrator's password: xxx Using short domain name -- EXAMPLE Joined 'MYARCHLINUX' to realm 'EXAMPLE.COM'
サービスの起動とテスト
Samba の起動
おそらく、あなたはまだ再起動していません。X セッションを起動している場合、セッションを終了して、他のコンソールにログインすることで、ログインを維持できます。
Samba デーモン smb.service
, nmb.service
, winbind.service
を起動・有効化してください。
次に NSSwitch の設定を修正します。NSSwitch には Linux ホストに様々なソースから情報を取得する方法が設定されています。この場合、ユーザー・グループ・ホストのソースとして Active Directory を追加してください:
/etc/nsswitch.conf
passwd: files winbind shadow: files winbind group: files winbind hosts: files dns wins
Winbind のテスト
winbind が AD にクエリを送信できるかどうか確認します。以下のコマンドで AD ユーザーのリストが返ってくるはずです (以下の出力ではドメインコントローラに 'test.user' という名前の Active Directory ユーザーが作成されていることが確認できます):
# wbinfo -u
administrator guest krbtgt test.user
AD グループも同じように確認ができます:
# 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
nsswitch のテスト
ホストからドメインにユーザーやグループを問い合わせられることを確認するために、'getent' コマンドを実行して nsswitch の設定をテストします。標準的な Arch Linux なら以下のような出力が表示されます:
# getent passwd
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false mail:x:8:12:mail:/var/spool/mail:/bin/false ftp:x:14:11:ftp:/srv/ftp:/bin/false http:x:33:33:http:/srv/http:/bin/false nobody:x:99:99:nobody:/:/bin/false dbus:x:81:81:System message bus:/:/bin/false ntp:x:87:87:Network Time Protocol:/var/empty:/bin/false avahi:x:84:84:avahi:/:/bin/false administrator:*:10001:10006:Administrator:/home/EXAMPLE/administrator:/bin/bash guest:*:10002:10007:Guest:/home/EXAMPLE/guest:/bin/bash krbtgt:*:10003:10006:krbtgt:/home/EXAMPLE/krbtgt:/bin/bash test.user:*:10000:10006:Test User:/home/EXAMPLE/test.user:/bin/bash
そしてグループもテスト:
# getent group
root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin adm:x:4:root,daemon tty:x:5: disk:x:6:root lp:x:7:daemon mem:x:8: kmem:x:9: wheel:x:10:root ftp:x:11: mail:x:12: uucp:x:14: log:x:19:root utmp:x:20: locate:x:21: rfkill:x:24: smmsp:x:25: http:x:33: games:x:50: network:x:90: video:x:91: audio:x:92: optical:x:93: floppy:x:94: storage:x:95: scanner:x:96: power:x:98: nobody:x:99: users:x:100: dbus:x:81: ntp:x:87: avahi:x:84: domain computers:x:10008: domain controllers:x:10009: schema admins:x:10010:administrator enterprise admins:x:10011:administrator cert publishers:x:10012: domain admins:x:10013:test.user,administrator domain users:x:10006: domain guests:x:10007: group policy creator owners:x:10014:administrator ras and ias servers:x:10015: allowed rodc password replication group:x:10016: denied rodc password replication group:x:10017:krbtgt read-only domain controllers:x:10018: enterprise read-only domain controllers:x:10019: dnsadmins:x:10020: dnsupdateproxy:x:10021:
DC のユーザーアカウントが表示されない場合、smb.conf
ファイルに以下の行を追加してください:
/etc/samba/smb.conf
winbind trusted domains only = no
Samba コマンドのテスト
net コマンドを使ってみて Samba が AD と通信できることを確認します:
# net ads info
[2012/02/05 20:21:36.473559, 0] param/loadparm.c:7599(lp_do_parameter) Ignoring unknown parameter "idmapd backend" LDAP server: 192.168.1.2 LDAP server name: PDC.example.com Realm: EXAMPLE.COM Bind Path: dc=EXAMPLE,dc=COM LDAP port: 389 Server time: Sun, 05 Feb 2012 20:21:33 CST KDC server: 192.168.1.2 Server time offset: -3
# net ads lookup
[2012/02/05 20:22:39.298823, 0] param/loadparm.c:7599(lp_do_parameter) Ignoring unknown parameter "idmapd backend" Information for Domain Controller: 192.168.1.2 Response Type: LOGON_SAM_LOGON_RESPONSE_EX GUID: 2a098512-4c9f-4fe4-ac22-8f9231fabbad Flags: Is a PDC: yes Is a GC of the forest: yes Is an LDAP server: yes Supports DS: yes Is running a KDC: yes Is running time services: yes Is the closest DC: yes Is writable: yes Has a hardware clock: yes Is a non-domain NC serviced by LDAP server: no Is NT6 DC that has some secrets: no Is NT6 DC that has all secrets: yes Forest: example.com Domain: example.com Domain Controller: PDC.example.com Pre-Win2k Domain: EXAMPLE Pre-Win2k Hostname: PDC Server Site Name : Office Client Site Name : Office NT Version: 5 LMNT Token: ffff LM20 Token: ffff
# net ads status -U administrator%password | less
objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user objectClass: computer cn: myarchlinux distinguishedName: CN=myarchlinux,CN=Computers,DC=leafscale,DC=inc instanceType: 4 whenCreated: 20120206043413.0Z whenChanged: 20120206043414.0Z uSNCreated: 16556 uSNChanged: 16563 name: myarchlinux objectGUID: 2c24029c-8422-42b2-83b3-a255b9cb41b3 userAccountControl: 69632 badPwdCount: 0 codePage: 0 countryCode: 0 badPasswordTime: 0 lastLogoff: 0 lastLogon: 129729780312632000 localPolicyFlags: 0 pwdLastSet: 129729764538848000 primaryGroupID: 515 objectSid: S-1-5-21-719106045-3766251393-3909931865-1105 ...<snip>...
PAM の設定
PAM の様々なルールを変更して、Active Directory ユーザーがシステムを使ってログインしたり sudo を利用できるように設定します。ルールを変更するときは、アイテムの順番やルールが required と sufficient のどちらになっているかが正しく設定を行うために非常に重要なので注意してください。PAM ルールの書き方を知らないのであればルールを変更しないほうが賢明です。
ログインに関しては、PAM はまず AD のアカウントを検索して、マッチする AD アカウントが存在しなかった場合にローカルアカウントを使うようにするべきでしょう。そこで、認証プロセスに pam_winbind.so
を含めるようにエントリを追加します。
Arch Linux の PAM 設定は /etc/pam.d/system-auth
に認証プロセスを集めるようになっています。pambase
の標準設定から初めて以下のように変更します:
system-auth
"auth" セクション
以下の行を探して下さい:
auth required pam_unix.so ...
上記の行を削除して、以下のように置き換えます:
auth [success=1 default=ignore] pam_localuser.so auth [success=2 default=die] pam_winbind.so auth [success=1 default=die] pam_unix.so nullok auth requisite pam_deny.so
"account" セクション
以下の行を探して下さい:
account required pam_unix.so
上記の行を削除しないで、下に以下の行を追加します:
account [success=1 default=ignore] pam_localuser.so account required pam_winbind.so
"password" セクション
以下の行を探して下さい:
password required pam_unix.so ...
上記の行を削除して、以下のように置き換えます:
password [success=1 default=ignore] pam_localuser.so password [success=2 default=die] pam_winbind.so password [success=1 default=die] pam_unix.so sha512 shadow password requisite pam_deny.so
"session" セクション
以下の行を探して下さい:
session required pam_unix.so
上記の行を削除しないで、すぐ上に以下の行を追加します:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
pam_unix 行の下には、以下を追加してください:
session [success=1 default=ignore] pam_localuser.so session required pam_winbind.so
passwd
"password" セクション
Active Directory ユーザーでログインして 'passwd' コマンドでパスワードを変更するには、/etc/pam.d/passwd
ファイルに設定が必要です。
以下の行を探して下さい:
password required pam_unix.so sha512 shadow nullok
上記の行を削除して、以下の行に置き換えてください:
password include system-auth
ログインのテスト
新しいコンソールセッション (あるいは ssh) を起動して AD のユーザー名・パスワードを使ってログインしてみて下さい。ドメイン名は Winbind の設定で 'default realm' として設定したので任意です。ssh を使う場合、/etc/ssh/sshd_config
ファイルを修正して kerberos 認証を有効にする必要があります: (KerberosAuthentication yes)
。
test.user EXAMPLE+test.user
上記のどちらでも動作するはずです。/home/example/test.user
が自動的に作成されます。Linux アカウントを使って他のセッションにログインして、root でログインできることを確認してください。ただし、root でログインするのは最低でも一つのセッションであることを覚えておいて下さい。
共有の設定
上で共有の設定については飛ばしていました。ログインができるようになったら、/etc/samba/smb.conf
に戻って、Windows ネットワークから利用したいホストのエクスポートを追加してください。
/etc/samba/smb.conf
[MyShare] comment = Example Share path = /srv/exports/myshare read only = no browseable = yes valid users = @NETWORK+"Domain Admins" NETWORK+test.user
上記の例では、NETWORK というキーワードを使っています。このキーワードをドメイン名に置き換えてはいけません。グループを追加する場合は、グループの前に '@' 記号を付け加えます。Samba が設定ファイルを読み込んだときに正しくパースできるように Domain Admins
はクォートで囲みます。
マシンのキータブファイルを追加してケルベロス認証を使ってパスワードがなくてもマシンに ssh できるようにする
このセクションではマシンのキータブファイルを生成して、ドメイン内の他のマシンからパスワードを使わずにケルベロス認証で ssh 接続する方法を説明しています。GPU ワークステーションや OpenMP 計算ノードのように、ドメイン内にシステムが大量に存在していて、上の方法で追加したサーバー/ワークステーションに ssh でユーザーがログインできるようにする必要がある場合を想定しています。このような場合、ログインするたびに毎回パスワードを入力するのは御免でしょう。その一方、鍵認証ではケルベロスによる NFSv4 共有などをマウントすることは不可能です。そこで、ケルベロスのチケットを転送することでクライアントからマシンにパスワードを入力してなくてもログインできるようにします。
マシンのキータブファイルの作成
root で 'net ads keytab create -U administrator' を実行するとマシンのキータブファイルが /etc/krb5.keytab
に作成されます。設定ファイルで keytab 認証を有効化する必要があるという警告が表示されるので、次のステップで有効化します。キータブファイルが既に存在する場合、コマンドがフリーズするという問題が発生することがあります。そのようなときは、既存の /etc/krb5.keytab
の名前を変更してコマンドを再度実行すれば上手くいくはずです。
# net ads keytab create -U administrator
キータブの中身を確認するには次を実行:
# klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM
keytab 認証の有効化
以下の行を /etc/samba/smb.conf
に追加してキータブファイルを使用するように winbind を設定してください:
kerberos method = secrets and keytab dedicated keytab file = /etc/krb5.keytab
追加すると以下のようになります:
/etc/samba/smb.conf
[Global] netbios name = MYARCHLINUX workgroup = EXAMPLE realm = EXAMPLE.COM server string = %h ArchLinux Host security = ads encrypt passwords = yes password server = pdc.example.com kerberos method = secrets and keytab dedicated keytab file = /etc/krb5.keytab idmap config * : backend = tdb idmap config * : range = 10000-20000 winbind use default domain = Yes winbind enum users = Yes winbind enum groups = Yes winbind nested groups = Yes winbind separator = + winbind refresh tickets = yes template shell = /bin/bash template homedir = /home/%D/%U preferred master = no dns proxy = no wins server = pdc.example.com wins proxy = no inherit acls = Yes map acl inherit = Yes acl group control = yes load printers = no debug level = 3 use sendfile = no
root 権限で 'systemctl restart winbind.service' を実行して winbind.service を再起動してください:
# systemctl restart winbind.service
以下のコマンドを実行してマシンのチケットを取得することで問題がないか確認します:
# kinit MYARCHLINUX$ -kt /etc/krb5.keytab
上記のコマンドでは何も出力が返ってこなくても 'klist' で以下のように表示されるはずです:
# klist
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: MYARCHLINUX$@EXAMPLE.COM Valid starting Expires Service principal 02/04/12 21:27:47 02/05/12 07:27:42 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 02/05/12 21:27:47
ここでよくある間違いは $ を最後に付けるのを忘れるのと大文字・小文字を間違えることです。キータブのエントリは正確に記述してください。
サーバーの sshd の設定
後は sshd_config にオプションを追加して sshd.service
を再起動するだけです。
/etc/ssh/sshd_config
の適当な箇所を以下のように編集して下さい:
# /etc/ssh/sshd_config
... # Change to no to disable s/key passwords ChallengeResponseAuthentication no # Kerberos options KerberosAuthentication yes #KerberosOrLocalPasswd yes KerberosTicketCleanup yes KerberosGetAFSToken yes # GSSAPI options GSSAPIAuthentication yes GSSAPICleanupCredentials yes ...
sshd.service を再起動するには:
# systemctl restart sshd.service
必要なオプションをクライアントに追加
まず、クライアントのチケットを転送できるようにする必要があります。基本的に標準設定になっていますが確認しておいたほうが良いでしょう。/etc/krb5.conf
の forwardable オプションが 'true' に設定されていることを確認してください:
forwardable = true
次に以下のオプションを .ssh/config ファイルに追加してください:
GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
ssh コマンドで -o オプションを使うことで直接オプションを利用することもできます (詳しくは 'man ssh' を参照)。
セットアップのテスト
クライアント側:
正しいチケットが発行されていることを確認してください。わからない場合は 'kinit' を実行。
ssh を使ってマシンに接続:
ssh myarchlinux.example.com
パスワードを入力しなくても接続されるはずです。
鍵認証を追加で有効にしている場合、実際に使われている認証方式を確認するために次を実行してください:
ssh -v myarchlinux.example.com
サーバーで DEBUG3 を有効にしたり journalctl でジャーナルを見ることでデバッグできます。
AD によって認証されたユーザーのキータブを生成
(何らかの理由で) クライアントがローカルマシン上のドメインアカウントを使用しない場合、ワークステーションに ssh する前に kinit を実行するように設定するのは難しいかもしれません。そのような場合、こちらの方法があります。
システムのユーザーで以下を実行:
ktutil addent -password -p username@EXAMPLE.COM -k 1 -e RC4-HMAC - enter password for username - wkt username.keytab q
以下を実行してファイルをテスト:
kinit username@EXAMPLE.COM -kt username.keytab
上記のコマンドでは、パスワードは要求されませんし何も出力が返されません。それで上手くいっていれば、上記の行を ~./bashrc
に追加するだけで、パスワードを入力しなくてもケルベロスのチケットを入手することができるようになり、それによって、パスワードを入力せずにワークステーションにアクセスすることができるはずです。そして完全にケルベロス化されているので、チケットを使って NFSv4 や CIFS の認証を通すことが可能です。
'username.keytab' ファイルはマシンごとに固有の中身とはなっていないので、どこにでもコピーできます。例えば Linux マシンでファイルを作成して、Mac クライアントにコピーしてもかまいません。
参照
- wikipedia:ja:Active Directory
- wikipedia:ja:Samba
- wikipedia:ja:ケルベロス認証
- Samba: ドキュメント
smb.conf(5)
man ページ
商用ソリューション
- Centrify
- Likewise