スキップしてメイン コンテンツに移動

samba4: winbindをクライアントにインストールし、idmap backend=ad の domainユーザー情報でログイン

いわゆる統合認証の一種ですが、idmap backend=adで構築したsamba ad dcから、winbindにてログイン認証を得ることで、WindowsとLinuxとで同じユーザ名とパスワードでログイン・ログオンできるようになります。さらに、idmap backend=adにしているのでlinuxマシン間ではuidが統一されます。
今回はLinux端末にWinbind認証を入れ、ユーザー情報をsamba ad dcから取得・認証させる設定をしたので、備忘録として本稿を挙げてみることにしました。なお、サーバ・クライアントは共にDebian10/Busterで構築しています。

2021/05/10追記:winbind経由の認証場合、オフライン認証、サスペンド・ハイバーネーションからの復帰時の認証に難がありますが、sssd経由の場合、いずれもほぼ問題ありませんでしたので、ノートPCなどのモバイルPCでのad認証は、こちらの記事をお勧めします。

前提ですが、idmapのbackendがad(active directory)のsamba ad dc サーバは、こちらですでに構築しているものとします。
まず初めにクライアントのIPv4/IPv6アドレスですが、今回は説明のため固定にしてみました。
#/etc/network/interfaces.d/enp2s0
auto enp2s0
iface enp2s0 inet static
  address 10.1.4.53
  netmask 255.255.255.0
  gateway 10.1.4.23
iface enp2s0 inet6 static
  address 2www:xxxx:yyyy:zzzz::53
  netmask 60
  gateway 2www:xxxx:yyyy:zzzz::23
ネットワークの設定が済んだら、再起動してください。
つづいて、クライアントマシンでの名前解決に、samba ad dc(sv63.mydomain.site 10.1.4.63)を指定します。
#/etc/resolv.conf
search mydomain.site
domain mydomain.site
nameserver 10.1.4.63
nameserver 2www:xxxx:yyyy:zzzz::63
/etc/resolv.confの編集がすんだら、例えば以下の様にして、名前解決できるかどうか確認しておいてください。
ping -6 -c 4 sv63.mydomain.site
ping -4 -c 4 sv63.mydomain.site
$ nslookup sv61.dom01.local
Server:         10.1.4.63
Address:        10.1.4.63#53

Name:   sv63.mydomain.site
Address: 10.1.4.63

$ nslookup
> set type=SRV
> _ldap._tcp.mydomain.site.
Server:         10.1.4.63
Address:        10.1.4.63#53

_ldap._tcp.mydomain.site        service = 0 100 389 sv63.mydomain.site.
続いて、クライアントマシンでsamba, winbindおよび関連パッケージを以下のコマンドでインストールします。
apt-get install samba winbind libpam-winbind libnss-winbind krb5-config samba-vfs-modules krb5-user ntp
インストール途中で、以下の様に聞いてくる場合、今回は固定でアドレスを割り振っているので、例えば以下の様にします。
DHCP から WINS 設定を使うよう smb.conf を変更しますか?
いいえ
なお、以下の様に聞いてくる場合、realmは大文字小文字を区別しますが、realmは通常大文字にします。
Default Kerberos version 5 realm:
MYDOMAIN.SITE
また、 realmのkerberos serversを聞いてくる場合、FQDNにて samba ad dc サーバ名を小文字で入力します。
Kerberos servers for your realm:
sv63.mydomain.site
上述の場合、今度は管理サーバを聞いてくるので、FQDNにて samba ad dc サーバ名を小文字で入力します。
Administrative server for your Kerberos realm:
sv63.mydomain.site
入力が済んだら、まず、/etc/samba/smb.confをバックアップし、以下の内容にて新規でsmb.confを作成します。
$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig

$ sudo vi /etc/samba/smb.conf

[global]
        workgroup = MYDOMAIN
        realm = MYDOMAIN.SITE
        security = ADS

        idmap config * : backend = tdb
        idmap config * : range = 4000000000-4199999999

        idmap config MYDOMAIN : backend = ad
        idmap config MYDOMAIN : range = 20000-29999
        idmap config MYDOMAIN : schema_mode = rfc2307
        idmap config MYDOMAIN : unix_nss_info = yes
        idmap config MYDOMAIN : unix_primary_group = yes

        ea support = yes
        vfs objects = acl_xattr streams_xattr
        store dos attributes = yes
        map acl inherit = yes
        inherit permissions = yes

        winbind use default domain = true
        winbind offline logon = true

        winbind enum users = yes
        winbind enum groups = yes

        load printers = no
        printing = bsd
        printcap name = /dev/null

[srv]
        path = /srv
        read only = No
最後の[srv]は共有設定ですが、不要であれば、削除してください。またwinbind enum は中規模以上のシステムでは、なるべくnoにしてください。
続いて、winbind認証を/etc/nsswitch.confに追加します。追加は、passwdとgroupのみです。
$ sudo vi /etc/nsswitch.conf

# 変更前
passwd:         files systemd
group:          files systemd
# 変更後
passwd:         files systemd winbind
group:          files systemd winbind
続いて、新規ログイン時、ホームディレクトリをクライアントマシン上で作成する場合は、以下の様にします。
sudo pam-auth-update
すると、以下の様な項目があるので、チェック * を入れOKを入力します。(チェックはスペースキーで入ります)
[ ] Create home directory on login
ここで一旦、smbd, nmbd, winbindを停止します。
systemctl stop smbd nmbd winbind
以上の設定がすんだら、ドメインに参加します。
$ sudo net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- MYDOMAIN
Joined 'L53' to dns domain 'mydomain.site'
なお、ドメインに参加できたが、dns登録に失敗する場合、/etc/hostsに自ホストの記述を入れ、一旦leaveしてから再度joinしてみてください
$ sudo net ads leave -U Administrator

#/etc/hosts
10.1.4.53				l53.mydomain.site	l53
2www:xxxx:yyyy:zzzz::53	l53.mydomain.site	l53

$ sudo net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- MYDOMAIN
Joined 'L53' to dns domain 'mydomain.site'
ドメインに参加したら、smbd, nmbd, winbindを起動します。
systemctl start smbd nmbd winbind
づついて動作確認を行います。
# wbinfo -u
guest
krbtgt
administrator
user20000

# wbinfo -g
domain controllers
schema admins
dnsupdateproxy
domain guests
group policy creator owners
dnsadmins
allowed rodc password replication group
enterprise read-only domain controllers
cert publishers
enterprise admins
domain admins
domain users
read-only domain controllers
ras and ias servers
domain computers
denied rodc password replication group

# ls /home/
# (何もない状態)

exit

$ ssh -l user20000 l53.mysdomain.site
user20000@l53.mydomain.site's password:
Creating directory '/home/user20000'.
Linux m53 4.19.0-16-686-pae #1 SMP Debian 4.19.181-1 (2021-03-19) i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
user20000@l53:~$ pwd
/home/user20000
user20000@l53:~$
最後にNTPのインストール・設定をしておきます。なお、こちらを参考にさせていただきました。ありがとうございます。
2021/05/10追記:IPv6設定を追加しました。
$ sudo apt-get install ntp
$ sudo mv /etc/ntp.conf /etc/ntp.conf.orig

$ sudo vi /etc/ntp.conf
###以下
# Local clock.
server 127.127.1.0
fudge  127.127.1.0 stratum 10

# Where to retrieve the time from
server -6 sv63.mydomain.site      iburst prefer
server -4 sv63.mydomain.site      iburst


driftfile /var/lib/ntp/ntp.drift
logfile   /var/log/ntp

# deny all.
restrict default ignore

# allow from localhost
restrict -6 ::1
restrict -4 127.0.0.1

# Enable the time source(ad dc) to provide the time to this host.
restrict -4 sv63.mydomain.site mask 255.255.255.255 nomodify notrap nopeer noquery
restrict -6 sv63.mydomain.site mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff nomodify notrap nopeer noquery
###以上

$ sudo systemctl restart ntp

参考までに、再掲ですが、samba-toolをつかうとlinux uid = --uid-number、gid = --gid-number、domain = --nis-domain、login shell = --loginshell, home dir = --unix-homeを指定してlinux/windows共通ユーザを作成できます。
sudo samba-tool user create user20000 P@ssw0rd98765 --description user20000 \
--nis-domain=mydomain.site --uid=user20000  --uid-number=20000 --gid-number=28513 \
--login-shell=/bin/bash --unix-home=/home/WORKS/user20000
上述はシェルコマンドなので、変数やwhile readをつかうなどすると、多量のユーザをバッチ形式で作成できるのは言うまでもありません。
なお、2021/04/03現在、debian 11ではログイン情報(uidなど)を正常に受け取ることができませんでしたので、ご注意ください。今回の設定は、前述の通り、Debian 10/Busterにて動作確認しています。(追記2021/05/10)Debian11でも動作確認できました。参考までに、Windows10 20H2からsamba ad dc ドメインに参加できています。
今回は以上です。それでは。

コメント