10.2. Sambaサーバの構築

10.2.1. Sambaサーバ

SambaはWindowsネットワークで使用されるSMB/CIFSプロトコルを利用してWindowsでのファイル共有の仕組みを提供するOSSソフトウェアのこと。
機能としてはファイル共有のほかに、プリンタ共有、認証機能も提供する。

提供できる機能は以下の通り。

  • ファイルサーバ機能
  • プリントサーバ機能
  • WINSサーバ機能
  • ドメインコントローラ
  • ActiveDirectoryメンバーサーバ
  • Microsoftネットワーククライアント

Sambaにてサーバ機能を提供するデーモンはsmbdnmbとなる。
smbdはファイルやプリンタの共有、ユーザの認証、nmbdはブラウズ機能、NetBIOSによる名前解決を提供する。

Sambaのバージョン

Samba3とSamba4の主な違いを以下に記載する。

機能Samba3Samba4
ドメインコントローラ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/UDPNetBIOS名前解決やブラウジングに使用
138/UDPNetBIOS名前解決やドメインログオンに使用
139/TCPファイル共有(Microsoft Direct Hosting SMBを利用していない場合)
445/TCPファイル共有(Microsoft Direct Hosting SMBを利用している場合)

Sambaの起動方法はSystemdのシステムでは以下の通り。

systemctl start smb.client
systemctl start nmb.service

SysVinitを採用したシステムでは以下の通り。

/etc/init.d/smb start

10.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 | No

Sambaサーバを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ユーザ名
オプション説明
-LSambaユーザ一覧表示
-aSambaユーザ追加
-xSambaユーザ削除

smbpasswdコマンド

Sambaユーザのパスワード変更を行うコマンド。

smbpasswd [オプション] [Sambaユーザ名]
オプション説明
-dSambaユーザの無効化
-eSambaユーザの有効化
-xSambaユーザの削除

10.2.6. Sambaの管理コマンド

smbstatusコマンド

Sambaサーバに接続されているクライアント、使用中の共有、ロックされているファイルを確認できるコマンド。

smbstatus

nmblookupコマンド

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ファイルリストの表示
exitsmbclientの終了
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/public

smbcontrolコマンド

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 <サブコマンド>
サブコマンド説明
dnsDNS管理
domainドメイン管理
testparm設定ファイルの構文チェック
userユーザ管理