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

samba4:idmap backend adな samba ad dcに対しsssd経由でユーザ認証・rfc2307スキーマデータを取得

ノートPCからWinbind経由でidmap backend adなsamba4 ad dcにて認証を行おうとしたところ、サスペンドからの復帰に時間が2分ほどかかり、実用的ではありませんでした。オフラインでは認証すらできず、困っていたところ、いろいろ試してみましたが改善されません。
そこではたと思い付き、winbindではなくsssdによる認証に切り替えたところ、サスペンドからの復帰で数秒程度、ハイバネーションからの復帰でGUIが立ち上がってから10秒程度、オフライン状態でも数秒でcacheを参照しつつ認証でき実用的になったので本稿を挙げた次第です。なお、環境はサーバ・クライアント共にdebian10/buster(10.9)にて確認しています。追記2021/05/07:Debian 11/Bullseyeクライアントでも動作確認できました。
早速設定です。まず、idmap backend adなsamba4 サーバ上で、rfc2307スキーマを付与しつつユーザーを作成します。idmap backend adなsamba4 サーバの構築はこちらこちらを参照してください。
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/user20000
続いて クライアントのノートPCでのネットワーク名解決を設定しておきます。/etc/resolv.confが ad dc サーバを参照するようにしておいてください。
search mydomain.site
nameserver 10.1.4.63
nameserver 2www.xxxx.yyyy.zzzz::63
また、ホストネームの設定も行っておきます。
## /etc/hostsを編集
=====================
127.0.0.1       localhost
127.0.1.1       m51.mydomain.site    m51

2www:xxxx:yyyy:zzzz::51 m51.mydomain.site    m51
10.1.4.51               m51.mydomain.site    m51

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
=====================
続いてクライアント側でntpの設定を行います。
# apt-get install ntp

# systemctl stop ntp
# cd /etc
# mv /etc/ntp.conf /etc/ntp.conf.bk00

## edit /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 prefer

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 -6 sv63.mydomain.site mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff nomodify notrap nopeer noquery
restrict -4 sv63.mydomain.site mask 255.255.255.255 nomodify notrap nopeer noquery
====================
# chmod 644 /etc/ntp.conf
# chown root.root /etc/ntp.conf
ntpの設定が済んだら、systemctl restart ntpとして下さい。
続いて クライアントのノートPCでsssdをインストールします。
apt-get install realmd sssd sssd-tools adcli packagekit samba-libs
なお、sambaを使用せずにsssdでad認証を行うだけでかつクライアントマシンで名前解決ができていれば、sssd用のkrb5関連パッケージが自動でインストールされますので、別途krb5-userをインストールしなくてもsssdは動作するようです。
続いてdebian10の場合、/lib/systemd/system/sssd.serviceを一部修正し、自動起動するようにしておきます。
#修正前
PIDFile=/var/run/sssd.pid
#修正後
PIDFile=/run/sssd.pid

$ sudo systemctl daemon-reload
debian11の場合は、修正は必要ありません。
続いて sssd を起動時に自動実行するようにしておきます。
$ sudo systemctl enable sssd
続いて 一旦sssdを停止し、レルム(ドメインFQDNを大文字にしたもの)に参加します。
$ sudo systemctl stop sssd
$ sudo realm join MYDOMAIN.SITE
[sudo] user1000 のパスワード:
Administrator に対するパスワード:
正常に参加できた場合は、何もメッセージが出ません。つづいて、レルムに参加すると/etc/sssd/sssd.confが生成されるのでこれをバックアップし改めてsssd.confを以下の様に編集します。
$ sudo su
# cd /etc/sssd
# mv sssd.conf sssd.conf.bk00

# vi /etc/sssd/sssd.conf

[sssd]
domains = mydomain.site
config_file_version = 2
services = nss, pam

[domain/mydomain.site]
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad

ad_domain = mydomain.site
krb5_realm = MYDOMAIN.SITE

realmd_tags = manages-system joined-with-adcli
cache_credentials = True
enumerate = False
krb5_store_password_if_offline = True
default_shell = /bin/bash
fallback_homedir = /home/%u@%d

ldap_schema = rfc2307bis
ldap_id_mapping = False
ldap_group_nesting_level = 5

cache_credentials = True
use_fully_qualified_names = False

ad_gpo_access_control = permissive
ad_gpo_map_remote_interactive = +xrdp-sesman

ldap_id_mapping = false は、idを自動計算せずにadに保存されたidを取得する設定です。
編集が済んだらパーミッションを必ず設定しておいてください。
# chown root.root /etc/sssd/sssd.conf
# chmod 600 /etc/sssd/sssd.conf
ちなみにsssd.confの最後の2行は xrdpにてクライアントマシンに対しRDPにてリモート接続できるようにするための設定ですので、不要であれば削除または#でコメント化してください。参考までにRDPは以下の様にインストールします。
# apt-get install xrdp
なお、/etc/nsswitch.confは自動的に更新され、およそ以下の様になります。
passwd:         files systemd sss
group:          files systemd sss
shadow:         files sss
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

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

netgroup:       nis sss
sudoers:        files sss
つづいて動作確認を行いますので、再起動します。確認は、念のためキャッシュをフラッシュしてから、idコマンドにて行います。
systemctl start sssd
sss_cache -U
sss_cache -G
id user20000

uid=20000(user20000) gid=28513(domain users) groups=28513(domain users)
このように上述で作成したuserのuid/gidなどrfc2307スキーマデータが正常に取れていることが確認できていればOKです。
スキーマデータやidが取得できないときは、ad dc上でdns登録されているかどうか確認してください。その他ネットワーク接続を各種確認してください。
続いて新規にログインした場合、ホームディレクトリを自動で作成するようになっているか確認します。
grep -r mkhome /etc/pam.d
/etc/pam.d/common-session:session       optional                        pam_mkhomedir.so
この様になっていれば、OKです。
もし、こうなっていない場合は、
pam-auth-update
とし、
[*] Create home directory on login
チェックを入れてください。
最後に、sssdが自動で起動されるようにenableにしておきます。
systemctl enable sssd
sssd単独の設定は以上です。

ところでsambaパッケージについてですが、sssdでad認証をおこなうだけなら、sambaパッケージをインストール・設定する必要はありません。
しかしながら、sssdのad認証と並行してsambaの共有を行いたい場合などがあると思いますので、sambaを追加でインストールするには以下の様にします。
$ sudo su

## 一旦 sssdを停止し、realmから離脱しておきます。
# systemctl stop sssd
# realm leave MYDOMAIN.SITE
続いて sambaとkrb5-userをインストールします。

# apt-get install samba krb5-user

# DHCP から WINS 設定を使うよう smb.conf を変更しますか?ときかれたら
# いいえを選択してください。

## add blow to /etc/krb5.conf into the section [libdefaults]

default_ccache_name = FILE:/tmp/krb5cc_%{uid}
つづいて sambaの設定を行います。
# cd /etc/samba
# systemctl stop smbd nmbd
# mv smb.conf smb.conf.orig

## edit /etc/samba/smb.conf

=====================
[global]
   workgroup = MYDOMAIN
   security = ADS
   realm = MYDOMAIN.SITE
   netbios name = M51

;   server multi channel support = yes
;   aio max threads = 100
;   aio read size = 1
;   aio write size = 1

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

   dedicated keytab file = /etc/krb5.keytab
   kerberos method = secrets and keytab

   load printers = no
   printing = bsd
   printcap name = /dev/null
   disable spoolss = yes

[srv]
   path = /srv
   read only = No
====================
smb.confの用意ができたら ドメインに参加します。
# net ads join -Uadministrator

Enter administrator's password:
Using short domain name -- MYDOMAIN
Joined 'M51' to dns domain 'mydomain.site'
joindと表示されていればドメインに参加できています。
続いて sambaを起動し、/etc/sssd/sssd.confを編集します。
# systemctl start smbd nmbd

# rm /etc/sssd/sssd.conf
# edit /etc/sssd/sssd.conf

注意:realmd_tags の 行が sssd単独の場合と異なります。

====================================================
[sssd]
domains = mydomain.site
config_file_version = 2
services = nss, pam

[domain/mydomain.site]
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad

ad_domain = mydomain.site
krb5_realm = MYDOMAIN.SITE

realmd_tags = manages-system joined-with-samba
cache_credentials = True
enumerate = True
krb5_store_password_if_offline = True
default_shell = /bin/bash
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d

ldap_schema = rfc2307bis
ldap_id_mapping = False
ldap_group_nesting_level = 5

cache_credentials = True
use_fully_qualified_names = False

ad_gpo_access_control = permissive
ad_gpo_map_remote_interactive = +xrdp-sesman

====================================================
sssd.confの編集がすんだら、sssdを起動し、テスト共有の/srvに所有権の設定等をしておきます。
# systemctl start sssd

# chown administrator."domain users" /srv
# chmod 775 /srv

## samba ad dc サーバ上でDomain Adminsに共有設定権限を付与
# net rpc rights grant 'MYDOMAIN\Domain Admins' SeDiskOperatorPrivilege -Uadministrator
sssd+sambaの設定は以上です。
参考までに、キャッシュされている限り、NetworkManagerでWifiをオフにしても上述で作成したユーザにてログインできました。これで、デスクトップPC・モバイルPCにかかわらず、FC2307スキーマデータを含め、uid/gidをサーバ・メンバーマシンを通して一貫して扱うことができるので、ユーザ管理が格段にしやすくなったといえると思います。
今回は以上です。それでは。

コメント

このブログの人気の投稿

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の実装もあるようなので、いずれパッケージになるかもしれませ

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]と入力し、[別のユーザーとして接続する

フレッツ光クロス: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-