samba纏め

# サーバープロセス

|サーバープロセス|説明|
|---|---|
|smbd|ファイル共有、認証など|
|nmbd|ブラウジング機能、NetBIOS名前解決、WINSサーバーなど|
|winbindd|Winbind機能|

# ポート番号

|ポート番号|説明|
|---|---|
|137/UDP|NetBIOS名前解決やブラウジング|
|138/UDP|NetBIOS名前解決やドメインログオン|
|139/TCP|ファイル共有|
|445/TCP|ファイル共有|

# smb.conf

## globalセクション

- Samba全体に関わる設定を行います
- 変更をした場合、Sambaの再起動が必要です
- globalセクションで設定した項目が、以降のセクションで現れた場合は、設定が上書きされます

|パラメータ|説明|
|---|---|
|workgroup|Sambaサーバーが、所属するワークグループ名もしくはドメイン名を指定します。|
|server role|Sambaサーバーの動作モードを指定します。|
|netbios name|SambaサーバーのNetBIOS名を指定する。|
|server string|サーバの名前など説明を記述する。|
|hosts allow|接続を許可すホストを指定する。（指定しなかったホストは拒否される。）|
|guest account|アカウントが存在しないユーザーにGuestとしてアクセスする場合に利用する。|
|map to guest|Sambaユーザーとして認証できなかった場合の動作を指定する。<br>**Never** : ゲスト認証を許可しない。<br>**Bad User** : 存在しないユーザーを指定された場合は、ゲスト認証であるとみなし、guest accountで定義されたユーザーでログインする。<br>**Bad Passwor** : 上記に加えて、パスワード入力ミスの場合もゲスト認証であるとみなす。|
|log file|ログファイルを指定する。接続元ホストを示す変数「%m」を使うと、接続元ホストごとにログファイルを分ける|
|max log size|ログファイルの最大サイズを指定する。値が0の場合は、制限は行われない。|
|encrypt passwords|暗号化パスワードを利用する。この値はYes以外利用するべきではない。|
|smb passwd file|パスワード認証をsmbpasswd方式で行う場合のパスワードファイルを指定する。|
|unix password sync|SambaのパスワードとLinuxのパスワードを同期させるか。Sambaのパスワードが変更されたら、Linuxのパスワードも変更する。|
|passwd program|unix password syncを有効にした場合、Samba側でパスワードを変更した際に実行するプログラム。|
|passwd chat|unix password syncを有効にした場の応答内容。|
|username map|UNIXユーザーを別のユーザーとマッピングさせ、複数のユーザーで共有したりする。|
|logon script|ログオン時に実行するスクリプトファイルを指定する。|
|wins support|WINSサーバーとして動作させる。|
|wins server|WINSサーバーのIPアドレスを指定する。|
|null passwords|空のパスワードの使用を禁止|

## 共有

|パラメータ|説明|
|---|---|
|comment|コメントを指定。|
|browseable|ブラウジングした時に表示されるかどうかを指定する。ただし、共有名を直接指定するとアクセスすることができます。|
|writable|書き込みを許可するかどうかを指定する。|
|read only|writableの逆の意味。|
|write list|書き込みが例外的に許可されるユーザーを指定します。グループを指定する時は、＠|
|path|共有ディレクトリのパスを指定する。|
|force user|共有内に作成するファイルやディレクトリの所有者、所有グループを、強制的に指定したユーザーにします。|
|force group|共有内に作成するファイルやディレクトリの所有者、所有グループを、強制的に指定したグループにします。|
|hide dot files|隠し属性を適用するかどうか。|
|hide files|ファイルやディレクトリを表示させたくない場合、その名前を指定する。但し、アクセスはできる。|
|veto files|表示もアクセスもさせたくないファイルやディレクトリを指定する。|
|create mask|ファイルに適用可能なパーミッション　0744|
|directory mask|ディレクトリに適用可能なパーミッション 0755|
|force create mask|必ずファイルに適用されるパーミッション 0000|
|force directory mask|必ずディレクトリに適用されるパーミッション　0000|
|valid users|アクセス可能なユーザーを指定する。グループを指定する時は、＠|
|guest ok|guestログインを許可するかどうかそ指定する。|
|public|guestログインを許可するかどうかそ指定する。|

## homes

- UNIXユーザーの各ホームディレクトリを一括して共有するためのセクション
- ユーザーごとに、ホームディレクトリの共有を定義す必要がありません

```smb.conf
[homes]
 comment = Home Directiry
 browseable = No
 writable = Yes
```

## printers

|パラメータ|説明|
|---|---|
|print ok|プリンタ共有として利用する。|
|printable|プリンタ共有として利用する。|

```smb.conf
[printers]
 comment = ALL printers
 path = /var/spool/samba
 browseable = no
 guest ok = no
 writable = no
 printable = Yes
```

※[print$]
windowsが、プリンタドライバの自動ダウンロードを行う際の共有名を指定する特殊なセクションです。
windows側でプリンタドライバがない場合、[print$]セクションからドライバを検索するようになっています。

## 個々

- 任意の名前の共有を作成することができます

```smb.conf
[public]
 comment = Public
 path = /home/samba/piblic
 public = Yes
 writable = No
 writa list = @memmber
```

```smb.conf
[tmp]
 comment = tmp
 path = /tmp
 read only = no
 public = Yes
```

```smb.conf
[secret$]
 path = /var/samba/secret
 valid users = @super
```

# testparm

- smb.conf の構文にミスがないかチェックを行う

# ログ

- Sambaは、syslogを介さずに独自にログを処理します
- /var/log/sambaディレクトリ以下などに、いくつかのファイルに分かれて出される

# マスターブラウザの設定

- ワークグループ単位と、ドメイン単位で存在します
- どのホストがマスターブラウザになるかは、OSの種類による優先度に基づいて選出される
- samba自身をドメインコントローラにする場合、33以上にすれば優先的に選出される

|パラメータ|説明|
|---|---|
|local master|ローカルマスターブラウザのブラウザ選出に参加する（選出されるとは限らない）|
|domain master|ドメインマスターブラウザに選出されるようになる。|
|preferred master|ブラウザ選定を促す。|
|os level|優先度|

# 認証の設定

## security

- クライアントがどのようにSambaに応答するかを指定する

|security|説明|
|---|---|
|user|ユーザー名とパスワードでローカル認証を行う（デフォルト）|
|share|パスワードだけで認証を行う|
|domain|ドメインコントローラにより認証を行う|
|server|他のSMBサーバにより認証を行う|
|ads|ADドメインのドメインコントーローラで認証を行う|

※「security = share」 の設定は、「guest ok = yes」の設定とともに使用することで、全ユーザーがゲストアカウントにより、パスワードなしでプリンタを共有する時によく使われる。

## sambdユーザー管理

### smbpasswd

- Samba2で利用されていた方式でテキスト形式のパスワードファイル(/etc/samba/smbpasswd)にユーザー情報を１ユーザー１行で格納します
- Samba3系の一部でもデフォルトのバックエンドデータベースですが、Sambaで扱えるユーザー項目の一部しか格納できません

```smb.conf
passdb backend = smbpasswd
```

### tdbsam

- バイナリ形式のデータベースファイル（/etc/samba/passdb.tdb）にユーザー情報を格納します
- Sambaで扱えるユーザー情報の全項目を格納できます

```smb.conf
passdb backend = tdbsam:/etc/samba/passdb.tdb
```

### ldapsam

- LDAPサーバーにユーザー情報を格納します
- 別途LDAPサーバーが必要ですが、多数のユーザーを扱う場合に適しています

```smb.conf
passdb backend = ldapsam:ldap://LDAPサーバー名[:ポート番号]
```

### pdbedit

|オプション|説明|
|---|---|
|-L|一覧表示|
|-a|追加|
|-x|削除|

### smbpasswd

|オプション|説明|
|---|---|
|-d|無効化|
|-e|有効化|
|-x|削除|

# 管理コマンド

|コマンド|説明|
|---|---|
|smbcontrol|Sambaサーバーを構成するそれぞれのデーモンにメッセージを送って制御する。|
|smbstatus|Sambaサーバーに接続されているクライアント、使用中の共有、ロックされているファイルを共有する。|
|nmblookup|NetBIOS名を問い合わせたり、NetBIOS名からIPアドレスを検索する。|

# Sambaクライアント(smbclient)

|オプション|説明|
|---|---|
|-L|リスト表示を要求する|
|-N|認証を行わない|
|-U|接続あするユーザーを指定する|

|サブコマンド|説明|
|---|---|
|cd|移動|
|del|削除|

|サブコマンド|説明|
|---|---|
|dir|リスト表示|
|exit|終了|
|get|取得|
|mget|纏めて取得|
|mkdir|ディレクトリ作成|
|mput|纏めて転送|
|lcd|ローカル側のディレクトリを移動|
|put|転送|
|mdir|ディレクトリを削除|

# ACL

```smb.conf
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes =yes
```

## getfacl

- ACLエントリを表示する

|ACLエントリ|説明|
|---|---|
|user|所有者①|
|group|所有グループ②|
|other|その他のユーザー③|
|user:USER|ユーザーUSER④|
|group:GROUP|グループGROUP⑤|
|mask|マスク値、②④⑤に適用|

※mask:誤って大きなアクセス権を与えてしまうことを防いだり、一時的に所有者以外のアクセス権を制限したりすることができる。
（#ehhective; と表示される。）

## setfacl

- ACLを設定する

|オプション|説明|
|---|---|
|-m|追加、もしくは変更する。|
|-x|削除する。|
|--remove-all|すべて削除する。|

# リンク
[Amazon EC2(Amazon linux)のファイルサーバ構築](https://qiita.com/u-bayashi/items/77e0ae1bdb4efa193b23)
[Amazon Linux 2でSambaを構築する](https://dev.classmethod.jp/articles/amazonlinux2-samba/)