【Samba】Linux⇔Windowsマシン間相互のファイル共有


目標

Sambaサーバ及びSambaクライアントを利用して、Linuxマシン⇔Windowsマシン間相互でのファイル共有を実現する。

Sambaの基礎知識

Sambaの基礎知識に関しては、以下サイトが分かりやすかったです。
Sambaの基本を知っておこう

前提

・AWS EC2インスタンス2台(※1)(OSはAmazon Linux 2、及びMicrosoft Windows Server 2019(※2))が構築済みであること。

※1
上記EC2インスタンス双方において、Sambaで利用する以下のポート(本記事ではファイル共有のみしか実施しないため厳密には139番ポート、445番ポートのみ使用となります。)をセキュリティグループ上で空けておく(Linux教科書 LPICレベル2 Version4.5対応より)。
UDP 137番ポート:NetBIOS名前解決やブラウジング
UDP 138番ポート:NetBIOS名前解決やドメインログオン
TCP 139番ポート:ファイル共有(下記のMicrosoft Direct Hosting SMBを利用していない場合)
TCP 445番ポート:ファイル共有(Windows2000以降のマシンでMicrosoft Direct Hosting SMBを利用している場合)

※2
EC2をWindowsサーバとして構築する手順に関しては以下参考
リニューアル!Amazon EC2インスタンスを立ちあげてみよう!前編 ~Windows Server編~

利用環境

・Linuxマシン
仮想マシン: AWS EC2
OS(AMI): Amazon Linux 2 AMI (HVM), SSD Volume Type
ミドルウェア: Samba(Version 4.10.16)

・Windows Serverマシン
仮想マシン: AWS EC2
OS(AMI): Microsoft Windows Server 2019 Base

作業の流れ

項番 タイトル
1 Sambaサーバの構築
2 WinsowsマシンからSamba共有フォルダへアクセス
3 Sambaのクライアント機能(LinuxマシンからWindows共有フォルダへのアクセス)

手順

1.Sambaサーバの構築

①必要パッケージのインストール
事前作成したEC2のLinux側のマシンにOSログインし、ルートスイッチ及びパッケージのアップデートを実行

sudo su -
yum -y update

Sambaをインストールをします。

yum -y install samba

②Sambaユーザの設定
Linux側及びSamba側にSambaユーザを追加します。
まずはLinux側にSambaユーザ(今回がtestsambaとした)を登録

useradd testsamba
passwd testsamba

続いてpdbeditコマンドを利用して、Samba側にtestsambaユーザを登録(※)します。

pdbedit -a testsamba

Sambaユーザの一覧を確認します。

[root@ip-172-31-36-198 ~]# pdbedit -L
testsamba:1001:

③共有フォルダの作成
Sambaを利用して共有させるフォルダを作成します。
先ほど作成したtestsambaユーザにスイッチ後、共有フォルダとして/tmp/testsambaを作成します。
また共有テスト用のファイルもついでに作成します。

su - testsamba
mkdir /tmp/testsamba
touch /tmp/testsamba/sharetest

作成後、ルートユーザに戻ります。

exit

④Samba設定ファイル編集
Sambaの設定ファイル/etc/samba/smb.confを編集を行います。

vi /etc/samba/smb.conf

今回は認証時のパスワード暗号化プリンタ共有の無効化共有セクションtestsambaの追加を実施しました。
コメントが記載されているパラメータが更新、もしくは追加を行った箇所となります。

smb.conf
[global]
        # ワークグループ名はwindowsマシンと同一にしておく(標準はWORKGROUP)
        workgroup = WORKGROUP
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups

        # プリンタ共有を無効化
        load printers = no

        cups options = raw

        # パスワードの暗号化を有効化
        encrypt passwords = yes

[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

# 共有セクション追加
[testsamba]
        comment = testshare
        path = /tmp/testsamba
        writable = yes

⑤Samba起動
Sambaを構成するプロセスsmbd及びnmbd(※)の起動→自動起動→ステータス確認を行います。
ステータス確認で状態がrunningであればOKです。

※Sambaを構成するサーバプロセス(Linux教科書 LPICレベル2 Version4.5対応より)

サーバプロセス 提供する機能
smbd ファイル共有、認証など
nmbd ブラウジング機能、NetBIOS名前検索、WINSサーバなど
winbindd WInbind機能
systemctl start smb
systemctl start nmb
systemctl enable smb
systemctl enable nmb
systemctl status smb
systemctl status nmb

2.WinsowsマシンからSamba共有フォルダへアクセス

①Windows serverマシンへのアクセス
事前作成したEC2のWindows serverマシン側へローカルマシンからRDPを利用してアクセス(※)します。
※参考手順
リニューアル!Amazon EC2インスタンスを立ちあげてみよう!後編 ~Windows Server編~

②共有フォルダへのアクセス
Windows serverマシン上のエクスプローラを起動し、Sambaの共有フォルダへアクセスをかけます。
アクセスする際の接続文字列が以下の形式となります。

\\SambaサーバのプライベートIPアドレス\testsamba

正常に接続されれば以下のように認証が求められるので、以下のように入力
User name: testsamba
Password: testsambaのパスワード(pdbedit実行時に入力したパスワード)

認証がOKな場合、Sambaサーバの共有フォルダ/tmp/testsamba内に作成したテストファイルsharetestが表示される想定です。

3.Sambaのクライアント機能(LinuxマシンからWindows共有フォルダへのアクセス)

今度は逆にLinuxマシンからWindows共有フォルダへSambaのクライアント機能を利用したアクセスを試してみます。

①Windows共有フォルダの作成
Windows serverマシン側のC直下にwindows_shareという検証共有フォルダを作成します。

上記共有フォルダを右クリックし、Give access toSpesific peopleとクリック
共有許可する対象を選ぶコンソール移動するので、以下のようにEveryoneRead/Write権限を付与しShareをクリックします。

作成した共有フォルダwindows_share内にテストファイルwindows_sharetestを作成します。

②Sambaクライアントを利用してWindows共有フォルダへアクセス
Linux側マシンからSambaクライアントを利用して先ほど作成したWindows server側の共有フォルダへアクセスをしてみます。
まずはSambaクライアントのインストール

yum -y install samba-client

smbclientコマンドを利用してアクセスします。
-Uオプションを利用してWindows Server側の管理ユーザであるAdministratorユーザとしてアクセスする必要があります。

smbclient -U Administrator //WindowsマシンのプライベートIPアドレス/windows_share

パスワード入力後、正常に認証されればsmbコンソールに移動するのでlsで共有フォルダ内のファイルを確認、
事前作成したwindows_sharetest.txtが確認できればOKです!

[root@ip-172-31-36-198 ~]# smbclient -U Administrator //172.31.40.93/windows_share
# Administratorのパスワードを入力(RDPでアクセスした際に利用したパスワード)
Enter SAMBA\Administrator's password:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Nov  4 08:14:44 2020
  ..                                  D        0  Wed Nov  4 08:14:44 2020
  windows_sharetest.txt               A        0  Wed Nov  4 08:14:33 2020

                7863807 blocks of size 4096. 4238018 blocks available
smb: \>

参考にさせて頂いた書籍及びサイト

・参考書籍
Linux教科書 LPICレベル2 Version4.5対応
・参考サイト
EC2にSambaを構築してWindowsからファイル共有してみた