タイトルは「移行」だけど、前回に引き続きほぼまっさらからのインストール。
従来、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インストール
- ツールを使ってActive Directoryを構築
- 標準のresolverを停止させ、samba-ad-dcによる名前解決に移行
- 認証系をsystemdからWinbinddに移行
- Windowsからドメイン参加
- ユーザー管理
- ファイアウォール
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つ。
|
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に対応させる必要があることから、単純移行と比べたら大変になるんだろうけど、できあがるシステムはきっと管理しやすいものになるだろう。…を夢見て進めよう。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他