LinuC 202「Sambaの設定と管理」を見てSambaサーバ(CentOS7)-Sambaクライアント(Mac OSX)間でファイル共有

LinuC 202「2.11.1 Sambaの設定と管理」を見て、Sambaサーバ(CentOS7)-Sambaクライアント(Mac OSX)間でファイル共有をしてみた。
(以降、Microsoftネットワーク云々の話があるけど、全くWindows端末が登場しなかったりする)

## この記事のアジェンダ
- Microsoftネットワークの基本概念について
- ファイル共有できるようにsmb.confをカスタマイズ
- Sambaのユーティリティを紹介

## Microsoftネットワークの基本概念

図で説明したほうがよさそうだけど、ひとまずテキストで説明。

+ ワークグループ
   - コンピュータを一括りにまとめる単位

+ マスターブラウザ
   - ワークグループ内のホストを管理するホスト
   - セグメント上に１台存在する

+ ドメイン
   - NTドメイン
      - Windows NTで利用されるユーザ管理の仕組み
      - ホストをドメイン単位でグループ化
      - DNSのドメインとは別物なので注意
   - ADドメイン
      - Windows 2000 Server以降で採用されているディレクトリサービス
      - NTドメインと異なりツリーで大規模なドメインを管理できる

+ ドメインコントローラ (認証サーバ)
   - ドメイン内のユーザにログオン認証を提供
   - ドメインにログオンすれば共有リソースに認証なしでアクセスできるようになる

+ NetBIOS
   - MicrosoftネットワークのAPI
   - ホストにNetBIOS名を割り当て、識別する

+ WINS
   - NetBIOSをTCP/IP上で使えるようにするためにNetBIOS over TCP/IPという仕組みがある
   - NetBIOS over TCP/IPでIPとNetBIOS名の名前解決をする時に使う
   - WINS: WIndows Internet Naming Service

## ファイル共有できるようにsmb.confをカスタマイズ
Sambaは次の3つのプロセスが連携している。

- smbd ファイル共有、認証
- nmbd ブラウジング、NetBIOS名前解決、WINSサーバ
- winbindd Winbind機能

＊windinddは必須ではないっぽい

設定は `/etc/samba/smb.conf` ファイルで行う。
smb.confは [global]セクション, [homes]セクション, [printers]セクション, 自作セクションで構成されている。
以下、1つずつ詳細を見ていく。なお、今回はプリンタ共有の話([printers]セクション)は省略。

### [global]セクション
Sambaの全体設定を行うパート

ひとまずファイル共有したい場合は次のように設定する。


```/etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server role = AUTO
server string = SAMBA SERVER Version %v
netbios name = buzz
security = user
passdb backend = tdbsam
dos charset = CP932
wins support = yes
# printing = cups
# printcap name = cups
load printers = no
disable spoolss = yes
# cups options = raw
```

workgroup = WORKGROUP    # Sambaサーバが所属するワークグループ名
server role = AUTO    # 動作モード (AUTOでsecurityパラメータに従った動作になる)
server string = SAMBA SERVER Version %v    # サーバの説明
netbios name = buzz    # NetBIOS名
security = user    # 認証方法 (Sambaユーザのアカウントとパスワードで認証)
passdb backend = tdbsam    # バイナリ形式のデータベースにユーザ情報を格納
dos charset = CP932
wins support = yes    # WINSサーバとして動作させる
load printers = no
disable spoolss = yes

＊ securityパラメータの補足
ドメインコントローラ認証の場合 `security = DOMAIN` と設定する
ADドメインにkerberos認証を行う場合 `security = ADS` と設定する


### [homes]セクション
UNIXユーザのホームディレクトリ共有設定を行うパート

```/etc/samba/smb.conf
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
```

comment = Home Directories
valid users = %S, %D%w%S    # アクセス可能なユーザを指定
browseable = No    # ブラウジングした時に表示されるか? YesでもNoでも共有名を直指定するとアクセスはできる
read only = No     # 書き込みを許可するか? (Noなら書き込み許可)
inherit acls = Yes

### 自作セクション
任意の自作セクションを設定するパート
今回の例では[Share]という自作セクションを設定した

```/etc/samba/smb.conf
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
```

comment = Share Folder for All Users
path = /home/share/    # 共有ディレクトリパス
browsable = yes    # ブラウジングした時に表示されるか?
read only = no    # 書き込みを許可するか?

## Sambaのユーティリティを紹介
設定チェック、Sambaユーザ管理、Linux用Sambaクライアントなどユーティリティを紹介。

### testparm 設定チェック
   - オプション
      - -s 構文チェック後にEnterを押さずにsmb.confを表示
      - -v デフォルトパラメータも表示

```
# testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

# Global parameters
[global]
       disable spoolss = Yes
       dos charset = CP932
       load printers = No
       security = USER
       server string = SAMBA SERVER Version %v
       wins support = Yes
       idmap config * : backend = tdb


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


[Share]
       comment = Share Folder for All Users
       path = /home/share/
       read only = No
```

### pdbedit Sambaユーザ管理
    - Samba 3.0以降で対応している
    - オプション
       - -L Sambaユーザ一覧表示
       - -a Sambaユーザ追加
       - -x Sambaユーザ削除

- Sambaユーザ一覧表示 (-Lオプション)

```
# pdbedit -L
samba-paper:10001:samba paper
```

・Sambaユーザ追加 (-aオプション)

```
# pdbedit -a -u samba-paper -f "samba paper"
new password:
retype new password:
Unix username:        samba-paper
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-3964642020-3879586777-578649929-1001
Primary Group SID:    S-1-5-21-3964642020-3879586777-578649929-513
Full Name:            samba paper
Home Directory:       \\fs\samba-paper
HomeDir Drive:
Logon Script:
Profile Path:         \\fs\samba-paper\profile
Domain:               FS
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          Thu, 07 Feb 2036 00:06:39 JST
Kickoff time:         Thu, 07 Feb 2036 00:06:39 JST
Password last set:    Thu, 13 Aug 2020 17:23:43 JST
Password can change:  Thu, 13 Aug 2020 17:23:43 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
```

**注意点**
- 追加しようとしているSambaユーザがUNIXユーザ上に存在していることが前提条件
- Windowsがパスワード暗号化で使用するアルゴリズムとLinuxが使用するアルゴリズムが異なるため、
  /etc/passwd, /etc/shadowを利用した認証ができない

```
# pdbedit -a -u samba-buzz -f "samba buzz"
new password:
retype new password:
Failed to add entry for user samba-buzz.

# grep samba-buzz /etc/passwd
#
```

UNIXユーザ上にsamba-buzzが存在しないため、pdbeditコマンドで新規ユーザ追加しようとしてもエラーになる

・Sambaユーザの削除

```
# pdbedit -x samba-buzz
```

### smbpasswd Sambaユーザのパスワード変更
   - オプション
      - -d Sambaユーザを無効化
      - -e Sambaユーザを有効化
      - -x Sambaユーザを削除

・Sambaユーザのパスワード変更

```
# smbpasswd samba-buzz
New SMB password:
Retype new SMB password:
```

### nmblookup NetBIOS名の問い合わせ
   - DNS名前解決で使う dig, nslookup では名前解決のテストができない

- ホストが存在するかの確認

```
# nmblookup buzz
xxx.xxx.xxx.xxx buzz<00>
```

buzzというホストが名前解決できるよう。

- WORKGROUP内のホストを検索

```
# nmblookup WORKGROUP
xxx.xxx.xxx.xxx WORKGROUP<00>
```

### smbclient Linux用Sambaクライアント
   - LinuxがMicrosoftネットワークの共有リソースにアクセスするためのユーティリティ
   - オプション
     - -L リスト表示
     - -N 認証を行わない
     - -U <ユーザ> 接続するユーザを指定

- 共有リソース//buzz/shareにsamba-paperユーザでアクセス

````
# smbclient //buzz/share -U samba-paper
Enter WORKGROUP\samba-paper's password:
Try "help" to get a list of possible commands.
smb: \> pwd
Current directory is \\buzz\share\
smb: \> ls
  .                                   D        0  Fri Aug 14 11:20:40 2020
  ..                                  D        0  Thu Aug 13 17:22:46 2020
  hello.txt                           N       14  Fri Aug 14 11:20:40 2020

                21110356 blocks of size 1024. 16698572 blocks available
```


- Anonymousで認証せずリスト表示

```
# smbclient -L buzz -N
Anonymous login successful

      Sharename       Type      Comment
      ---------       ----      -------
      Share           Disk      Share Folder for All Users
      IPC$            IPC       IPC Service (SAMBA SERVER Version 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

      Server               Comment
      ---------            -------

      Workgroup            Master
      ---------            -------
      WORKGROUP            BUZZ
```

### Sambaクライアント(Mac OSX)からSambaサーバへアクセス

[移動] -> [サーバへ接続]して、以下のようにsmbプロトコルを利用してSambaにアクセスする。

smb://xxx.xxx.xxx.xxx