Ubuntu

Ubuntu18.04に移行 Samba-ad-dc

タイトルは「移行」だけど、前回に引き続きほぼまっさらからのインストール。

従来、Sambaはファイル共有としただけ使ってきたが、SambaでActive Directoryが構築できることがわかり、最初にその環境を作ろうと考えた。

目指せシングルサインオン! ※2020/06/28リンク追加

ドメイン参加とかあるので、テストのために評価版のWindows10を利用させていただくことにする。

お知らせ 2019/01/11追記
ここで構築したSamba ad dcサーバーのドメインに参加し、ドメインユーザーが気軽に使えるファイルサーバーを構築しました。【認証やドメインコントロールのためのサーバー】と【ファイルサーバー】を分ける!という考え方は悪くないんじゃないかと思っています。

お知らせ 2020/06/28追記
ここで構築したSamba ad dcでSPNEGO Web認証を実装しました
2年越しのシングルサインオン実現となりました。



広告


まずは学習。

Ubuntu documentation / Samba and LDAP (今回のインストールには影響なし)
Ubuntu documentation / Kerberos (今回のインストールには影響なし)
【新人研修2016-5】 Samba4でActive Directory Domain Controller構築
Server World / Samba AD DC : サーバーの設定
ネットワークエンジニアとして / Kerberos Authentication
SUSE Linux Enterprise Server インストールおよび管理 / LDAPとKerberosの使用(リンク切れ)
Qiita / Samba4を用いたWindows/Linux認証統合とネットワークホームディレクトリ
Qiita / Samba4 を使用したKerberos バックエンドなSamba Active Directory を構築する

Kerberos認証やLDAP認証はインストールしただけでは動かない。slapd.confは廃止、設定にはコマンドを要求、中身まっさら。わかっている人にはとっても便利なもの、でもハードルが高かった…知識がないとシナリオから1mmでも外れると進まなかった(やってみたけどわからなかったんだよなー)。

それに引き換え、Sambaは使えるように使えるように後押ししてくれるようだ。これなら「やってみて足らなくなったら加える」方式で進められる!

今回やることを整理するとこんな感じに。

 

Sambaインストール

$ sudo apt update
$ sudo apt install samba
$ samba --version
Version 4.7.6-Ubuntu

 

sambaをインストールすれば諸々のツールも一緒に入ってくる…ということで、上記の通りインストール。

バージョンは4.7.6となっていた。

 

ツールを使ってActive Directoryを構築

こちらを読ませていただいたところ、今のSambaは色々な機能を内包しているようだ。しかもだいぶ前から…
遂に登場!最新Samba 4.0系列のすべて

一気に設定をしたいが、考えを整理。

Kerberosを実装 過去トライして結局挫折したKerberos。Heimdal Kerberosのソースを取り込んでいるとのこと。 ぜひこれを便利に使いたい。
LDAPを独自実装 これも過去にトライして挫折。 ぜひこれも便利に利用したい。
DNSを実装 大規模には向かないとあるが、ウチの中だけで利用するDNSだから、これも便利に利用したい。 現在、内向きDNS(BIND9)を運用中。目的は2つ。
  1. LAN内の各種サーバーにFQDNでアクセスできるようにするため。
  2. DHCPと連携して互いがホスト名でアクセスできるようにするため。いわゆるDynamicDNS。
名前解決できないときによそのDNSに聞きに行くことができるみたいなので、運用中のDNSを聞きに行く先にすりゃOKだ。 将来的にはDHCPと連携させたいが、それはその時に考える。
NTP これは外に用意しなければならない見込み。 今あるものを利用しつつ進める。

Kerberosとは

認証システムでシングルサインオン(SSO)を提供する。
組織は独自のRealm(レルム)を構成してKDC(Key Distribution Center)を配置、KDCにはAS(Authentication Server)、TGS(Ticket Granting Server)がある。Realmにあるマシン・サービスをPrincipalと呼ぶ。ユーザーがパスワードを入力するのはASに認証を受けるときだけで、Principalからサービスを受ける際にはチケットが利用されるため、パスワード漏洩の危険は最小限となる。

ということらしい。さて…

Realmは自分の責任範囲。ウチの場合は *.hogeserver.hogeddns.jp のすべてが責任範囲である。

これが大きな組織だったりすると、*.section.hogeserver.hogeddns.jp とかになるかもしれない。

WindowsなActive DirectoryにおけるDomain(ドメイン)はRealmと同義とのこと。

┌─────────────────────┐
│hogeserver(hogeserver.hogeddns.jp)        │
│ ┌───┐┌────┐┌──────┐   │
│ │Kopano││Alfresco││Openmeetings│… │
│ └───┘└────┘└──────┘   │
└─────────────┬───────┘
────┬──────┬──┴────────── hogeserver.hogeddns.jp
┌───┴──┐┌──┴──┐                     Realm = HOGESERVER.HOGEDDNS.JP
│Openmeetings││ livingPC │・・・               Domain= MYHOME とした
└──────┘└─────┘

 

Windows的に考えると、DomainはHOGESERVERにしたいなーと思ったりしたが、その設定だとエラーが発生する。ノード名がhogeserver.hogeserver.hogeddns.jpとなって何か(グループ名?)とバッティングするから許してもらえない模様。以下をよく読んで決める。
Active Directory Naming FAQ

samba-toolsについては以下にmanpageの翻訳あり。
日本 Samba ユーザ会 / Samba ドキュメント翻訳プロジェクト

その他、参考サイトのコマンド例を見ながら、以下の通りとした。

$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.001 ← smb.confがあるとエラーになる
$ sudo samba-tool domain provision --use-rfc2307 --interactive
Realm [NETWORKNAME.PROVIDER.NE.JP]: HOGESERVER.HOGEDDNS.JP[Enter] ← 責任範囲を大文字で
 Domain [HOGESERVER]: MYHOME[Enter] ← smb.confの中では globalセクションでworkgroup=MYHOME指定になる
 Server Role (dc, member, standalone) [dc]:[Enter]
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: [Enter]
 DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.53]: 192.168.33.231[Enter] ← とりあえず、内向きDNSに向けておく
Administrator password:アルファベットと数字と記号を混ぜたパスワード[Enter]
Retype password:同じの[Enter]
Looking up IPv4 addresses
Looking up IPv6 addresses
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=hogeserver,DC=hogeddns,DC=jp
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=hogeserver,DC=hogeddns,DC=jp
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Once the above files are installed, your Samba AD server will be ready to use
Server Role:           active directory domain controller
Hostname:              hogeserver
NetBIOS Domain:        MYHOME
DNS Domain:            hogeserver.hogeddns.jp
DOMAIN SID: S-1-5-21-nnnnnnnnn-nnnnnnnnnn-nnnnnnnnnn

 

いたるところで教えてくれている --use-rfc2307 ってなんだろ?

ここ に「この拡張を追加することでUNIXの属性(ユーザーID,グループID,ホームディレクトリ等)をADに格納できるようになる」と書かれている。入れておかないと後々困ることが想定される。

後からこれを使うためには拡張のための手動設定が必要みたいなので、最初から設定しておこう。

なお、このオプションを使いつつ対話形式で進める場合には、--interactiveをつけないと"ERROR: No domain set!”と怒られる。

ということで…samba-toolが作ってくれた krb5.conf を所定の場所にコピーする。

$ sudo cp -a /var/lib/samba/private/krb5.conf /etc

 

ちなみに、できあがったsmb.confはこちら。IPv6を使わないので、その設定だけ加えておく。

/etc/samba/smb.conf

# Global parameters
[global]
    dns forwarder = 192.168.33.231
    netbios name = HOGESERVER
    realm = HOGESERVER.HOGEDDNS.JP
    server role = active directory domain controller
    workgroup = MYHOME
    idmap_ldb:use rfc2307 = yes

    # IPv6を使わないようにする
    bind interfaces only = yes
    interfaces = 127.0.0.1 192.168.33.55

[netlogon]
    path = /var/lib/samba/sysvol/hogeserver.hogeddns.jp/scripts
    read only = No

[sysvol]
    path = /var/lib/samba/sysvol
    read only = No

 

はて…この共有は?
@it 第7回 Active Directoryの導入 (2/2)
@it SysvolフォルダとNetLogONフォルダについて

netlogon 下位互換のために用意されているフォルダ。 sysvolの中のscriptsを共有。
sysvol グループのポリシーの設定ファイル等が保管される。

だそうです。

 

標準のresolverを停止させ、samba-ad-dcによる名前解決に移行

内包しているDNSサービスを開始するにあたっては53番ポートを利用する必要があるが、標準でsystemed-resolveというDNSスタブに掴まれており、起動できない。

通常は使い続けるべきサービスなんだろうと思うが、一時的にもそうだし、将来的にも内向きDNSは必須なので、無効にする。

そして、systemed-resolveを無効化したら、/etc/resolv.conf を削除する。※削除しないと作った中身は再起動のたびに空っぽにされる。

$ sudo netstat -tulpn | grep :53 ← 現状確認
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      731/systemd-resolve
udp        0      0 127.0.0.53:53           0.0.0.0:*                           731/systemd-resolve
$ sudo systemctl disable systemd-resolved.service
Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service.
Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service.
$ sudo rm /etc/resolv.conf

 

これで、/etc/resolv.conf が自動で作られることはなくなる。

改めて、/etc/resolv.conf を手動作成する。中身はこんな感じで。

domain hogeserver.hogeddns.jp
#search hogeserver.hogeddns.jp ← ドメインは1つだからsearchでなくて良いはず
nameserver 127.0.0.1 ← sambaが内包しているDNSを利用

 

以降の操作は、名前解決ができずに以下のエラーが出るかも。気にしないで進める。

$ sudo hogehoge-command
sudo: unable to resolve host hogeserver: Resource temporarily unavailable

 

Sambaを普通にインストールすると、古いタイプのサービスが登録される模様。

以下にある方法で新しいサービスに切り替えて開始する。
Managing the Samba AD DC Service Using Systemd

$ sudo systemctl mask smbd nmbd winbind ← 従来のサービスをマスクする
Unit smbd.service does not exist, proceeding anyway.
Created symlink /etc/systemd/system/smbd.service → /dev/null.
Created symlink /etc/systemd/system/nmbd.service → /dev/null.
Created symlink /etc/systemd/system/winbind.service → /dev/null.
$ sudo systemctl disable smbd nmbd winbind ← 従来のサービスを無効化する
$ sudo systemctl unmask samba-ad-dc ← どうやらマスクされていたようなのでマスクを解除
Removed /etc/systemd/system/samba-ad-dc.service ← 結果 /dev/null へのシンボリックリンクが消える
$ sudo systemctl enable samba-ad-dc.service ← サービス有効化
$ sudo systemctl daemon-reload ← デーモンの再読込

 

ここで一回再起動。リゾルバとか変わってるので、いろいろ考えずにやれる再起動でサービス有効化。

$ sudo reboot

 

ただし、再起動すると「winbinddがないからエラー」ってのが起きる。この問題を解決するためにWinbindを再インストールなんかしてみたりして。
treedown’s Report / (2/2)sambaのActive Directoryが停止⇒起動しない:解決編

$ sudo apt install winbind
$ sudo reboot

 

設定がきちんと反映されているか確認する。

$ sudo systemctl status samba-ad-dc.service ← サービス起動しているか確認
 samba-ad-dc.service - Samba AD Daemon
   Loaded: loaded (/lib/systemd/system/samba-ad-dc.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-06-03 20:07:48 JST; 7min ago
     Docs: man:samba(8)
           man:samba(7)
           man:smb.conf(5)
…

$ sudo netstat -tulpn | grep :53 ← 53番ポートでsambaが活躍しているか確認
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      1083/samba
udp    38400      0 0.0.0.0:53              0.0.0.0:*                           1083/samba

$ ping google.co.jp ← ちゃんと名前解決できてる?
PING google.co.jp(xxxxxxxx-xx-xxx.xxxxx.net (nnnn:nnnn:nnnn:nnn::nnnn)) 56 data bytes
64 bytes from xxxxxxxx-xx-xxx.xxxxx.net (nnnn:nnnn:nnnn:nnn::nnnn): icmp_seq=1 ttl=54 time=7.42 ms

$ ping hogeserver ← ドメインにアクセスできそう?
PING hogeserver.hogeddns.jp (192.168.33.55) 56(84) bytes of data.
64 bytes from hogeserver.hogeserver.hogeddns.jp (192.168.33.231): icmp_seq=1 ttl=64 time=0.015 ms

 

いい感じ!

※この段階で、/etc/netplan/50-cloud-init.yaml に記載している nameservers の指定は意味をなさない。削除しても動作に問題は出なかった。

 

認証系をsystemdからWinbinddに移行

Samba-AD-DCで認証を担当するのはWinbindd、これをPAM(Pluggable Authentication Module)の1つに加える。最初にライブラリをインストールする。

$ sudo apt install libpam-winbind

 

インストールすることで必要なファイルが書き換えられるが、念の為、以下のコマンドでWinbindが入っていることを確認。ついでに、ログイン時にホームディレクトリを作成する設定をする。

$ sudo pam-auth-update
…
 x PAM profiles to enable:
 x
 x    [*] Unix authentication
 x    [*] Winbind NT/Active Directory authentication ← Winbindを認証に利用
 x    [*] Register user sessions in the systemd control group hierarchy
 x    [*] Create home directory on login ← ログイン時にホームディレクトリを作成
 x    [*] Inheritable Capabilities Management
 x

 

次にNSS(Name Service Switch/各種情報の検索順を指定するために利用される)にWinbindを指定する。最初にライブラリをインストールし…

$ sudo apt install libnss-winbind

 

nsswitch.confを書き換えて、ユーザーとグループの検索にWinbindが利用されるようにする。

/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.

#passwd:         compat systemd
#group:          compat systemd
passwd:         compat winbind
group:          compat winbind
shadow:         compat ← ここにはwinbindを加えない。wbinfoが失敗する可能性
gshadow:        files

hosts:          files dns
networks:       files

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

netgroup:       nis

 

認証系が動き出すので、smb.confに追加で設定を書き入れる。

/etc/samba/smb.conf

# Global parameters
[global]
    dns forwarder = 192.168.33.231
    netbios name = HOGESERVER
    realm = HOGESERVER.HOGEDDNS.JP
    server role = active directory domain controller
    workgroup = MYHOME
    idmap_ldb:use rfc2307 = yes

    # AD からすべての情報を取得(RFC2307も)
    idmap config MYHOME:unix_nss_info = yes
    # AD のユーザー属性 gidNumber からプライマリグループを取得
    idmap config MYHOME:unix_primary_group = yes

    # Winbind NSS info mode設定(RFC2307情報が未設定の場合のデフォルト値)
    template shell = /bin/bash
    template homedir = /home/%U

    # ユーザー・グループの一覧を取得可能とする
    # 一覧を取得するのに時間がかかる(ユーザーやグループが多い等)場合にnoへ
    # yesの場合に getent passwd でユーザーが列挙される
    winbind enum users = yes
    winbind enum groups = yes

    # IPv6を使わないようにする
    bind interfaces only = yes
    interfaces = 127.0.0.1 192.168.33.55

[netlogon]
    path = /var/lib/samba/sysvol/hogeserver.hogeserver.hogeddns.jp/scripts
    read only = No

[sysvol]
    path = /var/lib/samba/sysvol
    read only = No

 

当初、idmap config MYHOME:range など設定してみていたが、*:range と重なるからエラーと怒られていた。だが、これ、どうやらよそのドメインと接続するときに設定するもの?のようで、security = domain や security = ads のときにしか有効にならない、しかし、それだとsambaが起動しない。IDマップ管理はこっちでやるから黙っとけ、ということと認識して設定をやめた。

設定を変更したら、以下で再読込が可能。

$ sudo smbcontrol all reload-config

 

設定した結果をtestparmしてみると指摘事項が表示される。

$ sudo testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[netlogon]"
Processing section "[sysvol]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC

Press enter to see a dump of your service definitions

 

対策として以下。
okuの日記: net-fs/samba 3.6 → 4.1

/etc/security/limits.conf

#<domain>      <type>  <item>         <value>
*                soft    nofile          16384 ← 追記
# End of file

 

設定を反映させるために再起動。

$ sudo reboot

 

これで、Ubuntu側の設定は完了!

 

Windowsからドメイン参加

おなじみの「システムのプロパティ」→「コンピュータ名」タブ→「変更...」ボタン→「コンピューター名/ドメイン名の変更」ポップアップでドメイン参加する。

ドメイン名として hogeserver.hogeddns.jp を指定し、ユーザー名 Administrator 、パスワードはsamba-toolを使ったときに入力したパスワードを指定。

ドメインから認証されると再起動を求められる。

再起動後にはユーザーとして
 hogeserver.hogeddns.jp\Administrator または、
 MYHOME\Administrator
を指定してログインする。

拍子抜けするほどすんなりできた~

設定の試行錯誤をしていた頃、ドメインに入ろうとするときに「内部エラー」が発生、どうも認証がうまくいかないようだった。

このときには、一度、エクスプローラーで hogeserver.hogeddns.jp にアクセスし、Administratorでアクセスすることで認証可能になったりもしたが、最終的にはwinbindを正しく設定できればサクッと認証されるみたい。

設定が整理できた後、一からやり直してみたらドンズバでドメインに参加できた。

 

ユーザー管理

SambaのADを利用したIDマッピングについては ここ に詳しく書かれている。Microsoftが提供する「Active Directory ユーザーとコンピューター」を使えばIDはAD内で一意に一貫して管理され、必要に応じてUNIX属性 uidNumberを手書きすりゃUbuntu側のローカルユーザーと結び付けられるっぽい。

Windows 10 用のリモート サーバー管理ツール をダウンロードしてインストールする。

ぱっと見で以下のツール類がインストールされる。

  • Active Directory 管理センター
  • Active Directory サイトとサービス
  • Active Directory ドメインと信頼関係
  • Active Directory ユーザーとコンピューター

とりあえず、「Active Directory ユーザーとコンピューター」を利用してユーザーを作ってみる。

ユーザーログオン名は
 hoge@hogeserver.hogeddns.jp
 MYHOME\hoge ← 昔の表現方法
になるらしい。

確かにこれらでWindowsからログインできる。

エクスプローラーで \\hogeserver にアクセスすると…

  • netlogon
  • sysvol

というネットワーク共有が見えている。パスワードは求められない。ファイルやフォルダを見ることができて、書き込みもOK。別ユーザーからは書き込みNG。想定通り。

さて、Ubuntuの側では、Active Directoryのユーザーとグループは以下で参照できる。

$ wbinfo -g ← グループ一覧
$ wbinfo -u ← ユーザー一覧

 

さらに、Winbindがnsswitch.confに設定されているから、以下のコマンドでも参照できるようになっているはず。

$ getent group  ← グループ一覧
root:x:0:
daemon:x:1:
…
winbindd_priv:x:114:
BUILTIN\administrators:x:3000000:
BUILTIN\users:x:3000009:
BUILTIN\guests:x:3000015:
BUILTIN\server operators:x:3000001:
BUILTIN\pre-windows 2000 compatible access:x:3000017:
MYHOME\denied rodc password replication group:x:3000005:
MYHOME\domain admins:x:3000004:
MYHOME\domain users:x:100:
MYHOME\domain guests:x:3000012:
MYHOME\domain computers:x:3000019:
MYHOME\schema admins:x:3000006:
MYHOME\enterprise admins:x:3000007:

$ getent passwd ← ユーザー一覧
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
…
hogeuser:x:1000:1004:hoge user:/home/hogeuser:/bin/bash
MYHOME\administrator:*:0:100::/root:/bin/bash
MYHOME\guest:*:3000011:100::/home/guest:/bin/bash
MYHOME\hoge:*:3000047:100:hoge user:/home/hoge:/bin/bash
MYHOME\user2:*:3000048:100:two user:/home/user2:/bin/bash

 

getent passwd でドメインユーザー名が列挙できなかったとき、以下を参考にした。
[Samba] getent only displays local users & groups

追加直後のユーザーを確認してみた。

$ id myhome\\user2
uid=3000048(MYHOME\user2) gid=100(users) groups=100(users),3000048(MYHOME\user2),3000009(BUILTIN\users)

※黄色部分はユーザーを作るたびにインクリメントされる。

作ったユーザー名を指定してsuとかでユーザを切り替えることができて、その際にホームディレクトリが自動で作られることまでわかった。

hogeuser@hogeserver:~$ su - myhome\\user2
Password:
MYHOME\user2@hogeserver:~$ pwd
/home/user2

 

さあ「Active Directory ユーザーとコンピューター」でUNIX属性を設定しようとしてみたら…Windows 10とWindows Server 2016 では、UNIX Attributes タブがMissingだった。

UNIX属性は「表示」→「拡張機能」を有効にしてあげると、プロパティ画面に「属性エディタ」が表示されるようになり、ここで設定できるようになっている。

以下、上記サイトから引用しつつ整理。

User msSFU30NisDomain NIS(Network Infomation Server)はIDやパスワード、/etcとかの情報を提供するサービスな模様。 NISを運用している場合には設定が必要なんだろうと思ったけれども、それにしてもSFU(Service for UNIX)って…今は判断がつかない。
uidNumber User ID(UID)のこと。
gidNumber Group ID(GID)のこと。 これは載ってなかったけど、設定するとプライマリグループになる。
loginShell ユーザーがログイン時に利用するシェルを指定。 /bin/bash とかで良さそうだが、デフォルト値として設定済み。
unixHomeDirectory ユーザーのホームディレクトリで、これが存在しないとログインできないとか。 これもデフォルト値として設定済み。
primaryGroupID ユーザーは複数のグループに所属することができる。 ディレクトリやファイルを作成するとプライマリグループの所有権が設定される。…のハズだけど、更新するとエラーに…理由未確認
Group msSFU30NisDomain 上と一緒。
gidNumber Group ID(GID)のこと。

作成したユーザーの uidNumber は未設定だが、ここに Ubuntu側のUIDを設定してあげれば、ユーザーを結びつけることができた。

★重要★

一度、ユーザー情報を参照するとWinbinddは情報をキャッシュするので、Ubuntu側で古い情報が表示されてびっくりする。これは、以下でキャッシュをクリアすれば解消する。

$ sudo net cache flush

 

これは、ユーザーを削除したときなども同じ。

どうにもよくわからないが、それでもなお値が反映されず、5分位すると反映される場合も。何かのキャッシュなんだろうけど、最後の詰めが甘い…わかる方ぜひ教えてください。

ユーザーの情報をUbuntuで見たり編集したりするには、こちら。

$ sudo apt install ldb-tools
$ sudo ldbedit -H /var/lib/samba/private/sam.ldb

 

※2019/09/17追記
ユーザーとグループの属性は、samba-toolで簡単に編集できることが分かった。
Kopanoという素晴らしいOSSで属性編集をするために調べたものだが、比較的簡単なコマンド操作なのですぐに使えると思う。
ユーザーの追加と属性付与
グループの追加と属性付与

 

さぁ、移行を進めていこう!

 

ファイアウォール

2019/07/30 追記

ここまでファイアウォールなしで設定をしてきた。実際にファイアウォールを設定した後にPCをドメイン参加させようとしたら異常動作をしたので、とりあえず問題なく動く設定を記載。不必要に開けすぎな可能性もあるが、そこは塞ぐ方向で。

$ sudo ufw status
Status: active

To Action From
-- ------ ----

53 ALLOW 192.168.33.0/24 # SAMBA DNS
135/tcp ALLOW 192.168.33.0/24 # SAMBA End Point Mapper(WINS)
137/udp ALLOW 192.168.33.0/24 # SAMBA NetBIOS Name Service
138/udp ALLOW 192.168.33.0/24 # SAMBA NetBIOS Datagram
139/tcp ALLOW 192.168.33.0/24 # SAMBA NetBIOS Session
445/tcp ALLOW 192.168.33.0/24 # SAMBA SMB over TCP
389 ALLOW 192.168.33.0/24 # SAMBA LDAP
636/tcp ALLOW 192.168.33.0/24 # SAMBA LDAPS
88 ALLOW 192.168.33.0/24 # SAMBA Kerberos
464 ALLOW 192.168.33.0/24 # SAMBA Kerberos kpasswd
3268/tcp ALLOW 192.168.33.0/24 # SAMBA Global Catalog
3269/tcp ALLOW 192.168.33.0/24 # SAMBA Global Catalog SSL
49152:65535/tcp ALLOW 192.168.33.0/24 # SAMBA RPC

※IPv6を使用する環境では、IPv6用の開放設定も追加しておくといい。

 

途中で調べたことメモ

testparm

設定が正しいのか確認するにはこれ。

とにかくSambaは優しい、なんとか動いてくれようとする。論理エラーがちょっと発生していても動いてくれたりするので、これでちゃんと確認しておかないと。

今回でいうと、以下の問題が発生していた…

ERROR: The idmap range for the domain * (tdb) overlaps with the range of MYHOME (ad)!

これに関しては、domain * って言われて…あぁ、レンジ設定とかしないのねAD-DCだし、となった。

ちなみに、-v をつけると、未設定のパラメータが埋まったものを出力してくれる。

ファンクションレベル

ちなみに、このバージョンのドメインレベルのデフォルトは 2008 R2 だった。

$ sudo samba-tool domain level show
Domain and forest function level for domain 'DC=hogeserver,DC=hogeddns,DC=jp'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
$ $ sudo samba-tool domain level raise --domain-level 2012_R2 --forest-level 2012_R2
ERROR: Domain function level can't be higher than the lowest function level of a DC!

 

これを 2012 R12 まであげようと思ったけど、エラーになった。

現在、Windows Server は 2016まで進んでいるけれど、Sambaの実装は 2008 R2 までの模様(2012 R2 に参加はできるみたいなことが書いてあったけど、試してないです)。

Microsoftは最低限2008まで上げておけといっており、最初からそのバージョンになっているので、OKと判断。

samba_dnsupdate

/var/lib/samba/private/dns_update_list の内容でDNSを更新するスクリプト。 ※追記 2019/07/13

ドメインに参加できない事態が発生したり、ドメインに参加できているようでいてドメインの機能が使えない(実際はキャッシュでログオンしていた)かったりしたときに、これはDNSで名前解決ができていないのが駄目なんじゃ?と思って調べてみたもの。

それと、実は、IPv6のレコードが残っていて困っていたのもこのコマンドを調べた理由。

多分これでレコードをいろいろと編集できると思うが、今回は出番なしで終了。

systemdの起動順序

winbindが上手く起動しないとき、順序の問題が発生してるんじゃ?と疑って調べてみた。
systemdのサービスの起動順序を決める

実際は別の問題(winbindの再インストールで解消)だったが、有益な情報。

Winbindのキャッシュとユーザー削除に至るプロセス

で…suでログインしてホームディレクトリが作られた後、そのユーザーを「Active Directory ユーザーとコンピューター」で削除してみた。

getent passwd では表示されないが、ディレクトリの所有者として表示さている…はて?

$ id -nu 3000 ← IDからユーザー名を得る。このときはuidNumberに3000を設定していた
$ ls -ln ← ユーザーとグループをID表示

 

何が保管されているのか中身を見てみよう…

$ sudo ldbedit -H /var/lib/samba/private/sam.ldb --show-deleted

 

データとしては残っているみたい。

削除は3段階。
[cifs-protocol] show-recycled and show-deleted LDAP controls

第1段階 有効なオブジェクトが削除済みオブジェクトに変換される(isDeleted=TRUE)

第2段階 削除済みオブジェクトの保管期限を過ぎたら、再資源オブジェクト(資源ごみのイメージ?)に変換される(isRecycled=TRUE)

第3段階 再資源オブジェクトの保管期限を過ぎたら、資源ごみ回収(メモリ解放)される。

ただ、確認したオブジェクトは isRecycled=TRUE の段階にあって、もう単純復旧はできないレベルになっていた。中身を見て見る限り、削除前に設定した uidNumber 属性とかは残っていなかった。nsswitch.conf で winbindを外すと表示されない、じゃあ、Winbindは何を見てディレクトリの所有者の名前を表示しているのか…キャッシュか!

Samba Member Server Troubleshooting
UNIX属性を変更した後にもこれを実行すると反映される。

 

さいごに

移行のためのまっさらな環境はVMware Playerで構築。

いつでもまっさらにしてやり直すことができるから、やってみて上手く行ったら手順を残し、最後の本番に備える…というやり方。

理解不十分なままやってみたら思ってたのと違う、別のやり方を探して…的なことを繰り返して理解を深めていく「体で覚えるタイプ」の進め方、仮想マシンだからできるこのやり方でぶつかりながら進んでいるけど、簡単に全容は掴めない。

でも、だからといって世界の素晴らしい技術者たちが長い時間を掛けて積み上げてきた技術を全部読んでから進める、つーのは重いよ…。

海外サイトだと、とりあえずこうやりゃできる!って形式の記事も多いけど、これはこれでもう少し意味を書いて欲しい。それでいて、詳しく!すると、複雑過ぎて頭に入ってこない。へっぽこSEが幸せになれる、程々なバランスで完全エスコートタイプの記事を誰か書いてくれてないかなー。と思っていたら、

Qiita / Samba4を用いたWindows/Linux認証統合とネットワークホームディレクトリ

に出会った。

4年前の記事であり、自分が考えていた方向とは少し違うけれどもとっても勉強になった。この記事のおかげでActive Directoryを始めることができた。感謝感謝!でした。

さて…これから移行を進めていくわけだけど、それぞれのシステムをSSOに対応させる必要があることから、単純移行と比べたら大変になるんだろうけど、できあがるシステムはきっと管理しやすいものになるだろう。…を夢見て進めよう。

広告

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他