見出し画像

392.4 Sambaのトラブルシューティング

主題392:Sambaの基礎
392.4 Sambaのトラブルシューティング

LinuC300の試験範囲である主題390~397まであるうちの「主題392:Sambaの基礎」から「392.4 Sambaのトラブルシューティング」についてのまとめ

  • 重要度:2

  • 説明:
    簡易データベース(TDB)ファイルの構造を理解し、TBD関連の問題のトラブルシューティング方法を知っていること。

  • 主要な知識範囲
    - Sambaのロギングを設定する
    - TDBファイルをバックアップする
    - TDBファイルを復元する
    - TDBファイルの破損を検出する
    - TDBファイルの内容を編集 / 一覧表示する

  • 重要なファイル、用語、ユーティリティ:
    - /var/log/samba/*
    - log level
    - debuglevel
    - smbpasswd
    - pdbedit
    - secrets.tdb
    - tdbbackup
    - tdbdump
    - tdbrestore
    - tdbtool


Sambaのロギングを設定する

~ロギング~
smb.confのグローバルセクション([global])で定義する。

  • debug hires timestamp = Yes
    ログメッセージに秒単位以上のタイムスタンプを記録する。
    debug timestamp の設定が Yes になっている必要がある。

  • debug timestamp(timestamp logs) = Yes
    ログメッセージにタイムスタンプを付加する。

  • debug uid = No
    接続されたユーザーの euid、egid、uid、gid をタイムスタンプに付加する。
    debug timestamp の設定が Yes になっている必要がある。

  • debug pid = No
    プロセスIDをタイムスタンプに付加する。
    debug timestamp の設定が Yes になっている必要がある。

  • eventlog list =
    SambaのログをWindowsのイベントビューワーで参照できるようにする。

  • logging = backend[:option][@loglevel] ※Samba4のみ
    ロギングバックエンドを設定する。
    logging が設定されている場合 syslog と syslog only 設定は上書きする。
    例) logging = syslog@1 file

  • log level(debuglevel) = 0
    全体のログレベルを決定する。
    0~10の範囲で指定ができ、通常運用であれば1、開発者向けが3、それ以上は出力される量が膨大になるため推奨されない。
    パラメータ値には「クラス」を指定する。
    クラスごとに別々のログレベル、別々のログファイルを指定することができる。
    例) log level = 3 passdb:5 auth:10 winbind:2
    例) log level = 1 full_audit:1@/var/log/audit.log winbind:2

  • log file = /var/log/samba/log.%m
    ログファイルを指定する。
    Samba変数が使える。

  • max log size = 5000
    ログファイルのサイズ
    単位は kByte で、指定したサイズを超えると .old という拡張子のファイル名に置き換えられる。

  • syslog= 1
    Samba のデバッグメッセージと syslog のプライオリティとの対応づけを行なう。
    Sambaログレベル0 = Syslogレベル3 LOG_ERR
    Sambaログレベル1 = Syslogレベル4 LOG_WARNING
    Sambaログレベル2 = Syslogレベル5 LOG_NOTICE
    Sambaログレベル3 = Syslogレベル6 LOG_INFO
    Sambaログレベル4~10 = Syslogレベル7 LOG_DEBUG
    指定したログレベル未満のログのみsyslogに送信する。
    loggingが指定されていれば、logging設定が優先される。

  • syslog only = No
    ログをsyslogにだけ送信する。
    loggingが指定されていれば、logging設定が優先される。※Samba4のみ

~ログファイルの所在~
Sambaのログファイルの保存場所はインストールした環境により異なるがsmb -b コマンドを実行しLOGFILEBASEの項目で確認できる。

★ ソースからインストールしたSamba3の場合 ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# testparm -sv | grep "log file"
               :
        log file = /usr/local/samba/var/log.%m
               :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbd -b | grep LOGFILE
               :
   LOGFILEBASE: /usr/local/samba/var
               :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -lF /usr/local/samba/var
合計 38
drwx------ 5 root root     5  529 22:45 cores/
drwxr-xr-x 4 root root    24  63 01:39 locks/
-rw-r--r-- 1 root root   845  63 00:12 log.192.168.56.1
-rw-r--r-- 1 root root 50951  63 01:39 log.nmbd
-rw-r--r-- 1 root root 22794  63 00:00 log.smbd
-rw-r--r-- 1 root root 56224  62 23:41 log.smbd.old
-rw-r--r-- 1 root root  1886  62 23:42 log.wb-BUILTIN
-rw-r--r-- 1 root root 11317  62 23:42 log.wb-ROCKY9-SAMBA31
-rw-r--r-- 1 root root 30397  63 01:39 log.winbindd
-rw-r--r-- 1 root root  2130  62 23:42 log.winbindd-idmap
drwxr-xr-x 2 root root     3  62 23:35 nmbd/
[root@rocky9-samba31 ~]#
★ dnfでインストールしたSamba4の場合 ★
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# testparm -sv | grep "log file"
               :
        log file =
               :
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# smbd -b | grep LOGFILEBASE
               :
   LOGFILEBASE: /var/log/samba
               :
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# ls -lF /var/log/samba
合計 3
drwx------ 4 root root    4  62 21:18 cores/
-rw-r--r-- 1 root root  722  63 01:39 log.nmbd
-rw-r--r-- 1 root root 1212  62 21:49 log.smbd
drwx------ 2 root root    2  418 22:22 old/
[root@rocky9-samba41 ~]#

(補足)TDBファイルについて

Sambaで使われるデータベースはTrivial database(TDB)です。
TDBファイルの所在やそれぞれの用途については 別記事 Appendix SambaのTDBファイル を参照


(補足)TDBファイルを操作するツールについて

★ ソースからインストールしたSamba3の場合★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -lF /usr/local/samba/bin/tdb*
-rwxr-xr-x 1 root root 34192  528 00:23 /usr/local/samba/bin/tdbbackup*
-rwxr-xr-x 1 root root 29168  528 00:23 /usr/local/samba/bin/tdbdump*
-rwxr-xr-x 1 root root 29448  528 00:23 /usr/local/samba/bin/tdbrestore*
-rwxr-xr-x 1 root root 39616  528 00:23 /usr/local/samba/bin/tdbtool*
[root@rocky9-samba31 ~]#
★ dnfでインストールしたSamba4の場合 ★
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# rpm -qa | grep tdb-tool
tdb-tools-1.4.7-1.el9.x86_64
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# rpm -qa | grep samba-tool
samba-tools-4.17.5-102.el9.x86_64
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# ls -la /usr/bin/samba*
-rwxr-xr-x 1 root root 1555  418 22:15 /usr/bin/samba-tool
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# ls -lF /usr/bin/tdb*
-rwxr-xr-x 1 root root 15560  418 14:59 /usr/bin/tdbbackup*
-rwxr-xr-x 1 root root 15544  418 14:59 /usr/bin/tdbdump*
-rwxr-xr-x 1 root root 15504  418 14:59 /usr/bin/tdbrestore*
-rwxr-xr-x 1 root root 28440  418 14:59 /usr/bin/tdbtool*
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# ls -lF /usr/bin/samba*
-rwxr-xr-x 1 root root 1555  418 22:15 /usr/bin/samba-tool*
[root@rocky9-samba41 ~]#

(補足)Sambaユーザーを追加

このあとの操作のために user001 というユーザーを追加しておきます。
1. useraddコマンドでLinuxユーザーを作成する
2. pdbeditコマンドでLinuxユーザーをSambaユーザーに追加する。

※Linuxシステムにログインする必要がなければpasswdコマンドによるLinuxユーザーに対するパスワードの設定は不要。
※Sambaユーザーのパスワード変更はsmbpasswdコマンドで行う。
※pdbeditコマンド、smbpasswdコマンドについては、執筆予定の別記事 394.1 ユーザアカウントとグループアカウントの管理 参照

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# useradd user001
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cat /etc/passwd | grep user001
user001:x:1000:1000::/home/user001:/bin/bash
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# pdbedit -a user001
new password: ********** <--- パスワードを入力
retype new password: ********** <--- パスワードを再入力
Unix username:        user001
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-2347257257-1029847378-1678431391-1000
Primary Group SID:    S-1-5-21-2347257257-1029847378-1678431391-513
Full Name:
Home Directory:       \\rocky9-samba31\user001
HomeDir Drive:
Logon Script:
Profile Path:         \\rocky9-samba31\user001\profile
Domain:               ROCKY9-SAMBA31
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          木, 07  22036 00:06:39 JST
Kickoff time:         木, 07  22036 00:06:39 JST
Password last set:    日, 04  62023 11:54:37 JST
Password can change:  日, 04  62023 11:54:37 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@rocky9-samba31 ~]#

TDBファイルをバックアップする

~tdbbackup~

バックアップ対象のTDBを確認。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 3
-rw------- 1 root root 36864  64 11:54 passdb.tdb
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#

バックアップを取る

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbbackup /usr/local/samba/private/passdb.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 4
-rw------- 1 root root 36864  64 11:54 passdb.tdb <--- バックアップ元
-rw------- 1 root root 32768  64 12:03 passdb.tdb.bak <--- バックアップ先
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#

-s <suffix>:文字を付加する

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbbackup -s .hoge /usr/local/samba/private/passdb.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 5
-rw------- 1 root root 36864  64 11:54 passdb.tdb
-rw------- 1 root root 32768  64 12:03 passdb.tdb.bak
-rw------- 1 root root 32768  64 12:04 passdb.tdb.hoge <--- suffixで指定した文字が付加された 
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#

~tdbdump~
指定したTDBファイルを標準出力する。
リダイレクト( > )と組み合わせてテキストファイルに出力することもできる。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbdump /usr/local/samba/private/passdb.tdb > /usr/local/samba/private/passdb.tdb.dump
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 7
-rw------- 1 root root 36864  64 11:54 passdb.tdb
-rw------- 1 root root 32768  64 12:03 passdb.tdb.bak
-rw-r--r-- 1 root root   791  64 12:05 passdb.tdb.dump <--- tdbdumpで作成したテキストファイル 
-rw------- 1 root root 32768  64 12:04 passdb.tdb.hoge
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cat /usr/local/samba/private/passdb.tdb.dump
{
key(13) = "USER_user001\00"
data(195) = "\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00\ED\FC{d\00\00\00\00\7F\A9T|\08\00\00\00user001\00\0F\00\00\00ROCKY9-SAMBA31\00\01\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\E8\03\00\00\01\02\00\00\00\00\00\00\10\00\00\00\88F\F7\EA\EE\8F\B1\17\AD\06\BD\D80\B7Xl\00\00\00\00\10\00\00\00\A8\00\15\00\00\00 \00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\04\00\00"
}
{
key(13) = "RID_000003e8\00"
data(8) = "user001\00"
}
{
key(19) = "INFO/minor_version\00"
data(4) = "\00\00\00\00"
}
{
key(9) = "NEXT_RID\00"
data(4) = "\E9\03\00\00"
}
{
key(13) = "INFO/version\00"
data(4) = "\04\00\00\00"
}
[root@rocky9-samba31 ~]#

TDBファイルを復元する

~tdbrestore~
tdbdumpで作成したテキストファイルを読み込んでTDB形式に変換する。
以下の操作例ではtdbdumpコマンドで作成したpassdb.tdb.dumpを、tdbrestoreコマンドで passdb_tdbrestore.tdb というTDBファイルに変換しています。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 7
-rw------- 1 root root 36864  64 11:54 passdb.tdb
-rw------- 1 root root 32768  64 12:03 passdb.tdb.bak
-rw-r--r-- 1 root root   791  64 12:05 passdb.tdb.dump <--- tdbdumpで作成したテキストファイル 
-rw------- 1 root root 32768  64 12:04 passdb.tdb.hoge
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbrestore /usr/local/samba/private/passdb_tdbrestore.tdb < /usr/local/samba/private/passdb.tdb.dump
EOF
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 8
-rw------- 1 root root 36864  64 11:54 passdb.tdb
-rw------- 1 root root 32768  64 12:03 passdb.tdb.bak
-rw-r--r-- 1 root root   791  64 12:05 passdb.tdb.dump
-rw------- 1 root root 32768  64 12:04 passdb.tdb.hoge
-rw-r--r-- 1 root root 32768  64 12:07 passdb_tdbrestore.tdb <--- tdbrestoreで作成されたTDBファイル
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbbackup -v /usr/local/samba/private/passdb_tdbrestore.tdb
/usr/local/samba/private/passdb_tdbrestore.tdb : 5 records
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbdump /usr/local/samba/private/passdb_tdbrestore.tdb
{
key(13) = "USER_user001\00"
data(195) = "\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00\ED\FC{d\00\00\00\00\7F\A9T|\08\00\00\00user001\00\0F\00\00\00ROCKY9-SAMBA31\00\01\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\E8\03\00\00\01\02\00\00\00\00\00\00\10\00\00\00\88F\F7\EA\EE\8F\B1\17\AD\06\BD\D80\B7Xl\00\00\00\00\10\00\00\00\A8\00\15\00\00\00 \00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\04\00\00"
}
{
key(13) = "RID_000003e8\00"
data(8) = "user001\00"
}
{
key(19) = "INFO/minor_version\00"
data(4) = "\00\00\00\00"
}
{
key(9) = "NEXT_RID\00"
data(4) = "\E9\03\00\00"
}
{
key(13) = "INFO/version\00"
data(4) = "\04\00\00\00"
}
[root@rocky9-samba31 ~]#

TDBファイルの破損を検出する

~tdbbackup~
-v:整合性を確認する

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbbackup -v /usr/local/samba/private/passdb.tdb
/usr/local/samba/private/passdb.tdb : 5 records
[root@rocky9-samba31 ~]#

passdb.tdbが存在していなかったり破損していた場合は、tdbbackupコマンドで作成したバックアップファイルがあればバックアップファイルからの復元を試みる。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 4
-rw------- 1 root root 32768  625 23:38 passdb.tdb
-rw------- 1 root root 24576  613 23:38 secrets.tdb
-rw------- 1 root root   424  625 22:31 smbpasswd
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbdump /usr/local/samba/private/passdb.tdb  <---tdbdumpで確認する
{
key(12) = "USER_user00\00"
data(210) = "\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00:\CC\91dS)\8Fd\7F\A9T|\07\00\00\00user00\00\0F\00\00\00ROCKY9-SAMBA31\00\01\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\B8\0B\00\00\01\02\00\00\10\00\00\00\E5,\ACgA\9A\9A\22\80\13?F\CA\A3 \90\10\00\00\00?\9F\8B\F5I\B4\0CY\CA\CDo\80b\0F\B4\D5\00\00\00\00\10\00\00\00\A8\00\15\00\00\00 \00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\04\00\00"
}
   :
   :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbbackup /usr/local/samba/private/passdb.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 5
-rw------- 1 root root 32768  625 23:38 passdb.tdb
-rw------- 1 root root 32768  625 23:51 passdb.tdb.bak  <--- バックアップされたファイル 
-rw------- 1 root root 24576  613 23:38 secrets.tdb
-rw------- 1 root root   424  625 22:31 smbpasswd
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# echo -n > /usr/local/samba/private/passdb.tdb  <--- わざと破損させる
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 4
-rw------- 1 root root     0  625 23:52 passdb.tdb  <--- 破損したパスワードファイル
-rw------- 1 root root 32768  625 23:51 passdb.tdb.bak
-rw------- 1 root root 24576  613 23:38 secrets.tdb
-rw------- 1 root root   424  625 22:31 smbpasswd
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbdump /usr/local/samba/private/passdb.tdb  <--- 破損しているので中身が見れない
Failed to open /usr/local/samba/private/passdb.tdb
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbbackup -v /usr/local/samba/private/passdb.tdb
restoring /usr/local/samba/private/passdb.tdb <--- -v オプションでリストアされた
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 5
-rw------- 1 root root 32768  625 23:54 passdb.tdb <--- -v オプションでリストアされた
-rw------- 1 root root 32768  625 23:51 passdb.tdb.bak
-rw------- 1 root root 24576  613 23:38 secrets.tdb
-rw------- 1 root root   424  625 22:31 smbpasswd
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbdump /usr/local/samba/private/passdb.tdb  <---リストアされたのでtdbdumpすることができる
{
key(12) = "USER_user00\00"
data(210) = "\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00:\CC\91dS)\8Fd\7F\A9T|\07\00\00\00user00\00\0F\00\00\00ROCKY9-SAMBA31\00\01\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\B8\0B\00\00\01\02\00\00\10\00\00\00\E5,\ACgA\9A\9A\22\80\13?F\CA\A3 \90\10\00\00\00?\9F\8B\F5I\B4\0CY\CA\CDo\80b\0F\B4\D5\00\00\00\00\10\00\00\00\A8\00\15\00\00\00 \00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\04\00\00"
}
   :
   :
[root@rocky9-samba31 ~]#

~tdbtool~
check サブコマンドで整合性を確認することができる

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/passdb.tdb check
Database integrity is OK and has 5 records.
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/passdb.tdb
tdb>
tdb> check
Database integrity is OK and has 5 records.
tdb>
tdb> quit
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool
tdb>
database not open

tdbtool:
  create    dbname     : create a database
  open      dbname     : open an existing database
  transaction_start    : start a transaction
  transaction_commit   : commit a transaction
  transaction_cancel   : cancel a transaction
  erase                : erase the database
  dump                 : dump the database as strings
  keys                 : dump the database keys as strings
  hexkeys              : dump the database keys as hex values
  info                 : print summary info about the database
  insert    key  data  : insert a record
  move      key  file  : move a record to a destination tdb
  store     key  data  : store a record (replace)
  show      key        : show a record by key
  delete    key        : delete a record by key
  list                 : print the database hash table and freelist
  free                 : print the database freelist
  check                : check the integrity of an opened database
  speed                : perform speed tests on the database
  ! command            : execute system command
  1 | first            : print the first record
  n | next             : print the next record
  q | quit             : terminate
  \n                   : repeat 'next' command

tdb> open /usr/local/samba/private/passdb.tdb
tdb>
tdb> check
Database integrity is OK and has 5 records.
tdb>
tdb> quit
[root@rocky9-samba31 ~]#

TDBファイルの内容を一覧表示する(すべてのレコード)

~tdbdump~

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbdump /usr/local/samba/private/passdb.tdb
{
key(13) = "USER_user001\00"
data(195) = "\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00\ED\FC{d\00\00\00\00\7F\A9T|\08\00\00\00user001\00\0F\00\00\00ROCKY9-SAMBA31\00\01\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\E8\03\00\00\01\02\00\00\00\00\00\00\10\00\00\00\88F\F7\EA\EE\8F\B1\17\AD\06\BD\D80\B7Xl\00\00\00\00\10\00\00\00\A8\00\15\00\00\00 \00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\04\00\00"
}
{
key(13) = "RID_000003e8\00"
data(8) = "user001\00"
}
{
key(19) = "INFO/minor_version\00"
data(4) = "\00\00\00\00"
}
{
key(9) = "NEXT_RID\00"
data(4) = "\E9\03\00\00"
}
{
key(13) = "INFO/version\00"
data(4) = "\04\00\00\00"
}
[root@rocky9-samba31 ~]#

~tdbtool~

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/passdb.tdb dump

key 13 bytes
USER_user001
data 195 bytes
[000] 00 00 00 00 7F A9 54 7C  7F A9 54 7C 00 00 00 00  ......T| ..T|...
[010] ED FC 7B 64 00 00 00 00  7F A9 54 7C 08 00 00 00  ..{d... ..T|...
[020] 75 73 65 72 30 30 31 00  0F 00 00 00 52 4F 43 4B  user001 ....ROCK
[030] 59 39 2D 53 41 4D 42 41  33 31 00 01 00 00 00 00  Y9-SAMBA 31.....
[040] 01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ....... .......
[050] 00 00 00 00 00 01 00 00  00 00 01 00 00 00 00 01  ....... ........
[060] 00 00 00 00 01 00 00 00  00 E8 03 00 00 01 02 00  ....... .......
[070] 00 00 00 00 00 10 00 00  00 88 46 F7 EA EE 8F B1  ....... ..F.....
[080] 17 AD 06 BD D8 30 B7 58  6C 00 00 00 00 10 00 00  .....0.X l......
[090] 00 A8 00 15 00 00 00 20  00 00 00 FF FF FF FF FF  .......  ........
[0A0] FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ........ ........
[0B0] 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 EC  ....... ........
[0C0] 04 00 00                                          ..

key 13 bytes
RID_000003e8
data 8 bytes
[000] 75 73 65 72 30 30 31 00                           user001

key 19 bytes
INFO/minor_version
data 4 bytes
[000] 00 00 00 00                                       ...

key 9 bytes
NEXT_RID
data 4 bytes
[000] E9 03 00 00                                       ...

key 13 bytes
INFO/version
data 4 bytes
[000] 04 00 00 00                                       ...
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/passdb.tdb
tdb>
tdb> dump

key 13 bytes
USER_user001
data 195 bytes
[000] 00 00 00 00 7F A9 54 7C  7F A9 54 7C 00 00 00 00  ......T| ..T|...
[010] ED FC 7B 64 00 00 00 00  7F A9 54 7C 08 00 00 00  ..{d... ..T|...
[020] 75 73 65 72 30 30 31 00  0F 00 00 00 52 4F 43 4B  user001 ....ROCK
[030] 59 39 2D 53 41 4D 42 41  33 31 00 01 00 00 00 00  Y9-SAMBA 31.....
[040] 01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ....... .......
[050] 00 00 00 00 00 01 00 00  00 00 01 00 00 00 00 01  ....... ........
[060] 00 00 00 00 01 00 00 00  00 E8 03 00 00 01 02 00  ....... .......
[070] 00 00 00 00 00 10 00 00  00 88 46 F7 EA EE 8F B1  ....... ..F.....
[080] 17 AD 06 BD D8 30 B7 58  6C 00 00 00 00 10 00 00  .....0.X l......
[090] 00 A8 00 15 00 00 00 20  00 00 00 FF FF FF FF FF  .......  ........
[0A0] FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ........ ........
[0B0] 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 EC  ....... ........
[0C0] 04 00 00                                          ..

key 13 bytes
RID_000003e8
data 8 bytes
[000] 75 73 65 72 30 30 31 00                           user001

key 19 bytes
INFO/minor_version
data 4 bytes
[000] 00 00 00 00                                       ...

key 9 bytes
NEXT_RID
data 4 bytes
[000] E9 03 00 00                                       ...

key 13 bytes
INFO/version
data 4 bytes
[000] 04 00 00 00                                       ...
tdb>
tdb> quit
[root@rocky9-samba31 ~]#

TDBファイルの内容を一覧表示する(特定のレコード)

以下の操作例では user001 というユーザーの情報のみ表示させています。

~tdbtool~

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/passdb.tdb show "USER_user001\00"

key 13 bytes
USER_user001
data 195 bytes
[000] 00 00 00 00 7F A9 54 7C  7F A9 54 7C 00 00 00 00  ......T| ..T|...
[010] ED FC 7B 64 00 00 00 00  7F A9 54 7C 08 00 00 00  ..{d... ..T|...
[020] 75 73 65 72 30 30 31 00  0F 00 00 00 52 4F 43 4B  user001 ....ROCK
[030] 59 39 2D 53 41 4D 42 41  33 31 00 01 00 00 00 00  Y9-SAMBA 31.....
[040] 01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ....... .......
[050] 00 00 00 00 00 01 00 00  00 00 01 00 00 00 00 01  ....... ........
[060] 00 00 00 00 01 00 00 00  00 E8 03 00 00 01 02 00  ....... .......
[070] 00 00 00 00 00 10 00 00  00 88 46 F7 EA EE 8F B1  ....... ..F.....
[080] 17 AD 06 BD D8 30 B7 58  6C 00 00 00 00 10 00 00  .....0.X l......
[090] 00 A8 00 15 00 00 00 20  00 00 00 FF FF FF FF FF  .......  ........
[0A0] FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ........ ........
[0B0] 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 EC  ....... ........
[0C0] 04 00 00                                          ..
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/passdb.tdb
tdb>
tdb> show USER_user001\00

key 13 bytes
USER_user001
data 195 bytes
[000] 00 00 00 00 7F A9 54 7C  7F A9 54 7C 00 00 00 00  ......T| ..T|...
[010] ED FC 7B 64 00 00 00 00  7F A9 54 7C 08 00 00 00  ..{d... ..T|...
[020] 75 73 65 72 30 30 31 00  0F 00 00 00 52 4F 43 4B  user001 ....ROCK
[030] 59 39 2D 53 41 4D 42 41  33 31 00 01 00 00 00 00  Y9-SAMBA 31.....
[040] 01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ....... .......
[050] 00 00 00 00 00 01 00 00  00 00 01 00 00 00 00 01  ....... ........
[060] 00 00 00 00 01 00 00 00  00 E8 03 00 00 01 02 00  ....... .......
[070] 00 00 00 00 00 10 00 00  00 88 46 F7 EA EE 8F B1  ....... ..F.....
[080] 17 AD 06 BD D8 30 B7 58  6C 00 00 00 00 10 00 00  .....0.X l......
[090] 00 A8 00 15 00 00 00 20  00 00 00 FF FF FF FF FF  .......  ........
[0A0] FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ........ ........
[0B0] 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 EC  ....... ........
[0C0] 04 00 00                                          ..
tdb>
tdb>
tdb> quit
[root@rocky9-samba31 ~]#

TDBファイルの内容を編集する

~tdbtoolによるDB操作~

create:データベース作成
※tdbtoolの対話モードに入ってからでないと作成できない。

★ tdbtoolの対話モードからTDBファイルを作成する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool
tdb>
tdb> create /usr/local/samba/private/hogehoge.tdb
tdb>
tdb> quite
[root@rocky9-samba31 ~]# 
[root@rocky9-samba31 ~]# ls -l /usr/local/samba/private/
合計 9
-rw------- 1 root root   696  64 13:24 hogehoge.tdb <--- 作成されたTDBファイル
-rw------- 1 root root 36864  64 11:54 passdb.tdb
-rw------- 1 root root 32768  64 13:14 passdb.tdb.bak
-rw-r--r-- 1 root root   791  64 12:05 passdb.tdb.dump
-rw------- 1 root root 32768  64 12:04 passdb.tdb.hoge
-rw-r--r-- 1 root root 32768  64 12:07 passdb_tdbrestore.tdb
-rw------- 1 root root 45056  531 22:30 secrets.tdb
[root@rocky9-samba31 ~]#

open:データベースを開く

★ tdbtoolの対話モードからTDBファイルを開く ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool
tdb>
tdb> open /usr/local/samba/private/passdb.tdb.bak
tdb>
tdb> info
Size of file/data: 32768/282
Number of records: 5
Smallest/average/largest keys: 9/13/19
Smallest/average/largest data: 4/43/195
Smallest/average/largest padding: 7/18/56
Number of dead records: 0
Smallest/average/largest dead records: 0/0/0
Number of free records: 1
Smallest/average/largest free records: 31552/31552/31552
Number of hash chains: 131
Smallest/average/largest hash chains: 0/0/1
Number of uncoalesced records: 0
Smallest/average/largest uncoalesced runs: 0/0/0
Percentage keys/data/padding/free/dead/rechdrs&tailers/hashes: 0/1/0/96/0/1/2
tdb>
tdb> quite
[root@rocky9-samba31 ~]# 
★ tdbtoolの引数としてTDBファイルを指定する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/passdb.tdb.bak
tdb>
tdb> info
Size of file/data: 32768/282
Number of records: 5
Smallest/average/largest keys: 9/13/19
Smallest/average/largest data: 4/43/195
Smallest/average/largest padding: 7/18/56
Number of dead records: 0
Smallest/average/largest dead records: 0/0/0
Number of free records: 1
Smallest/average/largest free records: 31552/31552/31552
Number of hash chains: 131
Smallest/average/largest hash chains: 0/0/1
Number of uncoalesced records: 0
Smallest/average/largest uncoalesced runs: 0/0/0
Percentage keys/data/padding/free/dead/rechdrs&tailers/hashes: 0/1/0/96/0/1/2
tdb>
tdb> quite
[root@rocky9-samba31 ~]# 

erase:データベース内のレコードをすべて削除
以下の操作例ではレコードを3件追加して、それをすべて削除しています。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# tdbtool /usr/local/samba/private/hogehoge.tdb
tdb>
tdb> info
Size of file/data: 8192/0
Number of records: 0   <--- レコードが0件になっている
Smallest/average/largest keys: 0/0/0
Smallest/average/largest data: 0/0/0
Smallest/average/largest padding: 0/0/0
Number of dead records: 3
Smallest/average/largest dead records: 32/32/32
Number of free records: 1
Smallest/average/largest free records: 7304/7304/7304
Number of hash chains: 131
Smallest/average/largest hash chains: 0/0/1
Number of uncoalesced records: 0
Smallest/average/largest uncoalesced runs: 0/0/0
Percentage keys/data/padding/free/dead/rechdrs&tailers/hashes: 0/0/0/89/1/1/6
tdb>
tdb> insert HOGEHOGE01 fugafuga01   <--- レコードを追加
tdb> insert HOGEHOGE02 fugafuga02   <--- レコードを追加
tdb> insert HOGEHOGE03 fugafuga03   <--- レコードを追加
tdb>
tdb> info
Size of file/data: 8192/60
Number of records: 3   <--- レコードが3件になっている
Smallest/average/largest keys: 10/10/10
Smallest/average/largest data: 10/10/10
Smallest/average/largest padding: 12/12/12
Number of dead records: 3
Smallest/average/largest dead records: 32/32/32
Number of free records: 1
Smallest/average/largest free records: 7136/7136/7136
Number of hash chains: 131
Smallest/average/largest hash chains: 0/0/1
Number of uncoalesced records: 0
Smallest/average/largest uncoalesced runs: 0/0/0
Percentage keys/data/padding/free/dead/rechdrs&tailers/hashes: 0/0/0/87/1/2/6
tdb>
tdb> dump   <--- dumpすると登録された3件のレコードが確認できる

key 10 bytes
HOGEHOGE03
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 33                    fugafuga 03

key 10 bytes
HOGEHOGE01
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 31                    fugafuga 01

key 10 bytes
HOGEHOGE02
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 32                    fugafuga 02
tdb>
tdb> erase   <--- すべてのレコードを削除する
tdb>
tdb> info
Size of file/data: 8192/0
Number of records: 0   <--- レコードが0件になっている
Smallest/average/largest keys: 0/0/0
Smallest/average/largest data: 0/0/0
Smallest/average/largest padding: 0/0/0
Number of dead records: 3
Smallest/average/largest dead records: 32/32/32
Number of free records: 3
Smallest/average/largest free records: 32/2418/7136
Number of hash chains: 131
Smallest/average/largest hash chains: 0/0/1
Number of uncoalesced records: 2
Smallest/average/largest uncoalesced runs: 2/2/2
Percentage keys/data/padding/free/dead/rechdrs&tailers/hashes: 0/0/0/89/1/2/6
tdb>
tdb> dump   <--- dumpしても何も表示されない(=レコードがない)
tdb>
tdb> q
[root@rocky9-samba31 ~]#

~tdbtoolによるレコード操作~

show:レコードを表示

tdb> show USER_user001\00

key 13 bytes
USER_user001
data 195 bytes
[000] 00 00 00 00 7F A9 54 7C  7F A9 54 7C 00 00 00 00  ......T| ..T|...
[010] ED FC 7B 64 00 00 00 00  7F A9 54 7C 08 00 00 00  ..{d... ..T|...
[020] 75 73 65 72 30 30 31 00  0F 00 00 00 52 4F 43 4B  user001 ....ROCK
[030] 59 39 2D 53 41 4D 42 41  33 31 00 01 00 00 00 00  Y9-SAMBA 31.....
[040] 01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ....... .......
[050] 00 00 00 00 00 01 00 00  00 00 01 00 00 00 00 01  ....... ........
[060] 00 00 00 00 01 00 00 00  00 E8 03 00 00 01 02 00  ....... .......
[070] 00 00 00 00 00 10 00 00  00 88 46 F7 EA EE 8F B1  ....... ..F.....
[080] 17 AD 06 BD D8 30 B7 58  6C 00 00 00 00 10 00 00  .....0.X l......
[090] 00 A8 00 15 00 00 00 20  00 00 00 FF FF FF FF FF  .......  ........
[0A0] FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ........ ........
[0B0] 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 EC  ....... ........
[0C0] 04 00 00                                          ..
tdb>


insert:レコードの追加

tdb>
tdb> insert HOGEHOGE hogehoge
tdb>
tdb> show HOGEHOGE

key 8 bytes
HOGEHOGE
data 8 bytes
[000] 66 75 67 61 66 75 67 61                           hogehoge
tdb>
tdb> quite

store:レコードの置換

tdb>
tdb> show HOGEHOGE

key 8 bytes
HOGEHOGE
data 8 bytes
[000] 66 75 67 61 66 75 67 61                           hogehoge
tdb>
tdb> store HOGEHOGE HOGEHOGE2
Storing key:

key 8 bytes
HOGEHOGE
data 9 bytes
[000] 48 4F 47 45 48 4F 47 45  32                       HOGEHOGE 2
tdb>

delete:レコードの削除

tdb>
tdb> delete HOGEHOGE
tdb>
tdb> show HOGEHOGE
fetch failed
tdb>

move:レコードの移動
以下の操作例では、hogehoge.tdbとfugafuga.tdbを作成し、それぞれに3件と5件のレコードを追加したのち、レコードの移動の様子を確認しています。 動作自体は "移動" ではなく "コピー" のようです。

tdb>

★ TDBを新規作成 ★
tdb> create /usr/local/samba/private/hogehoge.tdb
tdb> create /usr/local/samba/private/fugafuga.tdb
tdb>

★ hogehoge.tdbにレコードを追加 ★
tdb> open /usr/local/samba/private/hogehoge.tdb
tdb>
tdb> insert HOGEHOGE01 hogehoge01
tdb> insert HOGEHOGE02 hogehoge02
tdb> insert HOGEHOGE03 hogehoge03
tdb>
tdb> info /usr/local/samba/private/fugafuga.tdb
Size of file/data: 8192/60
Number of records: 3   <--- レコード3件 
     :
tdb>
tdb> dump

key 10 bytes
HOGEHOGE03
data 10 bytes
[000] 68 6F 67 65 68 6F 67 65  30 33                    hogehoge 03

key 10 bytes
HOGEHOGE01
data 10 bytes
[000] 68 6F 67 65 68 6F 67 65  30 31                    hogehoge 01

key 10 bytes
HOGEHOGE02
data 10 bytes
[000] 68 6F 67 65 68 6F 67 65  30 32                    hogehoge 02
tdb>

★ fugafuga.tdbにレコードを追加 ★
tdb> open /usr/local/samba/private/fugafuga.tdb
tdb>
tdb> insert FUGAFUGA01 fugafuga01
tdb> insert FUGAFUGA02 fugafuga02
tdb> insert FUGAFUGA03 fugafuga03
tdb> insert FUGAFUGA04 fugafuga04
tdb> insert FUGAFUGA05 fugafuga05
tdb>
tdb> info
Size of file/data: 8192/100
Number of records: 5   <--- レコード5件
     :
tdb>
tdb> dump

key 10 bytes
FUGAFUGA05
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 35                    fugafuga 05

key 10 bytes
FUGAFUGA03
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 33                    fugafuga 03

key 10 bytes
FUGAFUGA01
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 31                    fugafuga 01

key 10 bytes
FUGAFUGA04
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 34                    fugafuga 04

key 10 bytes
FUGAFUGA02
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 32                    fugafuga 02
tdb>

★ fugafuga.tdb の FUGAFUGA05 を hogehoge.tdb に移動
tdb>
tdb> open /usr/local/samba/private/fugafuga.tdb
tdb>
tdb> dump

key 10 bytes
FUGAFUGA05
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 35                    fugafuga 05

key 10 bytes
FUGAFUGA03
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 33                    fugafuga 03

key 10 bytes
FUGAFUGA01
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 31                    fugafuga 01

key 10 bytes
FUGAFUGA04
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 34                    fugafuga 04

key 10 bytes
FUGAFUGA02
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 32                    fugafuga 02
tdb>
tdb> move FUGAFUGA05 /usr/local/samba/private/hogehoge.tdb   <--- 移動する

key 10 bytes
FUGAFUGA05
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 35                    fugafuga 05
record moved
tdb>
tdb> dump

key 10 bytes
FUGAFUGA05
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 35                    fugafuga 05   <--- moveしても消えてしまうわけではない

key 10 bytes
FUGAFUGA03
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 33                    fugafuga 03

key 10 bytes
FUGAFUGA01
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 31                    fugafuga 01

key 10 bytes
FUGAFUGA04
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 34                    fugafuga 04

key 10 bytes
FUGAFUGA02
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 32                    fugafuga 02
tdb>

★ hogehoge.tdb に FUGAFUGA05 があるかを確認する★
tdb>
tdb> open /usr/local/samba/private/hogehoge.tdb
tdb>
tdb> info
Size of file/data: 8192/80
Number of records: 4   <--- レコードが3件から4件に増えている
     :
tdb>
tdb> dump

key 10 bytes
FUGAFUGA05
data 10 bytes
[000] 66 75 67 61 66 75 67 61  30 35                    fugafuga 05  <--- fugafuga.tdbからコピーされた

key 10 bytes
HOGEHOGE03
data 10 bytes
[000] 68 6F 67 65 68 6F 67 65  30 33                    hogehoge 03

key 10 bytes
HOGEHOGE01
data 10 bytes
[000] 68 6F 67 65 68 6F 67 65  30 31                    hogehoge 01

key 10 bytes
HOGEHOGE02
data 10 bytes
[000] 68 6F 67 65 68 6F 67 65  30 32                    hogehoge 02
tdb>

参考文献


いいなと思ったら応援しよう!