SambaでLinuxとWindowsとの間でファイル共有

#Sambaでファイル共有

Samba（サンバ）を使うことでLinuxマシンとの間で，Windowsのワークグループと同様にファイル共有ができます．

### 動作確認済み環境

|Ubuntu||
|:--:|:--:|
| OS | Ubuntu 16.04|
|kernel| 4.15 |

|Raspbian（Raspberry Pi 3B+)||
|:--:|:--:|
|OS|Raspbian Buster Lite|
|kernel|4.19.97-v7+|

# Sambaサーバ構築手順

## Sanbaインストール

```
$ sudo apt-get install -y samba
```

![samba1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215782/8867b211-570d-2340-d0bc-dc5dcbccc77b.png)

インストール中，「（要約）IPの割り振り方がDHCPの場合，ネットワーク内にあるWINSサーバの情報を的供できます．DHCP から WINS 設定を使うよう smb.conf を変更しますか?」という選択画面が表示されます．
私の場合，マシンを扱う環境でWINSサーバの運用は行っていないことから，`No`を選択しました．

#### （特定ユーザーのみアクセスを許可したい場合）Sambaユーザーを登録

**ゲストに対して全員にディレクトリへのアクセスを許可する場合．ユーザー登録は必要ありません．**
Sambaでは，独自の認証情報を元にアクセスの許可が可能です．
`pdbedit`によってSambaで認証するためのユーザを，マシンのユーザとは別に新たに登録できます．

```
$ sudo pdbedit -a "username"
```

登録の際，パスワードの設定も要求されるのでパスワードを設定します．

```
new password:
retype new password:
```

## 共有するディレクトリの設定

ここでは，/mnt/shareを共有ディレクトリとします．

```
$ sudo mkdir /mnt/share
$ sudo chmod 0777 /mnt/share
```

`shmod`コマンドはファイル，ディレクトリのアクセス権限を変更するコマンドです．
アクセス権限は読み込み(r)，書き込み(w)，実行(x)の三区分で設定されます．
`0777`と指定した場合，全てのユーザーに全てのアクセス権限を許可されます．

### Windowsのワークグループ名を確認

LAN内のWindowsマシンで設定しているワークグループ名が必要です．
ワークグループ名の確認，設定は
`コントロールパネル->システムとセキュリティ->システム->コンピュータ名、ドメインおよびワークグループの設定`の項目で確認できます．

### /etc/samba/smb.confを編集

以下のコマンドで`smb.conf`を開き，編集します．
エディタは，本記事では例としてVimを使用します．

```
$ sudo vi /etc/samba/smb.conf
```

まず，24行目如何に

```
dos charset = CP932
unix charset = UTF-8
```
を追記します．

```shell-session:smb.conf
 21 
 22　#======================= Global Settings =======================
 23 
 24 [global]
 25 dos charset = CP932
 26 unix charset = UTF-8
 27 
```

次に，31行目の**workgroup**に，先ほど調べたWindowsマシンのWORKSTATIONの名前を書き込みます．

```shell-session:smb.conf
 28 ## Browsing/Identification ###
 29
 30 # Change this to the workgroup/NT-domain name your Samba server will part of
 31    workgroup = <your work group name>
 32
```

38行目以降の**Networking**の項目は，セキュリティの観点から接続元のIPアドレスを制限したいときに編集します．

```shell-session:smb.conf
 35 #### Networking ####
 34 
 35 # The specific set of interfaces / networks to bind to
 36 # This can be either the interface name or an IP address/netmask;
 37 # interface names are normally preferred
 38    interfaces = 127.0.0.0/8 eth0
 39
 40 # Only bind to the named interfaces and/or networks; you must use the
 41 # 'interfaces' option above to use this.
 42 # It is recommended that you enable this feature if your Samba machine is
 43 # not protected by a firewall or is a firewall itself.  However, this
 44 # option cannot handle dynamic or non-broadcast interfaces correctly.
 45     bind interfaces only = yes
 46     map to guest = Bad User
 47
```

ファイルの最後に以下を追記します．

```shell-session:smb.conf
239 [share]
240    path = /mnt/share
241    writable = yes
242    guest ok = yes
243    guest only = yes
244    create mode = 0777
245    directory mode = 0777
```

**[share]**には，共有する際のディレクトリ名（Windowsから見える名前）を設定します．
例えば，共有ディレクトリ名をDIRとしたい場合，[DIR]とします．
**path**には共有するディレクトリのパスを記入します．

### Sambaの実行テスト

`testparm`コマンドを使うと，`smb.conf`に誤りがないか構文チェックをしてくれます．
logファイルの関係でWARNINGが出る可能性がありますが，
`Loaded services file OK.`と出れば問題ありません．

```
$ testparm
```

### Sambaを実行

下記コマンドを実行．

```
$ sudo systemctl restart smbd nmbd
```

起動時に自動的に実行して欲しい場合．

```
$ sudo systemctl enable smbd nmbd
```

## Windowsで共有ファイルにアクセス

エクスプローラーにて『ネットワークドライブの割り当て』からアクセスします．

![sa.PNG](https://qiita-image-store.s3.amazonaws.com/0/215782/141afbb9-8d48-7deb-a0d2-f5b580c08502.png)

『フォルダー』欄に『¥¥SambaサーバのIPアドレス¥先に設定した共有ディレクトリ名』を入力します．

アクセスできた場合，ユーザの認証が要求されるので，アクセス先のマシンのユーザ名とパスワードを，Sambaのユーザを設定している場合はSambaサーバのユーザ名とパスワードを記入します．

![samba2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215782/00fe2126-b722-14d8-0a23-1174cb37958b.png)

### アクセスに成功した場合

ネットワークの場所に共有ディレクトリの項目が表示されます．

# 参考記事

[Ubuntuでファイルサーバーをたてる（Samba）](https://qiita.com/msrks/items/1385cf13258dd1a0da08)

[フルアクセスの共有フォルダ作成](https://www.server-world.info/query?os=Ubuntu_16.04&p=samba)

[raspberry pi : sambaのインストール](https://qazsedcftf.blogspot.com/2019/12/raspberry-pi-samba.html)