Sambaを使ったAWS上でのファイル共有システム構築ガイド

AWS,Linux

smb-handsonアイキャッチ画像
ブログ運営者
さいとう

閲覧いただきありがとうございます!"さいとう"と申します。わたしは異業種・未経験からIT業界に転職し、現在インフラエンジニアとしてクラウド環境の設計や構築・運用の支援を行っています。


「本気で学ぶ Linux実践入門 サーバ運用のための業務レベル管理術」を読んでいる中で、ファイル共有に強い興味を持ちました。特にSambaサーバの魅力に惹かれ、AWSクラウド環境にSambaサーバを構築してみようと考えました。実務では、ファイル共有の機能はよく利用していますが、ファイル共有サーバそのものの構築は経験がありません。


今回の記事では、Amazon Linux 2023のEC2インスタンスを利用して、Sambaサーバを構築する方法を紹介します。さらに、構築したSambaサーバにWindows OSクライアントから接続し、実際にファイルを共有する手順も詳しく解説します。初めての試みとなるこのプロジェクトを通じて、Sambaサーバの基本的な設定や操作方法を学び、AWS環境でのファイル共有の実践的な知識を身につけることができればと思います。


Sambaサーバを利用することで、異なるOS間でのファイル共有がスムーズに行えるようになります。これは、異なるシステムが混在する環境で特に有効です。AWSクラウドを活用することで、柔軟かつスケーラブルなファイル共有システムを構築できる点も魅力的です。


この記事を通じて、Sambaサーバの基本的な構築手順を理解し、AWS環境での実際の運用に役立てていただければ幸いです。これからSambaサーバの設定に挑戦する方や、AWSでの新たなプロジェクトを検討している方にとって、有益な情報となることを願っています。

↓【PR】Linuxの実践力をつけるために日々お世話になっています。


SambaサーバをEC2インスタンスで構築

Sambdaとは

Sambaは、WindowsとLinux/Unix間でファイルとプリンターの共有を可能にするソフトウェアスイートです。Sambaは、Linux/UnixサーバーがWindowsクライアントに対してファイル共有サービスを提供するために使用され、ネットワーク上の異なるオペレーティングシステム間の相互運用性を向上させます。

Sambaの主な機能

Sambaの主な機能は以下の通りです。

  • ファイル共有
    Windowsネットワーク共有と互換性のあるファイル共有サービスを提供します。Linux/Unixサーバー上のディレクトリやファイルをWindowsクライアントからアクセス可能にします。
  • プリンター共有
    Linux/Unixサーバーに接続されたプリンターをWindowsクライアントから使用可能にします。
  • ユーザー認証とセキュリティ
    ユーザー認証、アクセス制御、暗号化などのセキュリティ機能を提供します。Active Directoryと統合することもできます。
  • ドメインコントローラー
    プライマリドメインコントローラー (PDC) として機能し、Windowsドメインネットワークを管理できます。
  • バックアップとリカバリ
    ネットワーク経由でのバックアップとリカバリをサポートします。

Sambaのメリット

Sambaのメリットは以下の通りです。

  • 異種OS間の相互運用性
    Sambaは、Linux/UnixサーバーとWindowsクライアントの間でファイルやプリンターの共有を可能にする主要な技術です。これにより、異なるオペレーティングシステム間でシームレスなファイル共有が実現します。
  • コスト効率
    Sambaはオープンソースソフトウェアであり、ライセンス料が不要です。中小企業や教育機関など、コストを重視する環境で広く利用されています。
  • 豊富な機能
    Sambaはファイル共有やプリンター共有だけでなく、Active Directoryの互換機能やドメインコントローラー機能など、多くの高度な機能を提供します。

具体的なユースケース

Sambaのユースケースは以下の通りです。

  • ファイルサーバー
    企業や教育機関では、Sambaを利用してファイルサーバーを構築し、従業員や学生が簡単にファイルを共有できるようにしています。
  • プリントサーバー
    Sambaを使ってLinuxサーバー上のプリンターを共有し、Windowsクライアントから印刷できるようにするケースも一般的です。
  • バックアップサーバー
    Sambaを利用してネットワーク上の異なるデバイスからバックアップデータを収集し、集中管理するバックアップサーバーとして使用されます。
  • Active Directoryの代替
    小規模な環境では、Sambaを使ってActive Directoryの機能を提供し、ユーザー認証やアクセス制御を行うことができます。
  • 開発環境
    開発者がWindowsとLinux間でファイルを簡単に共有できるように、開発環境でSambaを使用することがあります。

ハンズオン

Sambaを理解するために、簡単なハンズオンをやってみましょう。
今回構築する全体像は以下の図です。

smb-handson構築図


準備

Sambaサーバの構築はAWSクラウドを利用します。使用するサービスは以下の通りで、()内に必要な情報を記載しています。

  • EC2インスタンス(Amazon Linux 2023) 1台
  • EC2インスタンス(Windows Server 2022) 1台
  • VPC(10.0.0.0/16) 1つ
  • パブリックサブネット(10.0.1.0/24) 1つ
  • セキュリティグループ(インバウンドルール: MyIP/32, 10.0.0.0/16, Type: ALL)
  • キーペア
  • インターネットゲートウェイ


手順

Sambaサーバを構築していきます。[準備]で書いたAWSリソースは作成済み前提で構築していきます。まずはSambaサーバをLinuxOSのEC2インスタンス上に構築しましょう。

●Linux: Sambaインストール

まずはAmazonLinux2023AMIを利用して作成したEC2インスタンスに接続し、次のコマンドでパッケージをインストールします。

sudo dnf install samba samba-client


【実行結果】

[ec2-user@ip-10-0-1-124 ~]$ sudo dnf install samba samba-client
Last metadata expiration check: 0:06:43 ago on Sat Jun 29 02:39:40 2024.
Dependencies resolved.
=============================================================================================================================================
 Package                                Architecture           Version                                     Repository                   Size
=============================================================================================================================================
Installing:
 samba                                  x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 950 k 
 samba-client                           x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 673 k 
Installing dependencies:
 avahi-libs                             x86_64                 0.8-14.amzn2023.0.12                        amazonlinux                  68 k 
 cups-libs                              x86_64                 1:2.3.3op2-18.amzn2023.0.7                  amazonlinux                 265 k 
 libicu                                 x86_64                 67.1-7.amzn2023.0.3                         amazonlinux                 9.6 M 
 libnetapi                              x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 149 k 
 libsmbclient                           x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                  80 k 
 libwbclient                            x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                  47 k 
 samba-client-libs                      x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 5.0 M 
 samba-common                           noarch                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 153 k 
 samba-common-libs                      x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 106 k 
 samba-common-tools                     x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 464 k 
 samba-dcerpc                           x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 691 k 
 samba-ldb-ldap-modules                 x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                  33 k 
 samba-libs                             x86_64                 2:4.17.12-1.amzn2023.0.1                    amazonlinux                 127 k 

Transaction Summary
=============================================================================================================================================
Install  15 Packages
<省略>
Installed:
  avahi-libs-0.8-14.amzn2023.0.12.x86_64                             cups-libs-1:2.3.3op2-18.amzn2023.0.7.x86_64
  libicu-67.1-7.amzn2023.0.3.x86_64                                  libnetapi-2:4.17.12-1.amzn2023.0.1.x86_64
  libsmbclient-2:4.17.12-1.amzn2023.0.1.x86_64                       libwbclient-2:4.17.12-1.amzn2023.0.1.x86_64
  samba-2:4.17.12-1.amzn2023.0.1.x86_64                              samba-client-2:4.17.12-1.amzn2023.0.1.x86_64
  samba-client-libs-2:4.17.12-1.amzn2023.0.1.x86_64                  samba-common-2:4.17.12-1.amzn2023.0.1.noarch
  samba-common-libs-2:4.17.12-1.amzn2023.0.1.x86_64                  samba-common-tools-2:4.17.12-1.amzn2023.0.1.x86_64
  samba-dcerpc-2:4.17.12-1.amzn2023.0.1.x86_64                       samba-ldb-ldap-modules-2:4.17.12-1.amzn2023.0.1.x86_64
  samba-libs-2:4.17.12-1.amzn2023.0.1.x86_64

Complete!


●Linux: 接続用ユーザー作成

続いて、クライアントがファイルサーバに接続する用のユーザを作成します。ユーザがなくてもパーミッション設定で次第で接続も可能です。

sudo adduser smbuser
sudo smbpasswd -a smbuser


【実行結果】

[ec2-user@ip-10-0-1-124 ~]$ sudo smbpasswd -a smbuser
New SMB password:
Retype new SMB password:
Added user smbuser.


●Linux: Samba設定ファイルの編集

次にSambaサーバーの動作を定義する設定ファイルを編集します。[shared]セクションを新たに設け、特定の共有ディレクトリの設定を記述しています。

sudo vi /etc/samba/smb.conf


【追記内容】

[shared]
   path = /srv/samba/shared
   browsable = yes
   writable = yes
   guest ok = no
   valid users = smbuser


【実行結果】

[ec2-user@ip-10-0-1-124 ~]$ sudo smbpasswd -a smbuser
New SMB password:
Retype new SMB password:
Added user smbuser.
[ec2-user@ip-10-0-1-124 ~]$ sudo vi /etc/samba/smb.conf
[ec2-user@ip-10-0-1-124 ~]$ cat /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
#
# Note:
# SMB1 is disabled by default. This means clients without support for SMB2 or
# SMB3 are no longer able to connect to smbd (by default).

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

        # Install samba-usershares package for support
        include = /etc/samba/usershares.conf

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes

[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775

[shared]
   path = /srv/samba/shared
   browsable = yes
   writable = yes
   guest ok = no
   valid users = smbuser


●Linux: Samba共有フォルダーの作成とアクセス権の設定

ファイル共有するためのフォルダの作成と、フォルダ・ディレクトリのアクセス権を設定します。まずはフォルダを作成しましょう。

sudo mkdir -p /srv/samba/shared


【作成確認】

[ec2-user@ip-10-0-1-124 ~]$ ls /srv/samba/
shared


続いて、アクセス権を設定します。

sudo chown -R smbuser:smbuser /srv/samba/shared
sudo chmod -R 0775 /srv/samba/shared


【実行結果】

[ec2-user@ip-10-0-1-124 ~]$ sudo mkdir -p /srv/samba/shared
[ec2-user@ip-10-0-1-124 ~]$ sudo chown -R smbuser:smbuser /srv/samba/shared
[ec2-user@ip-10-0-1-124 ~]$ sudo chmod -R 0775 /srv/samba/shared

[ec2-user@ip-10-0-1-124 ~]$ ls -l /srv/samba/
total 0
drwxrwxr-x. 2 smbuser smbuser 6 Jun 29 02:47 shared


●Linux: Sambaサービスの起動と有効化

最後にSambaサービスを起動し、自動起動を有効化します。また、Sambaスイートの一部であるNetBIOSネームサーバーのサービスである"nmb"も同じく起動します。"nmb"デーモンは、ネットワーク上のNetBIOS名の解決を担当します。

sudo systemctl start smb
sudo systemctl enable smb
sudo systemctl start nmb
sudo systemctl enable nmb


【実行結果】

[ec2-user@ip-10-0-1-124 ~]$ sudo systemctl start smb
[ec2-user@ip-10-0-1-124 ~]$ sudo systemctl enable smb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
[ec2-user@ip-10-0-1-124 ~]$ sudo systemctl start nmb
[ec2-user@ip-10-0-1-124 ~]$ sudo systemctl enable nmb
Created symlink /etc/systemd/system/multi-user.target.wants/nmb.service → /usr/lib/systemd/system/nmb.service.


念のため、statusを確認しましょう。

systemctl status smb
systemctl status nmb


【実行結果】

[ec2-user@ip-10-0-1-124 ~]$ systemctl status smb
● smb.service - Samba SMB Daemon
     Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; preset: disabled)
     Active: active (running) since Sat 2024-06-29 02:48:02 UTC; 3min 19s ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 25909 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 3 (limit: 9247)
     Memory: 5.5M
        CPU: 50ms
     CGroup: /system.slice/smb.service
             ├─25909 /usr/sbin/smbd --foreground --no-process-group
             ├─25911 /usr/sbin/smbd --foreground --no-process-group
             └─25912 /usr/sbin/smbd --foreground --no-process-group

Jun 29 02:48:02 ip-10-0-1-124.ap-southeast-1.compute.internal systemd[1]: Starting smb.service - Samba SMB Daemon...
Jun 29 02:48:02 ip-10-0-1-124.ap-southeast-1.compute.internal smbd[25909]: [2024/06/29 02:48:02.703112,  0] ../../source3/smbd/server.c:1741>
Jun 29 02:48:02 ip-10-0-1-124.ap-southeast-1.compute.internal smbd[25909]:   smbd version 4.17.12 started.
Jun 29 02:48:02 ip-10-0-1-124.ap-southeast-1.compute.internal smbd[25909]:   Copyright Andrew Tridgell and the Samba Team 1992-2022
Jun 29 02:48:02 ip-10-0-1-124.ap-southeast-1.compute.internal systemd[1]: Started smb.service - Samba SMB Daemon.

[ec2-user@ip-10-0-1-124 ~]$ systemctl status nmb
● nmb.service - Samba NMB Daemon
     Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled; preset: disabled)
     Active: active (running) since Sat 2024-06-29 02:48:09 UTC; 3min 26s ago
       Docs: man:nmbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 25946 (nmbd)
     Status: "nmbd: ready to serve connections..."
      Tasks: 1 (limit: 9247)
     Memory: 2.7M
        CPU: 36ms
     CGroup: /system.slice/nmb.service
             └─25946 /usr/sbin/nmbd --foreground --no-process-group

Jun 29 02:48:09 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]: [2024/06/29 02:48:09.844172,  0] ../../source3/nmbd/nmbd.c:901(ma>
Jun 29 02:48:09 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]:   nmbd version 4.17.12 started.
Jun 29 02:48:09 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]:   Copyright Andrew Tridgell and the Samba Team 1992-2022
Jun 29 02:48:09 ip-10-0-1-124.ap-southeast-1.compute.internal systemd[1]: Started nmb.service - Samba NMB Daemon.
Jun 29 02:48:32 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]: [2024/06/29 02:48:32.872906,  0] ../../source3/nmbd/nmbd_become_l>
Jun 29 02:48:32 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]:   *****
Jun 29 02:48:32 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]:
Jun 29 02:48:32 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]:   Samba name server IP-10-0-1-124 is now a local master browser f>
Jun 29 02:48:32 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]:
Jun 29 02:48:32 ip-10-0-1-124.ap-southeast-1.compute.internal nmbd[25946]:   *****


●Linux: ネットワークの確認

さいごにSambaをインストールしたEC2インスタンスのIPを確認しておきます。

hostname -I


【実行結果】

[ec2-user@ip-10-0-1-124 ~]$ hostname -I
10.0.1.124


Sambaサーバ側の設定は以上です。

●Windows: RDP接続

クライアント側の設定をしていきます。まずは用意したWindows ServerにRDP接続しましょう。AWSで作成したWindows ServerへのRDP接続は最初戸惑う方もいるかと思います。ステップバイステップでみていきましょう。


↓まずはAMIを確認してください。

smb-handsonAMI-windows


↓作成したクライアントインスタンスにチェックを入れ、[接続]をクリックします。

smb-handson接続


↓[リモートデスクトップファイルのダウンロード]をクリックします。

smb-handsonRDP


↓[プライベートキーファイルのアップロード]をクリックし、インスタンス起動時に利用したキーペアを選択します。

smb-handson-key-upload


↓[パスワードを複合化]をクリックします。

smb-handson-password-decrypted


↓[パスワード]欄にパスワードが表示されますので、メモなどにコピペしましょう。

smb-handson-password


↓ダウンロードされたrdpファイルをダブルクリックします。

smb-handson-rdp2


↓[接続]をクリックします。

smb-handson-rdp-connect


↓コピペしたパスワードを[パスワード]欄に入力し、[OK]をクリックします。

smb-handson-input-password


↓[はい]をクリックします。

smb-handson-rdp-yes


↓デスクトップ画面が表示されたら、接続成功です。

smb-handson-windows-desktop


↓[エクスプローラ]を開きましょう

smb-handson-explore


↓エクスプローラのパス欄に以下を入力します。

\\<SambaサーバのIPアドレス>\shared


smb-handson-filepath


↓接続や設定が問題なければ、認証情報入力画面が表示されます。Sambaサーバ構築時に作成したユーザ名とパスワードを入力してください。

smb-handson-input-fileserver-password


↓入力が完了したら、[OK]をクリックします。

smb-handson-ok


↓認証が成功したら、Sambaサーバで作成した[shared]フォルダにアクセスできるようになります。

smb-handson-connect-fileserver



すべての設定は以上です。

動作確認

Sambaサーバの動作確認をします。Windowsクライアントでフォルダを作成し、Sambaサーバで作成されたことを確認してみましょう。


↓Windowsクライアントで[shared]配下に新しいフォルダを作成します。フォルダ名は任意で設定してください。

testdir
smb-handson-create-new-folder



smb-handson-create-testdir


↓Sambaサーバで共有ディレクトリを見てみます。

smb-handson-linux-command



[testdir]ディレクトリが確認できました。


↓[testdir]ディレクトリにSambaサーバ側で[sample.txt]ファイルを作成してみます。

smb-handson-linux-create-file


↓Windowsクライアントでファイルがあるか見てみましょう。

smb-handson-exact-file



ファイルが確認できました。今回のハンズオンは以上です。

まとめ

プロジェクトに参画すると、ファイル共有システムは当たり前のように利用されていますが、ほとんどの場合、既に用意されているシステムをそのまま使うことが多いです。しかし、インフラエンジニアとしては、ファイル共有システムの仕組みや構築方法を理解していることが重要です。今回、私はSambaサーバを構築してみることで、これについて学びました。

SambaはLinuxとWindowsという異なるOS間でファイル共有を実現するためのツールで、多くの現場で今もなお広く使われています。このような異なるシステム間でのファイル共有をスムーズに行える点がSambaの強みです。また、ファイル共有システムに何か障害が発生したとき、Sambaの基礎知識や構築経験があるかどうかで、問題解決のスピードと効率に大きな差が出るはずです。


今回のハンズオンを通じて、Amazon Linux 2023のEC2インスタンス上にSambaサーバを構築し、Windows OSクライアントから接続してファイル共有を確認する方法を学びました。これにより、Sambaの基本的な設定や操作方法を身につけることができました。インフラエンジニアとしてのスキルセットを広げるために、実際に手を動かして学ぶことの重要性を改めて感じました。


ぜひこの記事を参考にして、Sambaサーバの構築に挑戦してみてください。実際に自分で構築してみることで、ファイル共有システムの理解が深まり、現場での対応力も向上するはずです。これからも学び続け、より良いインフラ環境を構築していくための一助となることを願っています。

参考リンク: Samba公式


↓【PR】Linuxの実践力をつけるために日々お世話になっています。