「Active Directory 統合化」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(en:Active Directory Integrationへの転送ページ)
 
(校正(でき・出来))
 
(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 フォワーディングや再帰を許可していない場合、リゾルバを追加する必要があります。

ノート: マシンで Windows と Linux をデュアルブートしている場合、両方のオペレーティングシステムをドメインのメンバーに加えるときは Linux の設定の DNS ホストネームと netbios 名は変えるようにしてください。

NTP の設定

NTPdOpenNTPD を読んで 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
ノート: Heimdal 1.3.1 から Windows Server 2008 以前まで AD 認証に必要だった DES 暗号化は無効化されています。必要な場合は [libdefaults] セクションに allow_weak_crypto = true を追加してください。

Kerberos チケットを発行する

ノート: キーとコマンドはユーザー個別です: sudo で root になると、非特権アカウントで別々のキーを使って別々の AD ユーザーに接続できます。ドメインがひとつしかない場合、@EXAMPLE.COM は不要です。

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 ネットワークサーバー・クライアントとして機能させるツールも含まれています。

ノート: 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 を起動・有効化してください。

ノート: samba 4.8.0-1 から、Samba デーモンのユニットは smbd.service, nmbd.service, winbindd.service から 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 を利用できるように設定します。ルールを変更するときは、アイテムの順番やルールが requiredsufficient のどちらになっているかが正しく設定を行うために非常に重要なので注意してください。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 クライアントにコピーしてもかまいません。

参照

商用ソリューション

  • Centrify
  • Likewise