LoginSignup
1
2

AWSでのファイル共有サービスはマネージドでFSx for WindowsやEFSがありますがマネージドゆえの制限もあります。ちょっとしたファイルサーバ欲しいけどEC2のWindowsインスタンスはお高いという場合にお安いLinux系のファイルサーバはいかがでしょうか?ということで需要の有無は微妙な気がしますがAmazonLinux2023でファイルサーバ構築を構築して、AD連携させ管理する環境を構築します。

今回のゴール

AWSの環境を図にするとこんな感じです。
AD連携.png

具体的にやりたいことはLinux上の共有ディレクトリだけどADでアクセス権管理(Windowsっぽく)設定できるようにすることです。

スライド1.PNG

こんな感じで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を配布しました。

DHCP オプションセットの作成

②ファイルサーバの環境設定

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頑張りましょう。

参考にしたサイト

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2