sybylドメインにLinuxマシンを追加してメンバーサーバとします。
ここではsssdを使ってログイン認証をドメインコントローラに委託してみます。
言葉の定義なのだが、メンバーサーバはADDC以外の(ファイル、計算機、Web)サーバとします
2015y10m10d_233134109.png

参加していたドメインから撤退する samba/Linux離脱

メンバーサーバの準備

sybylドメインに参加させるLinuxマシンの概要は下記とします。

ホスト名IPアドレスOS参照DNS参照NTP
n1.sybyl.local192.168.0.52CentOS7c.sybyl.localc.sybyl.local

CentOSを参考に最低限インストールで完成させる。NTPの設定も忘れずに。
/etc/hostsファイルは、自身とドメインコントローラを加える

[root@n1 ~]# vi /etc/hosts
127.0.0.1     localhost.localdomain localhost
192.168.0.52  n1.sybyl.local        n1
192.168.0.3   c.sybyl.local         c
[root@n1 ~]#

次にドメイン参加に必要なパッケージをインストールする。ここではsssdを使ってADDCと連携を取ります

[root@n1 ~]# yum install chrony samba-common sssd

*ドメインコントローラにsssdをインストールする時、yum.confのexcludeで除外していたsamba-common、samba-winbind-clientsは一端無効にして下さい
+あるいはsssdもコンパイルしますsamba/sssd
*chronyの時計合わせデーモンはCentOS/memo#wdc9d225を参照されたし

sybylドメインへの参加

yumでインストールした samba-common に含まれる /etc/samba/smb.conf ファイルを調整します

[root@n1 ~]# mv /etc/samba/smb.conf  /etc/samba/smb.conf.151003
[root@n1 ~]# cat << _EOF_ > /etc/samba/smb.conf
[global]
  workgroup = SYBYL
  security = ADS
  realm = SYBYL.LOCAL
  log file = /var/log/samba/%m.log
  kerberos method = secrets and keytab
  client signing = yes
  client use spnego = 
_EOF_
[root@n1 ~]#

次に、同じくsamba-common に含まれる net コマンドを使って sybyl ドメインに参加します。

[root@n1 ~]# net ads join osName=CentOS osVer=7.1 -Uadministrator
Enter administrator's password:                  *provisionの際のパスワード
Using short domain name -- SYBYL
Joined 'N1' to dns domain 'sybyl.local'
[root@n1 ~]#

注意 下記メッセージが表示されることがある。samba-internal dnsに既にエントリーがあると表示される。
failedであるが、「Active Directory ユーザとコンピュータ」には登録される。

DNS Update for n1.sybyl.local failed: ERROR_DNS_UPDATE_FAILED
DNS update failed: NT_STATUS_UNSUCCESSFUL

注意 /etc/hostsファイルに自ホストが記載されていないとDNSに登録されない

参加登録確認

hostコマンドでsamba-internal dnsに尋ねてみる。

[root@n1 ~]# host n1
n1.sybyl.local has address 192.168.0.52
[root@n1 ~]#
[root@n1 ~]# host 192.168.0.52
Host 52.0.168.192.in-addr.arpa. not found: 3(NXDOMAIN)
[root@n1 ~]#

注意 samba-internal dnsの正引きには登録されるが、逆引きはゾーンが用意されてても登録されない

samba-toolからも同様に尋ねてみると

[root@c ~]# /opt/samba/bin/samba-tool dns query c sybyl.local n1 ALL
  Name=, Records=1, Children=0
    A: 192.168.0.52 (flags=f0, serial=110, ttl=3600)
[root@c ~]#

とAレコードのみが samba-internal dns にはあるようだ。
あと、samba42/リモートサーバ管理ツール の 「Active Directory ユーザとコンピュータ」で確認すると
2015y10m03d_132027043.png
とあり、プロパティを開くと
2015y10m03d_132259525.png2015y10m03d_132304365.png
とされている。(ServicePack欄の値は n1 にインストールされている samba のバージョンである)

keytabファイルの作成

参加させたマシンのkeytabファイルを用意します。
ドメイン参加に成功していれば、ドメインコントローラn1$というユーザのホストサービスプリンシパルが用意されているはず。これを引き出します。

[root@n1 ~]# /usr/bin/net ads keytab add HOST -Uadministrator
 
[root@n1 ~]# /usr/bin/net ads keytab create   -Uadministrator

これで/etc/krb5.keytabが作られます。

*下記コマンドからでもkeytabファイルは作成できるが、adに参加している全てのマシンのプリンシパルが入ります

[root@n1 ~]# net rpc vampire keytab /etc/krb5.keytab -I C -U administrator

sssd設定

keytabをsssdの設定ファイルに記載します。
*winbindとかドメインコントローラをldapサーバに見立てての方法があるが、sssdを使ってます

sssdの設定ファイル( /etc/sssd/sssd.conf )を作り上げる。*初めから用意されてません

[root@n1 ~]# cat << _EOT_ > /etc/sssd/sssd.conf
[sssd]
services = nss, pam
config_file_version = 2
domains = sybyl.local
 
[domain/sybyl.local]
id_provider = ad
access_provider = ad
enumerate = True
krb5_keytab = /etc/krb5.keytab
ldap_id_mapping = False
ldap_sasl_authid = n1$@SYBYL.LOCAL
_EOT_
[root@n1 ~]#
[root@n1 ~]# chmod 600 /etc/sssd/sssd.conf

注意 sssd.conf に ldap_sasl_authid を付けないと

Client 'host/n1.sybyl.local@SYBYL.LOCAL' not found in Kerberos database
Failed to initialize credentials using keytab [MEMORY:/etc/krb5.keytab]:
Client 'host/n1.sybyl.local@SYBYL.LOCAL' not found in Kerberos database.
Unable to create GSSAPI-encrypted LDAP connection.

と言われた。
注意 ldap_sasl_authid の値は ホスト名$@<ドメイン名> である。$を忘れなく

authconfig

ドメインコントローラのアカウント・認証情報を引き出すために authconfig を使って/etc/nsswitch.confやPAM関係を書き換える。まず初期化してローカルの/etc/passwdでしか参照しない形にして、

[root@n1 ~]# authconfig \
--useshadow --disablemd5 --disablenis --disableldap --disableldapauth --disablesmartcard \
--disablerequiresmartcard --disablefingerprint --disablekrb5 --disablewinbind --disablewinbindauth \
--disableipav2 --disablehesiod --disablesssd --disablesssdauth --disablecache  \
--enablelocauthorize --update

それからsssdを有効にしてみます。

[root@n1 ~]# authconfig --enablesssd --enablesssdauth --update
[root@n1 ~]# systemctl start sssd && systemctl enable sssd

journalctl -u sssdでsssdのログを確認して異常がないかを調べる。

DomainControllerへログインする場合

ドメインコントローラ自身にログインするにもメンバーサーバへの対処と同様に keytab を作って、sssd.confを作って、authconfigで有効にします。

[root@c ~]# /opt/samba/bin/samba-tool domain exportkeytab /etc/krb5.c.keytab --principal=c$
[root@c ~]# klist -ke /etc/krb5.c.keytab
Keytab name: FILE:/etc/krb5.c.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 c$@SYBYL.LOCAL (des-cbc-crc)
   1 c$@SYBYL.LOCAL (des-cbc-md5)
   1 c$@SYBYL.LOCAL (aes128-cts-hmac-sha1-96)
   1 c$@SYBYL.LOCAL (aes256-cts-hmac-sha1-96)
   1 c$@SYBYL.LOCAL (arcfour-hmac)
[root@c ~]#
[root@c ~]# cat << _EOT_ > /etc/sssd/sssd.conf
[sssd]
services = nss, pam
config_file_version = 2
domains = sybyl.local
 
[domain/sybyl.local]
ad_hostname = c.sybyl.local
ad_server =   c.sybyl.local
ad_domain =     sybyl.local
 
id_provider = ad
access_provider = ad
enumerate = True
krb5_keytab = /etc/krb5.c.keytab
ldap_id_mapping = False
ldap_sasl_authid = c$@SYBYL.LOCAL
_EOT_
[root@c ~]#
[root@c ~]# chmod 600 /etc/sssd/sssd.conf
[root@c ~]# authconfig \
 --useshadow --disablemd5 --disablenis --disableldap --disableldapauth --disablesmartcard \
 --disablerequiresmartcard --disablefingerprint --disablekrb5 --disablewinbind --disablewinbindauth \
 --disableipav2 --disablehesiod --disablesssd --disablesssdauth --disablecache  \
 --enablelocauthorize --update
[root@c ~]# authconfig --enablesssd --enablesssdauth --update
[root@c ~]# systemctl start sssd && systemctl enable sssd

備考

sssdにはキャッシュがあり、キャッシュをクリアにするには
sssd を止めてキャッシュデータベースを削除して、sssdを再起動する

[root@c105 ~]# systemctl stop sssd
[root@c105 ~]# rm -rf /var/lib/sss/db/*
[root@c105 ~]# systemctl start sssd

な感じで。
あるいは sss_cache なるコマンドで対処する

authconfig によって、/etc/nsswitch.confらが変更され getent passwd、getent groupの表示が変化する。
sssdでは getent は

(&(objectclass=user)(uid=*)(uidNumber=*)(gidNumber=*))

に適合したユーザが認証対象となる。またグループでは

(&(objectclass=group)(cn=*)(&(gidNumber=*)(!(gidNumber=0))))

である。
ldapsearch を使えば誰がログインユーザとして拾われるかが分かる。

[root@c105 ~]# yum install openldap-clients
 
[root@c105 ~]# ldapsearch -h c.sybyl.local -D "CN=administrator,CN=Users,DC=SYBYL,dc=local" -w ******* \
 -b "dc=sybyl,dc=local" '(&(objectclass=user)(uid=*)(uidNumber=*)(gidNumber=*))'

*「-w *******」は、administratorのパスワード


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-01-27 (金) 22:03:43 (267d)