Samba4 Active directory検証環境を構築

Posted on 2020/04/05

ToC

Active Directoryの検証環境を構築

Active Directory(AD)のユーザー管理のツールを作成する際にいきなり本番系のADに 接続して実装やテストを実施するわけにもいかないので、クライアント環境で簡易にADを 構築したいと思いたち、Samba4 Active directoryDocker イメージが 提供されていたので、これを利用してみました。

DockerでADを起動する

ネットで調べたところ、 samba4-ad というものを使った事例が多く紹介されていましたが、 Docker のバージョンがあがってPermissionの問題があるのか、私の環境ではうまく動かなかったので 今回はalpine-samba-dcを利用することにしました。

あまり、何も考えずにうまく行ったので docker-compose ファイルを下記に記載します。

version: '3.2'
services:
  samba:
    image: laslabs/alpine-samba-dc:0.1.0
    container_name: adds
    privileged: true
    environment:
      SAMBA_DC_REALM: super-company.local
      SAMBA_DC_DOMAIN: SUPER-COMPANY
      SAMBA_DC_ADMIN_PASSWD: <ユーザー指定のパスワード>
      SAMBA_DC_DNS_BACKEND: SAMBA_INTERNAL
    ports:
      - 53:53
      - 53:53/udp
      - 88:88
      - 88:88/udp
      - 135:135
      - 139:139
      - 389:389
      - 389:389/udp
      - 445:445
      - 464:464
      - 464:464/udp
      - 636:636
      - 3268-3269:3268-3269

しばらく起動していると、 dns_update.c:290: Failed DNS update - with error code 110 というエラーが 出てくるのですが、どうやら特定のバージョン以上で発生するようですが、今回の検証では特に問題がなかったのでこのままの状況にしました。

LDAPクライアントの準備

ADが構築できたのは良いのですが、ADの内部のデータを見る必要があります。 CUIですべてを見るのはとても効率が悪いので、LDAPクライアントを導入することにします。
色々と調べてみたのですが、あまりこの分野でのアップデートが無いらしく情報もあまりありませんでした。 導入に手間を掛けるのもあまり得策ではないので、Homebrew でインストールできそうな Apache Directory Studio を使ってみました。

/posts/2020/04/img/540bc520_hu1c5ddd23af33b503cb85823eda915bc9_557772_600x0_resize_lanczos_3.png

Homebrewでインストール

Homebrewを利用して、インストールをしてゆきます。インストールコマンドを参考に導入してください。
ここでポイントとなるのは、Apache Directory Studio を動作させるためには Java 8 が必要というところです。
今回は、Amazonが無償マルチプラットフォームで提供している Coretto 8 を使ってみて動かしてみます。

UI系のインストールのコマンドは、 brew cask でインストールします。

$ brew cask install apache-directory-studio

Updating Homebrew...
==> Caveats
apache-directory-studio requires Java 8+. You can install the latest version with:
  brew cask install adoptopenjdk
  〜 一部省略 〜
🍺  apache-directory-studio was successfully installed!

インストールはできますが、この段階でアプリケーションを起動する Java が無いと言って怒られます。 そのため、続いてCoretto 8をインストールします。インストールの途中でパスワードの確認があります。

$ brew tap homebrew/cask-versions
Updating Homebrew...
==> Tapping homebrew/cask-versions
  〜 一部省略 〜
Tapped 156 casks (204 files, 64.4MB).

$ brew cask install corretto8
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/cask).
  〜 一部省略 〜
Password:
installer: Package name is Amazon Corretto 8
installer: Installing at base path /
installer: The install was successful.
🍺  corretto8 was successfully installed!

インストール済みのJavaを確認すると、確かにインストールされたようです。

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    14, x86_64:	"OpenJDK 14"	/Library/Java/JavaVirtualMachines/openjdk-14.jdk/Contents/Home
    1.8.0_242, x86_64:	"Amazon Corretto 8"	/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home

最後にApache Directory Studioの設定ファイルに特定のJava Versionを設定するという項目があります。
ここに、インストールしたJavaのパスを設定します。

  • 設定ファイル: /Applications/ApacheDirectoryStudio.app/Contents/Info.plist
<string>-vm</string>
<string>/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home/bin/java</string>

そして、再度Apache Directory Studio を起動すると、今度は正しく起動します。

/posts/2020/04/img/fd01a0fb_hu5fbbcddec0741f9b686fb7aa16075e5b_247555_800x0_resize_lanczos_3.png

Apache Directory Studioからの接続設定

主な設定値は、下記のように設定しました。 初期接続時には、証明書の確認がありますが「このセッションだけ有効」など適切に設定して接続してください。

分類設定項目設定値
NetworkHostname127.0.0.1
NetworkPort389
NetworkEncryption MethodUse StartTLS extension
AuthenticationMethodSimple Authentication
AuthenticationBindDNCN=Administrator,CN=Users,DC=super-company,DC=local
AuthenticationBind PasswordDockerで環境変数に設定した値
Browser OptionsBase DNDC=super-company,DC=local
/posts/2020/04/img/c0c953fb_huff07d456c8b4df2a108fa37b52190522_650955_800x0_resize_lanczos_3.png

samba-toolでユーザー追加

GUIでデータの内容を確認できるようになったので、samba-tool を使ってユーザーを追加してみます。 正しくユーザー追加ができれば、Apache Directory Studio でもユーザーが追加されて見れるはずです。

$ docker exec -ti adds samba-tool user create jane.doe jane-passw0rd  --use-username-as-cn  "--mail-address=jane.doe@example.jp" --given-name=Jane --surname=Doe
User 'jane.doe' created successfully

/posts/2020/04/img/c27d1257_hufba33dd667488b5e87e96375eb2f4e7d_283542_800x0_resize_lanczos_3.png
確かに増えました。 これでADを使ったツール開発が捗りそうです。

ちなみにsamba-tool を使うと色々と設定できるようです。

Main samba administration tool.

Available subcommands:
  dbcheck     - Check local AD database for errors.
  delegation  - Delegation management.
  dns         - Domain Name Service (DNS) management.
  domain      - Domain management.
  drs         - Directory Replication Services (DRS) management.
  dsacl       - DS ACLs manipulation.
  fsmo        - Flexible Single Master Operations (FSMO) roles management.
  gpo         - Group Policy Object (GPO) management.
  group       - Group management.
  ldapcmp     - Compare two ldap databases.
  ntacl       - NT ACLs manipulation.
  processes   - List processes (to aid debugging on systems without setproctitle).
  rodc        - Read-Only Domain Controller (RODC) management.
  sites       - Sites management.
  spn         - Service Principal Name (SPN) management.
  testparm    - Syntax check the configuration file.
  time        - Retrieve the time on a server.
  user        - User management.
For more help on a specific subcommand, please type: samba-tool <subcommand> (-h|--help)

参照