見出し画像

392.2 Sambaを設定する

主題392:Sambaの基礎
392.2 Sambaを設定する

LinuC300の試験範囲である主題390~397まであるうちの「主題392:Sambaの基礎」から「392.2 Sambaを設定する」についてのまとめ

  • 重要度:4

  • 説明:
    さまざまな目的に応じてSambaデーモンを設定できること。

  • 主要な知識範囲
    - Sambaサーバの設定ファイルの構成に関する知識
    - Samba変数と設定パラメータに関する知識
    - Sambaに関する問題のトラブルシューティングとデバッグを行う

  • 重要なファイル、用語、ユーティリティ:
    - smb.conf
    - smb.confのパラメータ
    - smb.confの変数
    - testparm
    - secrets.tdb


Sambaサーバの設定ファイルの構成に関する知識

~設定ファイル~
Sambaの設定ファイルは「smb.conf」である。
この設定ファイルが置かれているディレクトリはLinuxディストリビューションやインストール方法によって異なる。

  • RockyLinux9.2 で Samba4 を dnf コマンドでインストールする。
    → /etc/samba/smb.conf

  • Ubuntu22.04 で Samba4 を apt コマンドでインストールする。
    → /etc/samba/smb.conf

  • RockyLinux9.2 で Samba3 をソースからインストールする。
    → /usr/local/samba/lib/smb.conf

~セクション~
設定ファイルは、大括弧( [     ] )で囲まれたセクション名で始まり、次のセクションが始まるか設定ファイルの最終行までが一つのセクションとなる。
なかでも [global]、[homes]、[printers] は特殊セクションと呼ばれている。
また、[global]以外は共有リソースとなり、セクション名=共有リソース名として扱われる。
特殊セクション以外は任意のセクション名を定義できる。
セクション名は大文字と小文字を区別しない。 また先頭、 途中、末尾にある空白文字は 無視される。
セクション名がドル( $ )で終わる場合は非表示共有フォルダになるが、パスを直接指定すればアクセスできる。

  • [global]
    グローバルセクション
    Samba全体に影響する設定を定義する。
    各セクションで定義されていない項目の既定値となる。

  • [homes]
    ホームセクション
    ユーザーのホームディレクトリの共有に関する設定を定義する。

  • [printers]
    プリンターセクション
    プリンター共有に関する設定を定義する。

~記述ルール~
設定ファイル全般の記述ルール

  • セミコロン( ; )から始まる行、シャープ( # ) から始まる行はコメント行として無視される。

  • 空白のみの行も無視される。

  • バックスラッシュ( \ ) は次の行まで継続させることができる。

パラメータに関する記述ルール

  • パラメータを指定する行で最初に現れるイコール( = ) はパラメータ名とそのパラメータ値を区切る記号である。

  • イコール( = )前後の空白は無視される。

  • パラメーター名は大文字と小文字を区別しない。

  • パラメーター名の先頭、 途中、末尾にある空白は無視される。

  • パラメーター値の先頭と末尾にある空白文字も無視されるが、パラメーター値の途中にある空白文字はそのまま意味を持つ。

  • パラメータの値は文字列、数値、真偽(yes/no、1/0、true/false)となる。

  • パラメータの値は文字列は引用符で囲む必要はない。

~別名~
歴史的経緯からパラメータ名の文字列は異なるもののその意味は同じになるものがある。

  • 「writeable = yes」と「read only = no」は同じ(反意語)

  • 「browseable」と「browsable」は同じ

  • 「public」と「guest ok」は同じ

  • 「guest only」と「only guest」は同じ  など

~testpram~
設定ファイルの正当性を検証するコマンド。
記述の誤りがあれば警告を出したり、パラメータ値の真偽値については 「Yes/No」に統一して表示したり、「別名」についても統一して表示する機能があるが、Sambaが期待通りに動作することを保証するものではない。

よく使うコマンドオプション
-s | --suppress-prompt
コマンド実行後のユーザーの入力待ちを省略する。

-v | --verbose
smb.confで定義したもの以外のデフォルト値も表示する。

(別記事 Appendix Samba3 設定初期値 参照)
(別記事 Appendix Samba4 設定初期値 参照)

~secret.db~

Sambaが利用するLDAPの管理者パスワードを格納するファイル。
smbpasswdコマンドの-wオプションを用いてPRIVATE_DIR/secrets.tdbファイルに保管する。
ldap admin dn が設定されている必要がある。

★Samba3の場合★

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# testparm -s
                :
[global]
                :
        ldap admin dn = cn=Manager,dc=example,dc=co,dc=jp
                :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbd -b | grep PRIVATE
   PRIVATE_DIR: /usr/local/samba/private
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbpasswd -w password
Setting stored password for "cn=Manager,dc=example,dc=co,dc=jp" in secrets.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private
合計 2
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#
★Samba4の場合★

[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# testparm -s
                :
[global]
        ldap admin dn = cn=Manager,dc=example,dc=co,dc=jp
                :
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# smbd -b | grep PRIVATE
   PRIVATE_DIR: /var/lib/samba/private
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# smbpasswd -w password
Setting stored password for "cn=Manager,dc=example,dc=co,dc=jp" in secrets.tdb
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# ls -l /var/lib/samba/private
合計 2
-rw------- 1 root root 425984  531 22:21 secrets.tdb
[root@rocky9-samba41 ~]#

Samba変数と設定パラメータに関する知識

~samba変数~

  • %U
    セッションのユーザー名
    クライアントが接続時に送信したもので実際に接続したユーザー名と同じであるとは 限らない。

  • %G
    %U のプライマリグループ。

  • %h
    Samba が動作しているマシンの インターネットホスト名。

  • %m
    クライアントマシンの NetBIOS 名。
    smbdが445(CIFS)で待ち受けている場合はNetBIOSを使わないためこの変数は機能しない。

  • %L
    サーバーの NetBIOS 名。
    クライアントが指定したサーバー名に応じて設定を変更することが 可能となる。

  • %M
    クライアントマシンのインターネットホスト名。

  • %R
    プロトコルのネゴシエーションを経て選択された プロトコルレベル。
    CORE、COREPLUS、LANMAN1、LANMAN2、NT1、 SMB2_02、 SMB2_10、 SMB3_00、SMB3_02、SMB3_11 又は SMB2_FF のいずれかの値をとる。

  • %d
    サーバープロセスのプロセス ID。

  • %a
    リモートマシンのアーキテクチャ。

  • %I
    クライアントマシンの IP アドレス。
    Samba 4.0.0以前では、これはIPv4マップIPv6アドレスを 含んでいても良かったが、現在は、IPv4かIPv6アドレスのみ含められる。

  • %J
    クライアントマシンのIPアドレス。 コロン/ドット は下線に変換される。

  • %i
    クライアントが接続してきたサーバーの IP アドレス。
    Samba 4.0.0以前では、これはIPv4マップIPv6アドレスを 含んでいても良かったが、現在は、IPv4かIPv6アドレスのみ含められる。

  • %j
    クライアントが接続したローカルIPアドレス。 コロン/ドット は下線に変換される。

  • %T
    現在の日付と時間。

  • %t
    コロン無しの最小形式(YYYYYmmdd_HHMMSS)による現在の日付と時刻

  • %D
    現ユーザーが所属するドメインかワークグループ名。

  • %w
    Winbind のセパレーター

  • %$(envvar)
    環境変数envvarの値。

  • %S
    現在のサービス名 (存在する場合)。

  • %P
    現在のサービスのトップディレクトリ (存在する場合)。

  • %u
    現在のサービスのユーザー名 (存在する場合)。

  • %g
    %u のプライマリグループ。

  • %H
    %u で指定されたユーザーのホームディレクトリ。

  • %N
    この値は %L と同じである。

~設定パラメータ~
主要なパラメータとその既定値
パラメータ名 = 既定のパラメータ値(記載がなければ既定値なし)

◆ グローバルセクション:[global] ◆

  • allow insecure wide links = no
    wide links や  unix extensions と関連あり。
    (本記事 wide links の解説を参照)

  • bind interfaces only = no
    Sambaサーバーが待ち受けするネットワークインターフェースをinterfacesで指定したインターフェースに制限する。
    この設定が Yes の場合、interface に 127.0.0.1 を記述する必要あり。

  • dos charset = 
    DOS クライアントと通信する際に用いられる文字コードセット
    日本語環境ではCP932(SJIS)を指定する。

  • guest account = nobody
    guest ok = Yes と設定されている場合、Sambaサーバーにアクセスする際に適用されるユーザー名。

  • interfaces =
    Sambaサーバーから通信する際の送信元となるネットワークインターフェースを指定する。

  • map to guest = Never
    Sambaサーバー上にユーザーが存在しなかったりパスワードが不正だった場合など認証ができなかったユーザーをどのように扱うかを定義する。
    Never:拒否する
    Bad User:不正なパスワードでのログインは拒否し、Sambaサーバー上に存在しないユーザーゲストログインとして扱い guest account で指定されたアカウントにマッピングする。
    Bad Password:不正パスワードでのログインは guest account で指定されたアカウントにマッピングする。
    Bad Uid:security = DOMAIN または ADS で構成されている場合のみ意味を持つ。 認証が成功したにも関わらずSambaサーバー上にユーザーが存在しない場合に guest account で指定されたアカウントにマッピングする。

  • max protocol(protocol) = NT1 ※Samba3の場合
    server max protocol(protocol) = SMB3 ※Samba4の場合
    サーバーがサポートする最上位のプロトコルを指定する。
    Samba3:CORE, COREPLUS, LANMAN1, LANMAN2, NT1, SMB2(実験的実装)
    Samba4: LANMAN1, LANMAN2, NT1, SMB2(SMB2_02, SMB2_10), SMB3(SMB3_00, SMB3_02, SMB3_11)  

  • min protocol = CORE ※Samba3の場合
    server min protocol(min protocol) = SMB2_02 ※Samba4の場合
    サーバーがサポートする最低位のプロトコルを指定する。

  • passdb backend = tdbsam
    Sambaユーザーが格納されているデータベースの種類を指定する。
    smbpasswd:平文で保存される古い形式
    tdbsam:Trivial Database(TDB)形式。保存場所は private dir で指定する。
    ldapsam:LDAPサーバーを参照する。

  • private dir = ${prefix}/private
    passdb backend = tdbsam が指定されている場合に、TDBファイル(passdb.tdb)が格納されるディレクトリを指定する。
    smbd -b コマンドで PRIVATE_DIR で確認できる。

  • security = USER
    セキュリティの種類を指定する。
    USER:サービスを利用するのにユーザー認証が必要。
    DOMAIN:NTドメインに参加する場合に使用する。
    ADS:ADドメインに参加する場合に使用する。
    SHARE:(Samba4で廃止)ユーザーごとの認証情報を必要としない。
    SERVER:(Samba4で廃止)他のSMBサーバーに認証を委任する。

  • smb ports = 445 139
    Sambaサーバーの待ち受けポートを指定する。

  • username map =
    Sambaサーバー上のユーザーとクライアントのユーザーの対応を定義するファイル名を指定する。
    ここで指定したファイルには「Sambaユーザー名 = クライアントユーザー名(複数指定可)」 と列挙する。

  • unix charset = UTF-8
    Sambaサーバーで使われている文字コード。

  • unix extensions = Yes
    CIFS の UNIX拡張を利用するかどうかを制御する。
    wide links や allow insecure wide links と関連あり。
    (本記事 wide links の解説を参照)

  • workgroup =
    ワークグループ名。

◆ 通常セクション:[セクション名] ◆

  • browseable(browsable) = Yes
    ブラウザリストに表示させる設定。

  • comment =
    ブラウザリストで表示させる補足情報。

  • create mask(create mode) = 0744
    ファイルを作成する際のパーミッションを決定する要素。
    AND演算をするため、ここで指定した値と一致しないビットは取り除かれる。

  • directory mask(directory mode) = 0755
    ディレクトリを作成する際のパーミッションを決定する要素。
    AND演算をするため、ここで指定した値と一致しないビットは取り除かれる。

  • follow symlinks = Yes
    共有フォルダ内のリンク追跡の可否を指定する。

  • wide links = No
    公開している共有フォルダの外側へのリンク追跡の可否を指定する。
    unix extensions = Yes の場合はこのパラメータは無視される。
    allow insecure wide links = Yes にすると、unix extensions = No でもシンボリックリンクが追跡可能になる。

  • guest ok(public) = No
    パスワードを要求されずに接続可能。

  • invalid users =
    サービスの利用を拒否するユーザーを+, &, @ などの記号を用いて定義する。

  • max connections = 0
    サービスへの同時接続数を制限する。
    0は無制限

  • path =
    セクション名(=共有名)に対応するディスク上のパス。

  • read only = Yes / writeable = No ※反意語
    読み取り専用を拒否 → 書き込み可能。

  • valid users =
    サービスの利用を許可するユーザー。


Sambaに関する問題のトラブルシューティングとデバッグを行う

~ロギング~
smb.confのグローバルセクション([global])で定義する。
詳細は別記事 392.4 Sambaのトラブルシューティング を参照

~smbcontrolコマンド~
smbcontrolというSambaプロセス(smbd、nmbd、winbindd)に対してメッセージを送信するコマンドで debug メッセージを送信することで一時的にデバッグレベルが変更できる。
詳細は別記事 392.3 Sambaの保守 を参照


参考文献


この記事が気に入ったらサポートをしてみませんか?