10.2. Sambaサーバの構築
10.2.1. Sambaサーバ
SambaはWindowsネットワークで使用されるSMB/CIFSプロトコルを利用してWindowsでのファイル共有の仕組みを提供するOSSソフトウェアのこと。
機能としてはファイル共有のほかに、プリンタ共有、認証機能も提供する。
提供できる機能は以下の通り。
- ファイルサーバ機能
- プリントサーバ機能
- WINSサーバ機能
- ドメインコントローラ
- ActiveDirectoryメンバーサーバ
- Microsoftネットワーククライアント
Sambaにてサーバ機能を提供するデーモンはsmbdとnmbとなる。
smbdはファイルやプリンタの共有、ユーザの認証、nmbdはブラウズ機能、NetBIOSによる名前解決を提供する。
Sambaのバージョン
Samba3とSamba4の主な違いを以下に記載する。
| 機能 | Samba3 | Samba4 | 
|---|---|---|
| ドメインコントローラ | NTドメインのドメインコントローラ構築ができる(NTMLv2の使用、WINSサーバによる名前解決、LDAP連携の可能) | ADドメインのドメインコントローラ構築ができる(Keroberos認証、DNSによる名前解決、LDAP内蔵) | 
| ファイルサーバ | SMB2に対応 | SMB2,SMB3に対応 | 
10.2.2. Sambaの基本動作
Sambaは以下の3つのプロセスから構成される。
- smbd- ファイル共有、認証
 
- nmbd- ブラウジング機能、NETBIOS名前解決、WINSサーバ
 
- winbindd- Winbind機能
 
またSambaサーバが利用するポートは以下の通り。
| ポート番号 | 説明 | 
|---|---|
| 137/UDP | NetBIOS名前解決やブラウジングに使用 | 
| 138/UDP | NetBIOS名前解決やドメインログオンに使用 | 
| 139/TCP | ファイル共有(Microsoft Direct Hosting SMBを利用していない場合) | 
| 445/TCP | ファイル共有(Microsoft Direct Hosting SMBを利用している場合) | 
Sambaの起動方法はSystemdのシステムでは以下の通り。
systemctl start smb.client
systemctl start nmb.serviceSysVinitを採用したシステムでは以下の通り。
/etc/init.d/smb start10.2.3. smb.conf
Sambaサーバの設定はsmb.confファイルで行う。
smb.confは全体設定、共有定義から構成される。
smb.confの構造は以下の通り。
コメントアウトは#か;で可能。
# 全体設定
[global]
パラメータ名 = 値
# 共有定義
[homes]
パラメータ名 = 値
[printers]
パラメータ名 = 値
[セクション名1]
パラメータ名 = 値
[セクション名2]
パラメータ名 = 値globalセクションの設定
globalセクションではsmaba全体の設定を行う。
なお変更後はsambaの再起動が必要となる。
主要な項目は以下の通り。
# Sambaサーバが所属するワークグループ名もしくはドメイン名を指定する
workgroup = ワークグループ名|ドメイン名
# Sambaサーバの動作モードを指定する
server role = 動作モード
# サーバ動作モード
# AUTO : securityパラメータの設定に従う(デフォルト)
# STANDALONE : スタンドアロンのサーバ
# MEMBER SERVER : ドメインのメンバーサーバ
# CLASSIC PRIMARY DOMAIN CONTROLLER : NTドメインのプライマリーコントローラ(PDC)
# CLASSIC BACKUP DOMAIN CONTROLLER : NTドメインのバックアップドメインコントローラ(BDC)
# ACTIVE DIRECTORY DOMAIN CONTROLLER : Active Domainのドメインコントローラ
# NetBios名の指定
netbios name = NETBios名
# サーバの名前や説明の指定
server string = コメント
# 接続を許可するホストの指定(記載されていないホストは接続拒否)
hosts allow = ホスト
# Guestアカウントの定義(アカウントが存在しないユーザにGuestとしてアクセスさせれる)
guest account = ゲストユーザ名
# Sambaユーザとして認証できない際の動作の指定
map to guest = Never | Bad User | Bad password
# Never: ゲスト認証の否認
# Bad User: 存在しないユーザの指定でゲスト認証とみなす
# Bad Password: Bad Userに加えてパスワード入力ミスの場合もゲスト認証とみなす
# ログファイルの指定(「%m」で接続元ホストごとにログを分けれる)
log file = ログファイル名
# ログファイルの最大サイズをKB単位で指定
max log size = サイズ
# ハッシュ値を用いた暗号化パスワードの使用を設定
encrypt passwords = Yes | No
# パスワード認証をsmbpassword方式で行う場合のパスワードファイルの指定
smb password file = パスワードファイルのパス
# SambaのパスワードとLinuxのパスワードを同期させるかの設定
unix password sync = Yes | No
passwd program = パスワードコマンドのパス
passwd chat = 期待させる文字列
# UNIXユーザを別ユーザ名とマッピングさせる
# 「UNIXユーザ名=Windowsマシンのユーザ名」のように記述
username map = マッピングファイル名
# ログオフ時に実行するスクリプトファイルの指定
logon script = スクリプトファイル名
# SambaサーバをWINSサーバとして動作させる場合にYesを設定
wins support = Yes | No
# WINSサーバのIPアドレスをIPアドレスを指定する
wins server = IPアドレス共有の設定
globalセクション以降では個々の共有設定を行う。
主要な項目は以下の通り。
# コメントの指定
comment = コメント
# ブラウジングしたときの表示設定
browseable = Yes | No
# 書き込みの許可設定
writeable = Yes | No
read only = No | Yes
# 共有ディレクトリのパスを指定
path = ディレクトリのパス
# 共有内に作成するファイル/ディレクトリの所有者/グループを強制的に変換
force user = ユーザ名
force group = グループ名
# 書き込みが例外許可されるユーザ/グループの指定
write list = ユーザ名 | @グループ名
# 「.」で始まる名前のファイル/ディレクトリを表示しないように隠し属性の適用の指定
hide dot files = Yes | No
# 任意の名前のファイルやディレクトリを表示させたくない場合に指定。「/」で複数指定可能。
veto files = /ファイル名/
# 共有内にファイルやディレクトリを作成する場合のパーミッション設定
# ファイルに適用可能なパーミッション(Default:0744)
create mask = mode
# ディレクトリに適用可能なパーミッション(Default:0755)
directory mask = mode
# 必ずファイルに適用されるパーミッション(Default:0000)
force create mode = mode
# 必ずディレクトリに適用されるパーミッション(Default:0000)
force directory mode = mode
# アクセス可能ユーザの指定
valid users = ユーザ名
# Guestユーザのログイン許可の指定
guest ok = Yes | No
public = yes | NoSambaサーバをADドメインに参加させる設定
SambaサーバをActive Directoryドメインに参加させる際には以下設定が必要となる。
| 設定項目 | 説明 | 
|---|---|
| workgroup=ADドメインのNetBios名 | ADドメインのNetBIOS名の指定 | 
| realm=レルム名 | ADのドメイン名の指定(FDQNで指定) | 
| security=動作モード | sambaの動作モードの指定(adsと指定) | 
[global]
workgroup = SAMPLE
realm = SAMPLE.LOCAL
security = adsなおレルム名はKerberos認証(ユーザが1つの認証で複数台のサーバへアクセスできるシングルサインオン)が管理する範囲のことを指す。
これはActive Directoryが認証にKerberosを使用することに起因する。
またActive Directoryドメインに参加するにはnet ads joinコマンドを実行する。
net ads join -U ユーザ名homesセクションの設定
homeセクションはUNIXユーザの各ホームディレクトリを一括で共有するためのセクション。
そのため個々のユーザごとにホームディレクトリの共有を定義する必要はない。
printersセクションの設定
printersセクションは共有プリンタに関する設定を行うセクション。
複数プリンタがある場合も1つの設定のみで完結する。
# Yesならばファイル共有ではなくプリンタ共有として扱う
print ok = Yes | No
printable = Yes | No個々の共有設定
共有フォルダ/共有プリンタなどネットワークで共有されるものは共有リソースと呼ばれる。
「globals」「homes」「printers」は予約語となっているが、それ以外は任意に作成可能。
共有名の最後に$をつけるとブラウズしても見えない隠し共有となる。
testparmコマンド
testparmコマンドはsmb.confの構文にミスがないかを調べるもの。
testparm [オプション] [設定ファイル]| オプション | 説明 | 
|---|---|
| -s | 構文チェック後にsmb.confを表示 | 
| -v | デフォルトパラメータの表示 | 
なおSambaはSyslogを介さずにログを処理する。
smbdのログはlog.smbd、nmbdのログはlog.nmbdの保存される。
10.2.4. 設定に関する注意事項
マスターブラウザ
マスターブラウザはワークグループ単位/ドメイン単位で存在し、自動的に選出される。
なおOSレベルという値により算出され、OSレベルが高いほど算出優先度が高くなる。
Sambaサーバに33以上を設定すれば、優先的に選ばれる。
# ローカルマスターブラウザに選出されないようにする
local master = Yes | No
# ローカルマスターブラウザの選出に参加する
domain master = YeS | No
# ブラウザ選定を促す
preferred master = Yes | No | Auto
# OSレベルの設定
os level = 数値認証の設定
認証方法はsecurityで設定を行う。
なおデフォルト値はUSERとなる。
security = USER | DOMAIN | ADS
# USERではsmbpasswdファイルなどを使い認証
# DOMAINではドメインコントローラに認証情報を送り認証(NTLM認証)
# ADSではActive DirectoryドメインにKerberos認証を使いログオフする10.2.5. Sambaユーザの管理
security = USERの場合はUNIXシステムアカウントとは別に、Samba利用者用のユーザアカウントも必要となる。
なお作成には対応するUNIXユーザも必要になる。
Samba4ではユーザ情報が格納されるデータベースとして以下の4種類が使用可能。
またMySQLやPostgreSQLなどもユーザ情報格納に使用可能。
- smbpasswd- Samba2.2系での利用形式
- テキスト形式のパスワード(/etc/samba/smbpasswdなど)に1行つ図保存
- 使用にはpassdb backend = smbpasswdとsmb.confに指定
 
- tdbsam- バイナリ形式でデータベースファイル(/etc/samba/passdb.tdbなど)に保存
- Sambaで使えるユーザ情報の全項目を格納可能
- 使用にはpassdb backend = tdbsam:/etc/samba/passdb.tdbとsmb.confに指定
 
- バイナリ形式でデータベースファイル(
- ldapsam- LDAPサーバにユーザ情報を格納する(LDAPサーバが必要)
- 多数ユーザを扱う場合に向いている手法
- 使用にはpassdb backend = ldapsam:ldap://LDAPサーバ名[:ポート番号]とsmb.confに指定
 
pdbeditコマンド
Samba3.0以降で利用できるユーザ管理コマンド。
pdbedit [オプション] Sambaユーザ名| オプション | 説明 | 
|---|---|
| -L | Sambaユーザ一覧表示 | 
| -a | Sambaユーザ追加 | 
| -x | Sambaユーザ削除 | 
smbpasswdコマンド
Sambaユーザのパスワード変更を行うコマンド。
smbpasswd [オプション] [Sambaユーザ名]| オプション | 説明 | 
|---|---|
| -d | Sambaユーザの無効化 | 
| -e | Sambaユーザの有効化 | 
| -x | Sambaユーザの削除 | 
10.2.6. Sambaの管理コマンド
smbstatusコマンド
Sambaサーバに接続されているクライアント、使用中の共有、ロックされているファイルを確認できるコマンド。
smbstatusnmblookupコマンド
NetBIOS名を問い合わせたり、NetBIOS名からIPアドレスを検索したりできるコマンド。
nmblookup [オプション] NetBIOS名orIPアドレス、ワークグループ名| オプション | 説明 | 
|---|---|
| -A | 引数をIPアドレスとみなす | 
| -M | マスターブラウザの検索 | 
10.2.7. Sambaクライアント
Sambaサーバはサーバ機能のみではなく、LinuxがWindowsネットワーク上の共有リソースにアクセスするためのクライアント機能も提供する。
smbclientコマンド
SambaサーバやWindowsホストにより提供される共有リソースを利用できるコマンド。
smbclient [オプション] 接続先| オプション | 説明 | 
|---|---|
| -L | リスト表示の要求 | 
| -N | 認証を行わない | 
| -U ユーザ名 | 接続ユーザの指定 | 
| サブコマンド | 説明 | 
|---|---|
| cd ディレクトリ | ディレクトリを移動する | 
| del ファイル | ファイルの削除 | 
| dir | ファイルリストの表示 | 
| exit | smbclientの終了 | 
| get ファイル | ファイルの取得 | 
| mget ファイル | 複数ファイルをまとめて取得 | 
| mkdir ディレクトリ | ディレクトリの作成 | 
| mput ファイル | 複数ファイルをまとめてサーバに転送する | 
| lcd ディレクトリ | ローカル側のディレクトリに移動 | 
| put ファイル | ファイルをサーバに転送 | 
| rmdir ディレクトリ | ディレクトリを削除する | 
使用例は以下の通り。
# 共有リソースの一覧表示
smbclient -L 192.168.1.2
# winhostの共有リソースpublicへのアクセス
smbclient //winhost/public
# 共有ディレクトリ/publicを/mnt/publicにマウント
mount -t cifs //winhost/public /mont/publicsmbcontrolコマンド
Sambaの主要なデーモンであるsmbd、nmbd、winbinddにメッセージを送ることができるプログラム。
smbcontrol [対象] [メッセージタイプ]| メッセージタイプ | 説明 | 
|---|---|
| close-share | 指定した共有をClose | 
| reload-config | 指定したデーモンに設定の再読み込みさせる | 
| kill-client-ip | 指定したIPアドレスのクライアントを切断 | 
| ping = 指定した対象にpingし応答が来た対象のPIDを表示 | 
なお/etc/init.d/winbindd restartでもwinbinddに設定ファイルを再読み込みは可能。
samba-toolコマンド
Samba4での管理のメインツールとなるコマンド。
ドメイン(AD等)の管理、DNSの管理の他、セキュリティ関連の操作やユーザー管理等も行える。
samba-tool <サブコマンド>| サブコマンド | 説明 | 
|---|---|
| dns | DNS管理 | 
| domain | ドメイン管理 | 
| testparm | 設定ファイルの構文チェック | 
| user | ユーザ管理 |