1.2. Sambaの設定

1.2.1. ファイルベースの設定の管理

Sambaの主要な設定は、通常 /etc/samba/smb.conf ファイルで行われる。

smb.conf の構造

smb.confはINIファイル形式を採用しており、設定はセクションと**パラメータ(キーと値のペア)**で構成される。
なお、パッケージからインストールした場合は/etc/samba、ソースコードからインストールした場合は/usr/local/samba/etcディレクトリに格納される。

smb.confの構造は以下の通り。 コメントアウトは#;で可能。

# 全体設定
[global]
パラメータ名 = 値

# 共有定義
[homes]
パラメータ名 = 値

[printers]
パラメータ名 = 値

[セクション名1]
パラメータ名 = 値

[セクション名2]
パラメータ名 = 値

なお各セクションの真偽値はyes/true/1,no/false/0が使用できる。

  • [global] セクション:
    • Sambaサーバー全体に適用される全体設定(グローバル設定)。
    • ホスト名、セキュリティモード、ロギングレベル、認証方法など、サーバーの挙動の根幹を定義する。
  • [homes] セクション:
    • 各ユーザのホームディレクトリ
    • ユーザーが自分のホームディレクトリにアクセスするための、特殊なセクション。
    • ログインしたユーザー名に自動的に置き換えられる。
  • ファイル共有セクション([share_name]):
    • ユーザーがアクセスする個々の共有リソース(ディレクトリ、プリンター)を定義する。
    • 例: [data] セクション、[printers] セクションなど。
    • [global] 設定が適用された上で、共有固有のパラメータで上書きされる。

globalセクションの設定

globalセクションではsmaba全体の設定を行う
なお変更後はsambaの再起動が必要となる。

主要な項目は以下の通り。

[global]
    # 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 = ホスト

    # ファイル共有に使用するポート(プロトコル)の優先順位の設定
    smb ports = 445 139 # CIFS優先

    # 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 = サイズ

    # SambaサーバのログをWindowsのイベントビューアから参照する機能
    eventlog list = イベントログ名

    # ハッシュ値を用いた暗号化パスワードの使用を設定
    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アドレス

homesセクションの設定

homeセクションでは各ユーザのホームディレクトリを指定する。

[home]
    browseable = no     # homesをブラウザリストに表示しない
    valid users = %S    # 共有にアクセス可能なユーザを制限

printersセクションの設定

共有プリンタの設定

[printers]
    printable = yes | no # スプールフォルダへの印刷データ書き込み許可設定
    path = スプールディレクトリのパス

共有名セクションの設定

指定した共有に適用される設定(以下例ではshare)を指定する。

[share]
    # コメントの指定
    comment = コメント

    # ブラウジングしたときの表示設定
    browseable = Yes | No

    # 書き込みの許可設定
    writeable = Yes | No
    read only = No | Yes

    # 共有ディレクトリのパスを指定
    path = ディレクトリのパス

    # 読み取り不可能なリソースの設定
    hide unreadable = yes | no

    # 共有内に作成するファイル/ディレクトリの所有者/グループを強制的に変換
    force user = ユーザ名
    force group = グループ名

    # 書き込みが例外許可されるユーザ/グループの指定
    write list = ユーザ名 | @グループ名

    # 「.」で始まる名前のファイル/ディレクトリを表示しないように隠し属性の適用の指定
    hide dot files = Yes | No

    # 任意の名前のファイルやディレクトリを表示させたくない場合に指定。「/」で複数指定可能。
    veto files = /ファイル名/

    # 共有内にファイルやディレクトリを作成する場合のパーミッション設定
    ############ AND演算 ##########################
    # ファイルに適用可能なパーミッション(Default:0744)
    create mask = mode
    # ディレクトリに適用可能なパーミッション(Default:0755)
    directory mask = mode
    ############ OR演算 ###########################
    # 必ずファイルに適用されるパーミッション(Default:0000)
    force create mode = mode
    # 必ずディレクトリに適用されるパーミッション(Default:0000)
    force directory mode = mode
    ###############################################

    # アクセス可能ユーザの指定
    valid users = ユーザ名

    # Guestユーザのログイン許可の指定
    guest ok = Yes | No
    public = yes | No

設定パラメータと変数の管理

smb.conf内では、以下の主要なパラメータや変数が使われる。

パラメータセクション説明
server string[global]サーバーの説明を定義します。Windowsのネットワーク一覧で表示される。
server role[global]Sambaの役割(AD DC、メンバーサーバーなど)を定義
server services[global]サーバーが提供するサービス(smb, nmb, rpcなど)を有効または無効にする
vfs objects共有 / [global]VFS(Virtual File System)モジュールを読み込み、共有に機能を追加する。
例: vfs objects = recycle (ごみ箱機能)
include[global] / 共有別の設定ファイルをインクルード(読み込み)する。複雑な設定を分割管理する際に使用。

また、Samba変数として以下が利用できる。

変数説明
%D現ユーザーが所属するドメイン/ワークグループ名
%LサーバのNetBIOS名
%mクライアントのNetBIOS名
%Uサーバに接続しているユーザ名
%G%Uのプライマリグループ
%Sユーザが接続した共有名
%u共有に接続しているユーザ名
%g%uのプライマリグループ
%H%uのホームディレクトリ

1.2.2. Sambaの設定の正当性チェックとトラブルシュート

Sambaの設定を変更した後、サービスを再起動する前に構文やパラメータの誤りがないかを確認することが必要になる。

testparmコマンド

testparmコマンドは、Sambaの設定ファイル(smb.conf)を解析し、構文エラーやパラメータの誤りがないかを確認するためのコマンド。

testparm [オプション]
オプション説明
-s構文チェック後Enter押さなくてもsmb.conf内容を表示
-v構文チェック後smb.confに記述されていない内容も表示

設定の問題のトラブルシュートとデバッグ

Sambaの設定の問題をデバッグする際は、以下の手順が基本となる。

  1. testparmの実行: まず構文エラーを取り除く。
  2. ログレベルの調整:
    • smb.confの[global]セクションで log level = N を設定し、必要な情報をログに出力させる。
    • 通常、トラブルシュートにはレベル3~10が使用されます。
  3. ログファイルの確認:
    • /var/log/samba/(ディストリビューションによって異なる場合あり)配下のlog.smbdやlog.nmbdファイルを確認し、エラーメッセージや接続試行の詳細を分析する。
  4. smbclientでのテスト:
    • Linux側からsmbclientコマンドを利用して、設定した共有にアクセスできるか、権限が正しく適用されているかを確認する。

1.2.2. Sambaの役割とセキュリティモード

Sambaサーバーの役割

[global]セクションの server role パラメータは、Samba 4においてサーバーの動作モードを定義可能。

  • standalone: スタンドアロンサーバ
    • ユーザー認証を自身の設定ファイル(通常はsmbpasswd)のみで行う
    • ネットワーク上の他のドメインとは独立している
  • member server: ドメインメンバーサーバ
    • 既存のActive Directory (AD) または NT ドメインに参加し、ドメインコントローラー(DC)に認証を委任する
    • ファイル共有を提供するが、認証は行わない
  • classic primary domain controller: NT PDC
    • 廃止されたNT形式のプライマリドメインコントローラーとして機能する。 (Samba 4では非推奨、または機能が限定的)
  • active directory domain controller: AD DC
    • SambaがLinux上でActive Directoryドメインコントローラーとして機能する
    • Kerberos、DNS、LDAPを提供し、Windowsクライアントの認証と管理(グループポリシーなど)を行う

セキュリティモード(security)

security パラメータは、認証の実行方法とパスワード情報の取得先を定義するが、Samba 4で server role = active directory domain controller を使用する場合、このパラメータは無視され、自動的にADモードの認証が適用される。

以下のモードは、主に旧来のSambaやNTドメインモード、あるいはスタンドアロンモードで使用される。

  • share: 共有レベル認証
    • (非推奨・古い) パスワードなしでリソースにアクセスできます。セキュリティレベルは非常に低い
  • user: ユーザレベル認証
    • クライアントが認証情報(ユーザー名とパスワード)を提供する必要がある。
    • 認証はSamba自身で行う (standaloneモードで使用)。
  • domain: ドメイン認証
    • 外部のNTドメインコントローラーに認証を委任する。 (member serverで使用)
  • ads: Active Directory認証
    • 外部のActive Directoryドメインに認証を委任する。
    • SambaをADメンバーサーバーとして動作させる際に最も一般的。

ADドメインコントローラーとして構成する場合の設定例

[global]
    # Samba 4 の AD DC としての役割を定義
    server role = active directory domain controller

    # ドメイン名 (例: EXAMPLE.LOCAL) や NetBIOS 名を設定

    # AD DC モードでは、security パラメータは無視されるか、または ads に設定されるのが一般的
    security = ads

ADのメンバーサーバーとして構成する場合の設定例

[global]
    # 既存の AD ドメインに参加するメンバーサーバーとしての役割を定義
    server role = member server

    # 外部の AD に認証を委任することを明示
    security = ads

    # Kerberos (認証) と Winbind (IDマッピング) の設定が必要
    workgroup = EXAMPLE
    realm = EXAMPLE.LOCAL
    idmap config * : backend = tdb
    idmap config EXAMPLE : backend = ad
    # ... Winbind の詳細設定が続く

1.2.3. レジストリベースの設定とWindows管理ツール

レジストリベースの設定の管理

Sambaは、特にAD DCとして動作する場合、Windowsと同様に設定情報の一部をLDAPディレクトリ内、あるいは内部データベース(TDB)の形式でレジストリとして管理する。

設定バックエンド

smb.confのconfig backendパラメータは、Sambaのグローバル設定や共有設定をどこに保存するかを定義する。

設定値説明
filesmb.confファイルのみを使用。(デフォルト、Samba 3などで一般的)
registoryレジストリ(LDAPまたはTDB)を使用する。Samba AD DCモードでは、多くの設定がこのバックエンド経由で管理される。

レジストリシェア

registry sharesが有効の場合、共有([share_name])の設定自体がレジストリに保存されるようになる。
これにより、WindowsのMMC(Microsoft Management Console)のようなツールから共有設定をリモートで変更できるようになり、Windows環境との互換性が向上する。

Sambaレジストリ構造とデータ型

Samba AD DCが使用するレジストリは、Windowsレジストリに似た階層構造を持つ。
HKLM\Software\Samba\ は、Sambaの各種設定が保存される主要なパスとなる。

  • レジストリデータ型:
    • REG_SZ: 単一の文字列値。
    • REG_MULTI_SZ: 複数の文字列の配列。
    • REG_DWORD: 32ビットの整数値。

Sambaレジストリの管理ユーティリティ

samba-regeditコマンド

Sambaの内部レジストリ(TDBファイルやLDAP)の内容を編集・表示するためのコマンド。

samba-regedit
net registryコマンド

netコマンドのサブコマンドとして、レジストリキーの追加、削除、一覧表示などの操作を行える。

net registory 

Sambaサーバーの設定に利用されるWindowsツール

Samba AD DCとして構成された場合、設定の大部分はWindows標準の管理ツールから行われる。
これらのツールは、LDAPやMS-RPCプロトコルを使ってSambaサーバと通信する。

  • Microsoft RSAT Tools(RSAT)
    • Windows PCにインストールする、リモート管理ツールの総称
    • AD DCとして構成されたSambaを管理するために不可欠
  • Microsoft MMC(MMC)
    • Windowsの管理ツールのコンテナ(入れ物)
    • MMCにスナップインとして管理ツール(ADユーザーとコンピューターなど)を追加して使用
  • Active Directory ユーザーとコンピュータ(Dsa.msc)
    • ユーザー、グループ、コンピューターアカウント、組織単位(OU)などの主要なADオブジェクトの管理ツール
  • Active Directory サイトとサービス(dssit.msc)
    • サイト、サブネット、レプリケーショントポロジーの管理
  • グループポリシの管理(gpmc.msc)
    • グループポリシーオブジェクト (GPO) の作成、編集、リンク
  • Active Directory Service Interfaces Editor(ADSIEdit)
    • ADSI Edit
  • Microsoft LDP(LDP)
    • LDAP接続、LDAPクエリの実行、ディレクトリの参照を直接行うためのツール
    • ADSI EditよりもLDAPプロトコルに特化
  • Microsoft Regedit(Regedit)
    • Windowsクライアントやサーバーのレジストリを操作するツール
    • Sambaの内部レジストリではなく、Windows側の設定に使用される

1.2.4. TLSを利用したSambaのセキュリティ設定

Sambaサービス、特にSamba AD DCファイル共有サービスにおいて、クライアントとの通信やレプリケーション、管理ツールとの通信のセキュリティを確保するためにTLS/SSLを設定することが重要になる。

TLSを利用したSambaの設定

Sambaでは、smb.confのグローバルセクションまたは特定のサービス設定セクションで、TLSを有効化し、証明書関連ファイルを指定する。

パラメータ必須/任意説明
tls-enabled必須TLS/SSLによる暗号化通信を有効にするかどうかを指定する。通常は yes に設定。
tls keyfile必須サーバーの**秘密鍵(Private Key)**ファイルのパスを指定する。この鍵は厳重に保護する必要あり。
tls certfile必須サーバーの**公開鍵証明書(Public Certificate)**ファイルのパスを指定する。これには、サーバー証明書と中間CA証明書が含まれる。
tls cafile任意ルート認証局Root CAおよび中間認証局Intermediate CA)の証明書ファイル(チェーン)のパスを指定する。クライアントがサーバー証明書の正当性を検証するために使用される。
tls dh params file任意DHパラメータファイルのパスを指定する。鍵交換における完全前方秘匿性(PFS)を確保するために推奨。

TLS設定の目的と重要性

TLS設定の目的は以下の通り。

  • 通信の秘匿性:
    • クライアント(Windows管理ツールやファイル共有アクセス)とSambaサーバー間のすべてのデータ転送(認証情報、ファイルデータ、LDAPクエリなど)を暗号化し、盗聴を防ぐ
  • 認証と完全性:
    • クライアントが接続しようとしているSambaサーバーが本物であることを証明し(サーバー認証)、データが転送中に改ざんされていないことを保証する
  • AD DCとしての要件:
    • Active Directoryでは、多くのサービス(LDAPS、RPCなど)がセキュリティのためにTLSを要求する
    • Samba AD DCとして機能する場合、KerberosやLDAP over SSL/TLS (LDAPS) の適切な設定が不可欠

証明書と鍵の準備手順の概要

TLSを設定する前に、以下の手順で証明書と鍵を準備する必要がある。

  1. 秘密鍵の生成: openssl コマンドなどを使用して秘密鍵を生成します。
  2. CSRの生成: 秘密鍵を使用して証明書署名要求(CSR)を生成します。
  3. 証明書の取得: 外部または内部の認証局(CA)にCSRを提出し、サーバー証明書を取得します。
  4. Sambaの設定: 取得した tls keyfiletls certfile のパスを smb.conf に正しく設定します。
  5. サービスの再起動: 設定を反映させるためにSambaサービスを再起動します。

注意点: 証明書ファイルのパーミッションは、Sambaデーモンが読み取り可能であること、かつ秘密鍵が不必要に公開されていないことを保証する必要がある