web-dev-qa-db-ja.com

Samba 4OpenLDAP認証の問題

これまでにやったこと

  • クライアントのローカルネットワーク用にインストールされたDHCPサーバーとbind9(サーバーはゲートウェイとして機能する必要があります)
  • dNSバックエンドとしてbind9_dlzを使用してソースからSamba4を構築しました
  • apt-get install slapd ldap-utilsを使用してOpenLDAPをインストールしました
  • sambaが390,637をブロックしているため、slapdポートを389,636に変更しました
  • samba ldapスキームをインポートし、最初にldapディレクトリを設定し、ドメインをプロビジョニングしました
  • lDAP認証用にlibnss-ldapdをインストールしました(getent passwdはLDAPユーザーを正しく出力します)
  • sambaに私のldapディレクトリへの管理者パスワードを与えました(smbpasswd -w xxx

問題

Windows 7クライアントをドメインに参加させ、smbldap-useraddで作成されたユーザーにログインしようとしました。 Windowsから間違ったパスワードメッセージを受け取りましたが、sambaからのエラー/警告は絶対にありません。私のテストユーザーは実際にLDAPに存在しているため(phpldapadminでチェック)、sambaがldapと正しく通信していないと思います。私はこの時点で立ち往生していて、助けが必要です!

私が気づいたこと

testparmの出力に表示されないpassdb backend = ldapsam:ldap://testsrv.alfr.local:390/を設定しました(以下を参照)。

私が使用しているソフトウェア

  • Ubuntu Server12.04が最新
  • ソースからコンパイルされたSamba4.1.6(公式のgitリポジトリ)
  • バインド9.8.1
  • 平手打ち2.4.28
  • isc-dhcp-server 4.1

構成と出力

  • サーバーホスト名:testsrv
  • ドメイン名:alfr.local
  • 2つのネットワークインターフェイス、eth0 = DHCP、外部WAN、eth1 = 192.168.25.1(サーバーは25.50から25.254の範囲のこのネットワークのDHCPとして機能します)

testparmの出力

root@testsrv:~# testparm 
Load smb config files from /usr/local/samba/etc/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[profiles]"
Processing section "[netlogon]"
Processing section "[sysvol]"
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC
Press enter to see a dump of your service definitions

[global]
    workgroup = ALFR
    realm = alfr.local
    server role = Active Directory domain controller
    passdb backend = samba_dsdb
    add user script = /usr/sbin/smbldap-useradd -m '%u' -t 1
    rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold'
    delete user script = /usr/sbin/smbldap-userdel '%u'
    add group script = /usr/sbin/smbldap-groupadd -p '%g'
    delete group script = /usr/sbin/smbldap-groupdel '%g'
    add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g'
    delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g'
    add machine script = /usr/sbin/smbldap-useradd -w '%u' -t 1
    domain logons = Yes
    os level = 10
    preferred master = Yes
    domain master = Yes
    dns proxy = No
    wins support = Yes
    ldap admin dn = cn=admin,dc=alfr,dc=local
    ldap group suffix = ou=Groups
    ldap idmap suffix = ou=Idmap
    ldap machine suffix = ou=Computers
    ldap suffix = dc=alfr,dc=local
    ldap ssl = no
    ldap user suffix = ou=Users
    server services = rpc, nbt, wrepl, cldap, ldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, smb
    dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc, spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupkey, dnsserver, winreg, srvsvc
    rpc_server:tcpip = no
    rpc_daemon:spoolssd = embedded
    rpc_server:spoolss = embedded
    rpc_server:winreg = embedded
    rpc_server:ntsvcs = embedded
    rpc_server:eventlog = embedded
    rpc_server:srvsvc = embedded
    rpc_server:svcctl = embedded
    rpc_server:default = external
    idmap config * : backend = tdb
    map archive = No
    map readonly = no
    store dos attributes = Yes
    vfs objects = dfs_samba4, acl_xattr

[profiles]
    path = /srv/samba/profiles
    read only = No
    create mask = 0611
    directory mask = 0700
    profile acls = Yes
    map hidden = Yes
    map system = Yes
    browseable = No
    csc policy = disable

[netlogon]
    path = /usr/local/samba/var/locks/sysvol/alfr.local/scripts
    read only = No

[sysvol]
    path = /usr/local/samba/var/locks/sysvol
    read only = No

[homes]
    comment = Eigener Ordner
    path = /srv/samba/homes/%S
    read only = No
    create mask = 0611
    directory mask = 0711
    browseable = No
    vfs objects = acl_xattr, full_audit
    full_audit:failure = connect opendir disconnect unlink mkdir rmdir open rename
    full_audit:success = connect opendir disconnect unlink mkdir rmdir open rename

ps auxの出力(重要でないものを切り取る)

root@testsrv:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       699  0.0  0.0   7272   608 ?        Ss   08:08   0:00 dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -1 eth
bind       827  0.0  2.8 502280 58392 ?        Ssl  08:08   0:01 /usr/sbin/named -u bind
dhcpd      833  0.0  0.2  14552  4476 ?        Ss   08:08   0:00 /usr/sbin/dhcpd -f -q -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/ltsp/dhcpd.conf
openldap  1024  0.0  0.3 722000  6524 ?        Ssl  08:08   0:00 /usr/sbin/slapd -h ldap://127.0.0.1:390/ ldaps://127.0.0.1:637/ ldapi://%2fvar%2frun%2fslapd%2fldapi/??
root      1051  0.0  0.0 693092  1172 ?        Ssl  08:08   0:00 /usr/sbin/nscd
nslcd     1075  0.0  0.0 443600  1376 ?        Ssl  08:08   0:00 /usr/sbin/nslcd
ntp       1279  0.0  0.0  25960  1836 ?        Ss   08:08   0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 107:114
root      1595  0.0  2.2 534364 46152 ?        Ss   09:52   0:00 samba start
root      1597  0.0  1.8 538976 38532 ?        S    09:52   0:00 samba start
root      1598  0.0  1.7 539772 35624 ?        S    09:52   0:00 samba start
root      1599  0.0  1.6 536876 33716 ?        S    09:52   0:00 samba start
root      1600  0.0  1.6 534364 34568 ?        S    09:52   0:00 samba start
root      1601  0.0  1.8 534804 37568 ?        S    09:52   0:00 samba start
root      1602  0.0  1.8 538516 37212 ?        S    09:52   0:00 samba start
root      1603  0.0  1.6 534364 34328 ?        S    09:52   0:00 samba start
root      1604  0.0  1.6 537192 33928 ?        S    09:52   0:00 samba start
root      1605  0.0  1.5 534364 32716 ?        S    09:52   0:00 samba start
root      1606  0.0  2.0 534364 41264 ?        S    09:52   0:00 samba start
root      1607  0.0  1.6 534364 33884 ?        S    09:52   0:00 samba start
root      1608  0.0  1.6 534364 33360 ?        S    09:52   0:00 samba start

/etc/nsswitch.conf

root@testsrv:~# cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

# pre_auth-client-config # passwd:         compat
passwd: files ldap
# pre_auth-client-config # group:          compat
group: files ldap
# pre_auth-client-config # shadow:         compat
shadow: files ldap

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

# pre_auth-client-config # netgroup:       nis
netgroup: nis
2
peipst9lker

設定ファイルにセキュリティディレクティブがありません。 security = adが必要だと思います。私は先月、まったく同じことをしようとして過ごしました。ユーザーログイン情報のメインデータベースとしてOpenLDAPを使用してください。

私はいくつかのアプローチをテストしました:

  1. Samba 4 ADは現時点では信頼できないため(Sambaチームは執筆時点でSamba 4.2をまもなく公開する予定です)、信頼メカニズムを使用できません。

  2. 私の知る限り、ADのSamba 4は、Active Directoryに必要なスキーマがないため、OpenLDAPに基づくことはできません。

  3. 基本的にADとOpenLDAPの間でユーザーとグループを同期できるLSCと呼ばれるソフトウェアを使用するのにうんざりしています。ここでも運がない。 LSCのドキュメントと例は古く、現在のリリースと互換性がありません。私はついにユーザー同期を機能させることができましたが、OpenLDAPでパスワードを更新すると、LSCがそれをキャッチしないというバグがいくつかあります(少なくとも私が疲れたLSC v2.0では)。パスワードを機能させるには、パスワードをプレーンテキストで保存する必要があります。

今のところ、バックエンドとしてOpenLDAPを備えたSambaADコントローラーはありません。 Sambaが信頼をサポートするようになり次第、従来のNTドメインコントローラーを使用する予定です。次に、一方向の信頼(samba4 NT DCからSamba4AD))を委任し、ADドメインコントローラーで使用します。 OpenLDAPにあるユーザー情報。

誰かがここで間違いを見つけることができれば、私はそれを聞いてうれしいです。 ;-)

[〜#〜] update [〜#〜]:Samba4.3のFrancescoMalvezziの情報によると、信頼がサポートされるようになりました。

https://www.samba.org/samba/history/samba-4.3.0.html

信頼されたドメインのサポートの改善(AD DCとして)

信頼できるドメイン/フォレストのサポートが大幅に改善されました。

samba-toolは、信頼を管理するための「ドメイン信頼」サブコマンドを取得しました。

create-ドメインまたはフォレストの信頼を作成します。

delete-ドメインの信頼を削除します。

list-ドメインの信頼を一覧表示します。

namespaces-フォレストの信頼の名前空間を管理します。

show-信頼できるドメインの詳細を表示します。

validate-ドメインの信頼を検証します。

個々のドメイン間の外部信頼は、両方の方法(インバウンドとアウトバウンド)で機能します。同じことがフォレストトラストのルートドメインにも当てはまります。他のフォレストへの推移的なルーティングは、Kerberosでは完全に機能しますが、NTLMSSPではまだサポートされていません。

多くのことが正常に機能していますが、現在、いくつかの制限があります。

  • 信頼の両側はお互いを完全に信頼する必要があります!
  • SIDフィルタリングルールはまったく適用されません!
  • これは、ドメインAのDCがドメインBのドメイン管理者権限を付与できることを意味します。
  • 信頼できるドメインのユーザー/グループをドメイングループに追加することはできません。

構成例: https://www.samba.org/samba/history/samba-4.3.0.html

信頼関係が作成され、winbindを使用して確認できます。

wbinfo -u->ローカルユーザーリストを取得

wbinfo -u --domain=trusted.domain.tld->信頼できるドメインのユーザーリストを取得します(短いドメインも使用できます)

--local-dc-usernameおよび--local-dc-passwordスイッチを使用して検証することもできます。

samba-tool domain trust validate trusted.domain.tld \ --local-dc-password=trustedAdminPass \ --local-dc-username=administrator \ -U administrator at trusted.domain.tld

Sambaの内部DNSを使用すると、DNSクエリの転送が透過的になります(確認しようとしているいくつかのツールを使用)。

B.domain.tldのユーザーを使用してmachine.A.domain.tldに接続できるようにするには、RDP許可された人々に特別なグループを「認証されたユーザー」にする必要があります。

ただし、ディストリビューション(debian 8-9)の公式チャンネルで利用できるようになるまでまだ待っています。

2