0.Intro
会社で機械学習の勉強会を行うにあたり、貸与されている事務用の8GメモリのWindowsマシンだけではなかなか辛いものがあるので、一台昔サーバー的に使っていて引退した24Gメモリのマシンが空いていたので共有で使うことにしました。社外秘のデータも扱いたいのでローカルに構築したかったというのもあります。
環境構築するにあたっての必要要件としては
- ライセンスフリーで機械学習環境に最適なLinux環境で構築。但しLinuxに不慣れなメンバーもいるので出来るだけ意識しないで済むように。
- Sambaで共有フォルダを設定、但しアクセス制御は必須。
があります。
まず上記二点を満たす環境をつくることにしました。
OSはUbuntu Server 20.04にしました。
1.ドメイン参加
いつもお世話になっております、Server World様のお知恵をお借りして。
sudo apt -y install winbind libpam-winbind libnss-winbind krb5-config samba-dsdb-modules samba-vfs-modules
Kerberosは説明の通りに設定。
ドメインに参加の手順まず困りました。
net ads join -U [AD の管理者ユーザー]
でADが見えないと。
いろいろ確認すると /etc/resolved.conf に書いたADのIPが消えていたので追記しました。
その後無事ADに参加できました。
wbinfo -u
も結果が得ってきました。
色々その他設定を行い、でもまた手詰まり。確認のために
wbinfo -u
を行うも返ってこず。
確認したところ
/etc/resolved.conf に書いたADのIPがまた消えていました。
2.DNS(AD Server)の設定について
サーバーなのでIP固定としており
/etc/netplan/00-installer-config.yaml
に
nameservers:
addresses: [192.168.1.1]
search: []
という形でしてDNS(AD Server)は記載しています。基本はこれだけで良さそうなものですが、Winbindには足りない様子。
調べてみるとUbuntu 17.04以降は /etc/resolved.conf ではなく、systemd-resolvedとのことで
/etc/systemd/resolved.conf
書き換え
sudo systemctl restart systemd-resolved.service
とsystemd-resolved 再起動しました。
でもADに聞きに行ってくれません。
またresolved.confにADのIPを列記。でも再起動してまた消える。
消えるのでWinbindが動いてくれない。
結局
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo /etc/resolved.conf /etc/resolved.conf.bak
sudo vi /etc/resolved.conf
と、つまり自作することで解決としました。
systemd-resolvedには何やらバグがあるとの情報もありましたが、Winbindに/etc/resolved.confを直接見に行くみたいな仕組みがあり今のバージョンと非互換になっているか、その辺かなぁとも。
とてもハマったので、この悪戦苦闘を記載したく、本記事を書かせてもらっているようなものです。
3.ログイン後
無事にADのユーザーでUbuntuにログインも出来、SambaもADユーザーで共有フォルダを見に行くことが出来、valid userにてアクセス制御も出来ました。
設定の中で
winbind use default domain = true
を有効にするか向こうにするかは少し考えました。
valid userを指定するときに
valid users = "DOMAIN\YYYYXXXX","DOMAIN\ZZZZAAAA","DOMAIN\BBBBCCCC"
とすればアクセス制御も効いたのでよかったのですが、やっぱり
valid users = "YYYYXXXX","ZZZZAAAA","BBBBCCCC"
としたの方がシンプルなのと、ADユーザーでログインして使うことにしたので、操作の時にユーザー名のところにいちいちドメインが表示されるのが煩わしかったので結局
winbind use default domain = true
と有効化することにしました。
4.ADユーザーでsudo
sudoを使えないと困るので
Active Directoryドメインに参加させたCentOS8で、Domain Admins所属ユーザーにsudoを許可する
こちらを参考にさせて頂きました。こちらはCentOSでされているとのこと。
そのままだとUbuntuでは使えませんでした。
Ubuntuでは以下でした。
%domain\ admins ALL=(ALL) ALL
%domain\ user ALL=(ALL) ALL
こちらで無事にsudo出来るようになりました。
ここまででやっと素地が出来ました。この上に機械学習環境を構築していくことになります。