AWSでのファイル共有サービスはマネージドでFSx for WindowsやEFSがありますがマネージドゆえの制限もあります。ちょっとしたファイルサーバ欲しいけどEC2のWindowsインスタンスはお高いという場合にお安いLinux系のファイルサーバはいかがでしょうか?ということで需要の有無は微妙な気がしますがAmazonLinux2023でファイルサーバ構築を構築して、AD連携させ管理する環境を構築します。
今回のゴール
具体的にやりたいことはLinux上の共有ディレクトリだけどADでアクセス権管理(Windowsっぽく)設定できるようにすることです。
こんな感じでWindowsでのファイルサーバ管理っぽくLinuxファイルサーバ(上の図のAL2023)のアクセス権も管理したいと思います。
前提
・ ADはWindows Server 2019で構築
・ ファイルサーバはAmazonLinux2023(AL2023)を利用
・ ファイルサーバ機能はSamba利用(インストールはAWS指定リポジトリより)
・ ドメイン参加はsssdを利用し、ADとのフォルダアクセス権認証連携はwinbindを利用
構築内容
① ADサーバ(EC2:Windows)とファイルサーバ(EC2:AL2023)のデプロイ
② ファイルサーバの環境設定
③ ファイルサーバのドメイン参加
④ ファイルサーバへのSambaインストール、共有ディレクトリ設定
⑤ WbindでADとのフォルダアクセス権認証連携
実際の手順
①ADサーバ(EC2:Windows)とファイルサーバ(EC2:AL2023)のデプロイ
こちらに関してはVPCの作成、EC2がメインとなり、他に詳細な記事がありますので割愛します。EC2のドメイン参加に必要なDNSサーバの設定について、AWS環境は少しクセがあります。色々とやり方はあると思いますが今回は一番簡単だと思うVPCのDHCPオプションを利用してDNSを配布しました。
②ファイルサーバの環境設定
EC2がデプロイできたところで以下手順でAL2023の環境を整えていきます。
#アップデート
dnf -y update
#日本語化
localectl set-locale LANG=ja_JP.UTF-8
#タイムゾーンを日本時間に設定
timedatectl set-timezone Asia/Tokyo
#サーバホスト名を設定
hostnamectl set-hostname samba-server
#SELinuxを無効化
vim /etc/selinux/config
SELINUX="permissive"を"disabled"に変更
#再起動
reboot
③ファイルサーバのドメイン参加
ドメイン参加させるためにはWindowsクライアントと同様にDNSがADサーバに向いている必要があります。
#DNS設定の確認
cat /etc/resolv.conf
以下のように記載されていることを確認
nameserver 10.0.0.XXX(ADサーバのIPアドレス)
search XXX.internal(参加予定のドメイン)
次に必要なパッケージをインストールしていきます。
#パッケージインストール
dnf -y install realmd
dnf -y install sssd adcli samba-common-tools
dnf -y install krb5-workstation
dnf -y install oddjob oddjob-mkhomedir
ドメイン参加前にドメインの情報が取得できるか確認します。
#realm discover"ドメイン名"で情報を取得
realm discover XXX.internal
以下のように表示されていればOK
type: kerberos(←kerberosとなっていること)
realm-name: XXX.INTERNAL(←ドメイン名となっていること
domain-name: XXX.internal(←ドメイン名となっていること
configured: no
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common-tools
取得できることが確認できたところで、ドメイン参加します。
#ドメイン参加
realm join -U administrator@XXXX.INTERNAL xxx.internal --verbose
※administrator@XXX.INTRENALの部分の@以降は大文字
以下表示がでればOK
* Successfully enrolled machine in realm
これでドメイン参加まではできたので、AD側でもファイルサーバのコンピュータオブジェクトが追加されています。
ファイルサーバ側でもドメインユーザ情報が取得できるか確認します。
# ドメインのadministratorの情報が取得できるか確認
id administrator@XXX.internal
以下のように表示が出ればOK
uid=xxxxxxx gid=xxxxx
ついでにドメインユーザでSSHログインできるようにするしておきましょう。
# ドメインのadministratorでSSHできるように設定追加
sudo visudo
以下追記
administrator@XXX.internal ALL=(ALL) ALL
④ ファイルサーバへのSambaインストール、共有ディレクトリ設定
まずファイルサーバ機能のSambaをインストールします。
# sambaインストール
dnf -y install samba
# サービスを起動
systemctl start smb nmb
# 次回サーバ起動時にサービスを自動起動
systemctl enable smb nmb
次にSambaで/home下にshareというとディレクトを作成し、共有する設定になるように設定コンフィグに追記していきます。。
vim /etc/samba/smb.conf
以下を記述
[share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
これだけだと設定コンフィグに記載しただけで、実際に/home/share/ディレクトはできていないのでディレクトリを作成します。
# ディレクトリ作成
mkdir /home/share
# 権限と所有者の設定変更
chmod -R 777 /home/share
chown -R nobody:nobody /home/share
追記が終わったら反映のためサービスを再起動しましょう。
# Sambaサービスを再起動
systemctl restart smb nmb
これで共有フォルダができました。
⑤ WbindでADとのフォルダアクセス権認証連携
ここから共有フォルダのアクセス権をADで設定できるように認証連携をする設定をしていきます。
# 認証連携に必要なパッケージをインストール
yum -y install samba-winbind
# サービス起動および再起動後に自動起動の設定
systemctl start winbind.service
systemctl enable winbind.service
次にSambaの設定コンフィグで認証にADを利用するように設定を記載
# Samba設定コンフィグを修正
vim /etc/samba/smb.conf
[global]セクションの以下部分を編集
[global]
workgroup = XXX(ドメインのNETBIOS)
security = ads
realm = XXX.INTERNAL
次にケルベロス認証で該当ドメインのドメインコントローラーと認証できるように設定コンフィグを修正
# ケルベロス設定コンフィグを修正
vim /etc/krb5.conf
以下のように該当セクションを修正
[realms]
XXX.INTERNAL = {
kdc = kerberos.xxx.internal
admin_server = kerberos.xxx.internal
}
[domain_realm]
.xxx.internal = XXX.INTERNAL
xxx.internal = XXX.INTERNAL
設定を反映させるためサービス再起動します。
systemctl restart sssd
systemctl restart winbind
systemctl restart smb nmb
これで認証連携ができているはずなので、ドメインのadministratorでケルベロス認証のチケットが取得できるか確認しましょう。
#ケルベロス認証のチケット確認
kinit administrator@XXX.INTERNAL
※@以降は大文字
正常に設定できていれば所属OUの情報などが出力されると思います。
ではSambaでのドメイン連携していきます。
#ドメイン連携
net ads join -U administrator
以下は表示されても無視でOK
Using short domain name -- XXX
Joined 'SAMBA-SERVER' to dns domain 'xxx.internal'
No DNS domain configured for samba-server. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
※上記エラーが出ないように/etc/hostsファイルなど色々変更してみましたがどうしても出てしまう...
本当にちゃんとドメイン参加できているか確認します。
#ドメイン参加確認
net ads testjoin
以下表示が出ることを確認
”Join is OK”
またファイルサーバ側かもドメインコントローラーの情報が取れていることを確認します。
# 必要なツールのインストール
dnf install -y samba-winbind-clients
# ドメインコントローラーに登録されているユーザ情報の取得
wbinfo -u
ドメインコントローラに登録されているユーザ情報が以下のように表示されることを確認
XXX\administrator
XXX\guest
これでSamba上の共有ディレクトリのフォルダを右クリックして、「セキュリティ」タブからADのユーザを選択して、権限を付与することができるようなっています。
注意点
・「realm join」コマンドや「kinit」コマンドでユーザIDを入力するときに@以降を小文字で入力するとエラーになります。
・ファイルサーバ側に作成した共有ディレクト(今回は/home/share)はWindowsでいうと「フォルダ」ではなく、「共有」となります。「共有」のアクセス権はファイルサーバ側=Samba側で設定となるので、あくまでADでアクセス権管理できる「フォルダ」は一階層下の部分(今回だと/home/share/test)からになります。
おわりに
意外とこの手の記事って検索しても出ないですが需要的にはどうなんでしょうか?小規模環境ならNASを購入した方が安いような気もしますが...
早くインフラ構築できて、コードも書けるつよつよSEになりたい。AWS BootCamp頑張りましょう。
参考にしたサイト