1.4. Sambaのトラブルシューティング
1.4.1. ログ機能の設定と分析
Sambaのログ機能の設定
Sambaのログレベル
[global]セクションで使用されるログ設定に関わる主な設定項目は以下の通り。
| 項目 | 説明 | 
|---|---|
| log file = ファイル名 | ログファイルを指定 | 
| log level = レベル | ログレベルの指定 | 
| max log size = キロバイト | ログファイルの最大サイズの指定 | 
| debug timestamp = yes/no | ログファイルに時刻を出力するかどうか | 
| dubug hires timestamp = yes/no | ログファイル二秒単位以上の時刻を出力するか指定 | 
| debug pid = yes/no | ログファイルにPIDを出力するかどうか | 
| debug uid = yes/no | ログファイルにUIDを出力するかどうか | 
| eventlog list = イベントログ名 | SambaサーバのログをWindosのイベントビューアから参照する機能 | 
Samba3系からはクラスごとにログレベルを設定できる。
使用できる主なクラスは以下の通り。
- all … すべてのクラス(デフォルト)
- tdb … TDBに関するログ
- smb … SMBプロトコルのデバッグに関するログ
- passdb … パスワードデータベースに関するログ
- auth … 認証に関するログ
- winbind … Winbindに関するログ
例)ログレベルを、パスワードデータベース関連は3、認証関連は4、その他は1に設定する場合
log level = 1 passdb:3 auth:4またログレベルは0~3,10まである。
- 0,- 1: 通常運用時のエラーと警告を表示
- 2: 通常のトラブルシューティングの初期段階で使用(接続とセッションの基本的な変更ログ)
- 3: トラブルシューティングで使用(標準)
- 10: 最終的なデバッグ
ログファイルの格納場所
保存場所は log file: ログファイルの格納場所を指定するパラメータで指定します。
なお、デフォルトは/var/log/samba/となります。
通常、log file = /var/log/samba/log.%m のように設定され、個々のデーモンやクライアントごとにファイルが分かれます。
(例: log.smbd, log.nmbd, log.winbindd, log.192.168.1.100)。
Sambaイベントログの出力
Samba AD DCとして動作する場合、Windowsのイベントログシステムと互換性のある形式でログを出力できる。
Sambaのログは、Windowsのイベントビューアを通じて確認できる形式で出力することが可能。
これは、Windowsの管理者が使い慣れたツールでSamba DCの動作を監視できることを意味する。 イベントログの情報を確認することで、グループポリシーの適用状況や認証エラーの詳細などを、Windowsクライアント側からデバッグすることができる。
1.4.2. アカウントとパスワードデータベースの管理と操作
Sambaパスワードデータベースへの問い合わせや修正
smbpasswdコマンド
Sambaのパスワードデータベースを管理するためのユーティリティ。
パスワードの設定、変更、削除、アカウントの有効化/無効化などを行う際に使用する。
smbpasswdpdbeditコマンド
Sambaのパスワードデータベースを直接操作するための高度なユーティリティ。
ユーザーアカウントの追加、削除、属性の変更など、より広範な管理作業が可能。
pdbedit| オプション | 説明 | 
|---|---|
| -Lv | 詳細の表示 | 
| -a | ユーザの追加 | 
| -x | ユーザの削除 | 
RPCクライアントによる情報問い合わせ
rpcclient ユーティリティは、Windowsがサーバーと通信するために使用するMS-RPC (Microsoft Remote Procedure Call) プロトコルを使って、Sambaサーバーに直接接続し、情報を問い合わせたり、操作したりするための強力なデバッグツール。
Sambaサーバー側の認証情報(ユーザー名とパスワード、またはKerberosチケット)が必要となる。
# 接続先のSambaサーバーを指定し、ユーザー名とパスワードで認証して対話型セッションを開始(接続)
rpcclient -U user%password [server_ip]| サブコマンド | 用途 | 説明 | 
|---|---|---|
| srvinfo | サーバー情報 | 接続しているSambaサーバーの基本情報(OSバージョンなど)を表示する | 
| netshareenum | 共有一覧 | サーバー上で利用可能なファイル共有の一覧を表示する | 
| queryuser [RID/ユーザー名] | ユーザー情報 | 特定のユーザーの詳細情報(アカウントフラグ、SIDなど)を問い合わせする | 
| querygroup [RID/グループ名] | グループ情報 | 特定のグループの詳細情報を問い合わせする | 
| enumalsids | SID一覧 | サーバーが知っているエイリアス(グループ)のSIDを列挙 | 
| lookupsid [SID] | SID解決 | SID(Security Identifier)に対応するユーザー名やグループ名を解決 | 
| samquery | SAMデータベース | SAM(Security Account Manager)データベースの各種オブジェクトを問い合わせする | 
1.4.3. TDB(内部データベース)の診断
TDB (Trivial Database) ファイルは、Sambaがロック情報、ユーザーIDマッピング、NetBIOS名のリスト、内部レジストリ設定など、多くのランタイムデータやメタデータを保存するために使用するシンプルなデータベース。
TDBファイルが破損すると、認証の失敗、ファイルロックの異常、ドメイン参加の失敗など、深刻な問題を引き起こす。
重要なTDBファイルの内容
Sambaのデータベースディレクトリ(通常は /var/lib/samba/private/ など)には多数のTDBファイルが存在する。
- registry.tdb- 役割: Sambaの内部設定レジストリを格納(smb.confのレジストリバックエンド設定時)
- 破損時の影響: Sambaの設定が適用されない、または起動に失敗する
 
- secrets.tdb- 役割: ドメイン参加時のパスワードやKerberosキーなど、機密性の高い認証情報を格納
- 破損時の影響: ドメインへの参加失敗、Kerberos認証の失敗、AD DC間のレプリケーション失敗
 
- grent.tdb / passdb.tdb- 役割: ユーザーやグループの情報、パスワードハッシュなどを格納(NT DC/スタンドアロンモード)。
- 破損時の影響: 認証エラー、ユーザー情報が見つからない
 
secret.tdb
Sambaが認証情報(ユーザー名、パスワードなど)を格納するためのデータベースファイル。
Sambaサーバーがユーザー認証を行う際に使用される。
通常、このファイルには、ユーザーのパスワードハッシュやアクセス許可情報などが保存される。
具体的に保存されるデータは以下のものがある。
- machine/domain (SID)
- LDAPと共に使用される秘密パスワード
- machine 秘密トークン
registory.tdb
Sambaサーバーの設定情報を格納するためのデータベース。
Windowsレジストリのように、Sambaサーバーの構成や設定を管理する。
例えば、共有フォルダの設定、ユーザーのアクセス権限、ネットワークのパラメータなどがこのファイルに保存される。
TDBファイルの内容の表示と編集
TDBファイルを直接操作するための専用のユーティリティが存在する。
tdbdumpコマンド
TDBファイルの内容表示を行うコマンド。
tdbdumptdbtoolコマンド
TDBファイルの対話的な管理を行うコマンド。
TDBファイルの操作(キーの追加、削除、値の変更)や、破損したデータベースの修復を試みるために使用できる。
tdbtool【TDB操作の注意点】 TDBファイルはSambaデーモンが動作中に常に読み書きしているため、操作やバックアップを行う際は、サービスを停止するか、専用のツール(tdbbackupなど)を使用して整合性を確保する必要がある
TDBファイルの破損の認識
TDBファイルの破損は、以下のような兆候で認識できる。
- Sambaログの出力- ログレベルを上げて(log level = 3以上)、ファイルシステムI/Oエラーやデータベースの読み書きエラーに関するメッセージを特定します。
 
- ログレベルを上げて(
- Samba機能の異常- smbstatusが実行できない、または異常なロック情報を表示する。
- ユーザー認証が時々失敗する、または特定のユーザーだけログインできない。
 
- tdbtool / tdbdumpの実行失敗- ツールでファイルを読み込もうとした際に、エラーメッセージが表示される。
 
対応: 破損が確認された場合、最新のバックアップ(tdbbackupで作成したもの)からリストアするか、またはサービスを停止した状態で破損ファイルを削除し、Sambaを再起動して再構築を試みる必要があります(ただし、secrets.tdbなどの再構築は複雑な手順を要する)。
1.4.4. Samba AD LDAPディレクトリの診断とリカバリ
SambaがActive Directoryドメインコントローラー(AD DC)として動作する場合、ユーザー、グループ、コンピューター、ポリシーなどのすべての情報はLDAPディレクトリに格納される。
このディレクトリの整合性のチェックと操作方法を理解することが、高度なトラブルシューティングには必要となる。
Samba LDAPディレクトリのオブジェクト操作
SambaのLDAPディレクトリ(Active Directory)は、LDB (LDAP Database) という専用のツールセットを使って操作される。
ldbsearchコマンド
LDAPデータベース内のエントリーを検索するためのコマンド。
指定されたクエリやフィルタを使用して、LDAPディレクトリ内の情報を検索する。
例えば、ユーザーアカウントやグループ、機器などの情報を検索するために使用される。
ldbsearch| オプション | 解説 | 
|---|---|
| -h | 検索を行うLDAPサーバーのホストを指定します。 | 
| -b | 検索のベースDNを指定します。 | 
| -s | 検索のスコープを指定します。デフォルトはbaseで、oneまたはsubを指定できます。 | 
| -D | バインドに使用するDNを指定します。 | 
| -W | パスワードをプロンプトで入力するように求めます。 | 
ldbmodifyコマンド
LDAPデータベース内のエントリーを変更するためのコマンド。
LDIFファイルを使用して、エントリーの属性を変更する。 これにより、ユーザーの属性の更新やグループメンバーシップの変更などが可能になる。
ldbmodify| オプション | 解説 | 
|---|---|
| -h | 変更を行うLDAPサーバーのホストを指定します。 | 
| -b | 変更の対象となるエントリーのベースDNを指定します。 | 
| -D | バインドに使用するDNを指定します。 | 
| -W | パスワードをプロンプトで入力するように求めます。 | 
ldbeditコマンド
インタラクティブな方法でLDAPエントリーを編集するためのコマンド。
エディタを介してエントリーの属性を直接編集できる。これは、手動でのエントリーの編集が必要な場合に使用される。
ldbedit| オプション | 解説 | 
|---|---|
| -h | エディットするLDAPサーバーのホストを指定します。 | 
| -b | エディットの対象となるエントリーのベースDNを指定します。 | 
| -D | バインドに使用するDNを指定します。 | 
| -W | パスワードをプロンプトで入力するように求めます。 | 
ldbaddコマンド
LDAPデータベースに新しいエントリーを追加するためのコマンド。
追加するエントリーの情報を含むLDIFファイルを使用する。ユーザーアカウントやグループ、機器などの新しいエントリーをLDAPディレクトリに追加する際に使用される。
ldbadd| オプション | 解説 | 
|---|---|
| -h | エディットするLDAPサーバーのホストを指定します。 | 
| -b | エディットの対象となるエントリーのベースDNを指定します。 | 
| -D | バインドに使用するDNを指定します。 | 
| -W | パスワードをプロンプトで入力するように求めます。 | 
ldbdelコマンド
LDAPデータベースからエントリーを削除するためのコマンド。
削除するエントリーのDNを指定して使用する。 ユーザーアカウントやグループの削除など、LDAPディレクトリからエントリーを削除する際に使用される。
ldbdel| オプション | 解説 | 
|---|---|
| -h | 削除を行うLDAPサーバーのホストを指定します。 | 
| -D | バインドに使用するDNを指定します。 | 
| -W | パスワードをプロンプトで入力するように求めます。 | 
LDIF(LDAP Data Interchange Format)
LDIFはディレクトリ内の情報を記述するファイル形式のこと。 LDAPサーバにディレクトリ情報を登録、変更する場合に使用される。
記法は以下の通り。
dn: 識別名
属性名: 値
属性名: 値
   :    LDIFファイルでは最初の行でエントリの識別名(DN)を記述する。 また、複数のエントリを記載する場合は空行で区切り、コメントは行頭に「#」をつける。
なお、属性値は通常UTF-8のテキストで記載するが、バイナリデータなどの特殊なデータを指定する場合は「属性名::属性値」のようにし、属性値にはBase64でエンコードした値を指定する。
データベースの健全性チェックとリカバリ
AD DCのデータベース(LDAP)の整合性を定期的にチェックし、障害から復旧する手段が必要となる。
- ドメインコントローラーのデータベースの整合性チェック
* samba-tool dbcheck: AD DCデータベース(LDAP)の論理的な整合性を確認します。参照エラーや破損したリンクなどがないかを確認し、オプションで修復を試みることもできます
- LDAP recycle bin(ごみ箱)の利用 * Windows ADと同様に、Samba AD DCもLDAP recycle bin機能を提供します。 * これを有効にすると、削除されたオブジェクトはすぐに物理的に削除されず、特定のコンテナ(Deleted Objects)に移動され、一定期間保持されます。 * 誤って削除したユーザーやグループを簡単に復元するために利用します。
トラブルシューティングのための環境構築
本番環境で再現が難しい問題をデバッグするために、**既存のAD DCのコピー(別名クローン)**を隔離された環境に作成することができます。
このプロセスには、まず既存のデータベースのバックアップを取得し、それを新しい環境にリストアする手順が含まれます。samba-tool domain backup ユーティリティ(関連したサブコマンドを含む)を使用し、データベース全体のスナップショットを取得することが、クローニングの基礎となります。