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

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

##Sambaの基礎知識
Sambaの基礎知識に関しては、以下サイトが分かりやすかったです。
[Sambaの基本を知っておこう](https://www.atmarkit.co.jp/ait/articles/1612/01/news183.html)

##前提
・AWS EC2インスタンス2台(※１)（OSは**Amazon Linux 2**、及び**Microsoft Windows Server 2019**（※２））が構築済みであること。

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

※２
EC2をWindowsサーバとして構築する手順に関しては以下参考
[リニューアル！Amazon EC2インスタンスを立ちあげてみよう！前編 ~Windows Server編～](https://recipe.kc-cloud.jp/archives/10076)

##利用環境
・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サーバの構築](#1sambaサーバの構築) |
| 2 | [WinsowsマシンからSamba共有フォルダへアクセス](#2winsowsマシンからsamba共有フォルダへアクセス)|
| 3 | [Sambaのクライアント機能(LinuxマシンからWindows共有フォルダへのアクセス)](#3sambaのクライアント機能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の追加**を実施しました。
コメントが記載されているパラメータが更新、もしくは追加を行った箇所となります。

```bash: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対応](https://www.shoeisha.co.jp/book/detail/9784798151250)より）

| サーバプロセス | 提供する機能 |
|:-----------|------------|
| 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編～](https://recipe.kc-cloud.jp/archives/10097)

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

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

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

![Capture.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/d225aa57-2c41-2109-410d-c49c6a8f35a0.png)

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

![Capture.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/3b2a0ce8-2e76-2f98-b2e7-60dd2ceef52b.png)

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

**①Windows共有フォルダの作成**
Windows serverマシン側のC直下に`windows_share`という検証共有フォルダを作成します。
![Capture.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/9fac38a9-6c83-e656-70cd-ef80cd70c091.png)

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

![Capture.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/c519b918-32a4-9f16-0549-170758d11ec3.png)

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

![Capture.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647616/36a78fdb-ae0d-2fa5-9d41-5624847527b5.png)

**②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です！

```bash
[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対応](https://www.shoeisha.co.jp/book/detail/9784798151250)
・参考サイト
[EC2にSambaを構築してWindowsからファイル共有してみた](https://recipe.kc-cloud.jp/archives/10873)