sambaでドメインコントローラー
DebianのSambaでドメインコントローラーを運用
ビジネスで使うPCが増えてくると、それにまつわる管理も煩雑になります。Windows10には標準でウイルス対策ソフトが存在しますが、それだけでは防ぎきれないセキュリティリスクも多くあります。
特に、管理者権限をユーザーに与えているなら不可抗力でマルウェアをインストールされることもありえます。
その為社用のPCには多くの制限をかけなければいけないのが通常ですが、台数が多くなるとその設定も大変です。特に基本方針が変わったりするとすべてのPCの設定を修正しないといけません。
そのような管理を軽減化してくれるのがWindowsのアクティブディレクトリという、ディレクトリサービスです。これは本来Windows Server OSに備わっている機能で有償です。
しかし、SambaというLinuxアプリを使うと、アクティブディレクトリと同様のサービス(の一部)を無償で利用できるようになります。
今回はその立ち上げと設定方法を紹介したいと思います。環境は筆者のDebian(10.3)となっています。自身の環境に応じて読み替えが必要になる部分があるかもしれません。管理用のサーバーはWindowsXP世代の古いPCを使っています。
古いPCとDebianを使えばサーバー側の費用はかかりませんが、利用するPCがアクティブディレクトリに対応していなければなりません。たとえばWindows10のHomeエディションではこれらの機能は利用できません。
Sambaのインストール
Sambaのインストールの方法は次の通りです。バージョンアップして不具合がでるようなアプリをインストールしていなければ、apt upgradeでDebian環境全体の更新もしておいた方がいいです。sambaのようなアプリは常にセキュリティリスクと隣り合わせなので、使用するサーバも気を付ける必要があります。
Sambaは「ドメインコントローラー」として稼働します。ドメインコントローラーの役割には次のようなものがあります。
- ドメイン内のユーザー名やパスワード、データの管理
- ユーザーの認証と承認
- PCに操作の許可リスト(グループポリシー)の管理
$ su ... # apt update ... (# apt upgrade) ... # apt -y install samba
最初に、「Modify smb.conf to use WINS settings from DHCP?」と聞かれます。DHCPを使ってなければ「No」の一択です。DHCPを使っている場合でWINSの設定をそこから取得するなら「Yes」を選択してください。
WINS(Windows Internet Name Servie)とは、旧来のNetBiosネットワークで使われていたNetBios名からIPアドレスを取得するものです。
前準備
Sambaの設定に移る前に、次の設定を確認します。
- ホスト名の確認
サーバーの名称です。「hostname」とコマンド入力すると表示されるのでメモしておいてください。
- ドメイン名の設定
ドメイン名。自社ですでにDNS等を運用していて設定済みの場合はそれを使います。ドメイン名が何かわからない場合は、管理するネットワーク名だと思って下さい(例:sample.com)。それっぽいものを自由に設定してください。
ドメインを含んだホスト名をhostsファイルに記載しておきます。ドメインが「sample.com」だった場合は次のようになります。hostsファイルは/etc/hostsにあります。
$su ... #nano /etc/hosts
設定を反映させるには、再起動をして下さい。
- NTP(時刻同期)の設定
Sambaドメインコントローラーを使うにはNTP(時刻同期)の設定をする必要があります。それは次のように設定します。
#apt -y install ntp ... #nano /etc/ntp.conf
ファイル中盤の「# pick a different set every ...」の後の、poolから始まる記述をすべてコメントアウトしNTPサーバの登録をします。複数登録するとより正確になります。
ここではntp.nict.jpは情報通信研究機構と、Googleが提供するNTPサーバーを設定しています。他にも無料で利用できるNTPサーバーは存在しますので、興味がある方は探してみてください。
再起動後「ntpq -p」と実行してみて、通信結果がでていれば設定は成功しています。
- ケルベロス認証の設定
ドメインコントローラの認証にはケルベロス認証が用いられます。
Wikipedia:ケルベロス認証によると、その仕組みは次のようになっています。
まず効力の範囲である「レムル」という概念が存在します。これはローカルネットワークや、ドメインに相当します。そこに存在するPCやサービスはプリンシパルと呼ばれます。
プリンシパルがレムル内のサーバーにアクセスしようとした際、プリンシパルはまず認証サーバー(AS)に自身を認証してもらい、チケット発行するためのチケット(TGT)受け取ります。その後、アクセスしたいサーバーの情報と、TGTをチケット発行サーバー(TGS)に送ります。TGSはTGTの真正性をチェックし問題なければ対象のサーバーにアクセスするためのチケットを返します。そのチケットを使って目的のサーバーへアクセスします。
セキュリティのためにこのような回りくどい作業をしています。詳しい理由は先のリンク先を参照してください。
ケルベロス認証用のインストールと設定をします。ここでの設定は後から上書きしてしまいますが、理解を深めるために実際の環境と同じ設定をしています。
# apt install krb5-config
まず、レムル名を聞かれます。ドメインが存在する場合は、それらを大文字化したものを用います。ここではSAMPLE.COMとしました。
次にケルベロスサーバのホスト名を聞かれます。先ほどhostsファイルに書き込んだ、サーバのホスト名+ドメインを入力します。
続けて、レムルでの(パスワード変更用)管理サーバのホスト名を聞かれます。ひとつ前と同じ記述にします。
これらの内容は/etc/kbr5.confに記載されます。先のレムル名は[libdefaults]の「default_realm」の項目に記述されています。
[realms]には、レムル名毎に設定が中カッコ{}で囲まれて入力されています。kdc(Key distribution Center)の値が、ケルベロスサーバーのホスト名に当たりこれはトラブルに備えて複数行設定することも可能です。admin_serverが管理サーバのホスト名で入力された値が入る場所です。kdcが複数設定された場合の親という認識でいいでしょう。
- winbindのインストール
winbindはLinuxで、Windows ドメイン認証やディレクトリ サービスを管理するためのものです。
# apt install winbind
Sambaの設定
設定ツールが用意されていますので、次のようにコマンドを入力して起動させます。/etc/samba/smb.confが現存するとエラーになるようですので、mvコマンドで退避させます。
# mv /etc/samba/smb.conf /etc/samba/smb.conf.bk # samba-tool domain provision
- Reaml
先にケルベロス認証の際に設定したレムル名を入力してください。
- Domain
レムル名に応じて自動で入ってくると思います。英数大文字で別の名前をつけるか、そのままエンターを押してください。このドメインは後でWindowsPCからの接続時に使います。
- Server Role
ドメインコントローラを意味するdcを入力してください。(デフォルトでdcとなっていますのそのままエンターでもいいです)
- DNS backend
DNSサーバをSAMBA内部で運用するSAMBA_INNTERNALを入力してください。(デフォルトで選択されていますのでそのままエンターでもいいです)
- DNS forwarder IP address
もともと自前でDNSを管理していた場合はそのアドレス、そうでなければプロバイダから割り振られるDNSサーバのアドレスを入力してください。不明な場合はGoogleのDNSサーバのアドレスである8.8.8.8でもいいです。存在しない場合はnoneを入力してください。
- Administrator password
大文字小文字数値を含めて8文字以上でパスワードを設定してください。簡単なパスワードはエラーになります。
ここで設定した値は、/etc/samba/smb.confの[gloal]の項目に保存されます。先に質問された問いと設定名が違う箇所もあるので結びつけておきます。
Reaml→realm Domain→workgroup Server Role→server role(dcという値はactive directory domain controllerに変わっています) DNS forwarder IP address→dns forwarder(noneの際は記述がありません) また、ホスト名を大文字化したものが、netbios nameの項目に入っています。
インストールが終わると、正規のケルベロス認証のファイルが/var/lib/samba/private/krb5.confに出力されますので、ファイルをを/etc ディレクトリへ上書きコピーします。
cp /var/lib/samba/private/krb5.conf /etc/
sambaインストール時は、ドメインコントローラーとしてではなく通常のファイル共有サーバとして設定されていますので、その設定を変更します。次のコマンドを順に入力していってください。
- systemctl stop smbd nmbd winbind
現在稼働中の通常のファイル共有系のサービスを止めます。
- systemctl disable smbd nmbd winbind
通常のファイル共有系のサービスが自動起動しないようにします。
- systemctl unmask samba-ad-dc
使用できないように設定されていた、sambaドメインコントローラーのサービスを復活させます。
- systemctl enable samba-ad-dc
sambaドメインコントローラーのサービスを自動起動させるように設定します。
PCを再起動しsystemctl status samba-ad-dcと入力し、状況を確認します。
エラーです。SAMBA WIKIのページに解決方法を見つけることができました。
/etc/samba/smb.confの[global]のセクションに次の行を入力します。
bind interfaces only = yes interfaces = 127.0.0.0/8 enp2s0(インターフェス名)
再起動すると、無事稼働しました。これでドメインコントローラーの設定は終わりました。次回は、sambaドメインコントローラーにクライアント端末を結び付けていきたいと思います。
参考にさせていただいたサイトです。ありがとうございました。