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

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 ドメインに参加できています。
今回は以上です。それでは。

コメント

このブログの人気の投稿

Hyper-V Server2019にワークグループ環境下でWindows10(1809)から接続

Hyper-V server 2019に、ワークグループ環境にてWindows10(1809)から接続してみました。Windows10にHyper-V管理ツールがインストールされていることと、Hyper-V Serverをインストール済であることが前提です。以下、Hyper-V serverは名前がHyperVSV、アドレスは192.168.1.110としています。 まず、Hyper-V server上で、powershellを起動し、以下のコマンドを入力します。 Enable-WSManCredSSP -Role Server -Force 続いて、クライアントのWindows10のpowershell で以下のコマンドを入力します。 winrm quickconfig -Force Enable-WSManCredSSP -Role Client -DelegateComputer * -Force さらに、クライアントマシンで、gpedit(グループポリシーエディタ)を起動し、以下の要領でポリシーを設定します。 a. [コンピューターの構成]->[管理テンプレート]->[システム]->[資格情報の委任]->[NTLMのみのサーバー認証で新しい資格情報の委任を許可する] を有効にし、サーバを一覧に追加[表示...]ボタンをクリックして、「WSMAN/*」を追加 b. [コンピューターの構成]->[管理テンプレート]->[システム]->[資格情報の委任]->[NTLM のみのサーバー認証で保存された資格情報の委任を許可する] を有効にし、サーバを一覧に追加[表示...]ボタンをクリックして、「*」を追加 また、名前解決できるように、(notepadを管理者権限で実行し)C:\Windows\System32\Drivers\etc\hostsにサーバ名とIPアドレスの対を追加。 192.168.1.110 HyperVSV 最後に、Hyper-Vマネージャーを起動し、Windows10からHyper-V サーバに接続します。手順は以下の通りです。 「サーバーに接続」->コンピュータの選択->別のコンピューターに[HyperVSV]と入力し、[別のユーザーとして接続する

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかもしれませ

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-