LinuCレベル3 300試験の例題と解説

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

LinuCレベル3 300試験の試験範囲から「392.4 Sambaのトラブルシューティング」についての例題を解いてみます。
簡易データベース(TDB)ファイルを操作するコマンドについて確認しておきましょう。

Linucレベル3 300試験 出題範囲


例題

SambaのデータベースであるTDBファイルの整合性を確認するコマンドを2つ選択してください。

  1. tdbdump -e TDBファイル名
  2. tdbtools TDBファイル名 check
  3. tdbbackup -v TDBファイル名
  4. tdbdump --check TDBファイル名

※この例題は実際の試験問題とは異なります。


解答と解説

正解は、「2」と「3」です。

Sambaでは、動作中の設定情報を格納するために軽量なデータベースTrivial Database(tdb)を利用しています。
TDBはkey-value型のデータベース構造となっており、非常にシンプルに値を保持しているため、格納するデータの種類によってTDBファイルが用意されます。

例えば、Sambaの設定ファイル(smb.conf)には、パスワードを管理するデータベースを指定する「passdb backend」という項目があります。
以下はSamabの設定ファイルを抜粋したものです。

cat /etc/samba/smb.conf

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

:
:

上記のように、パスワードを管理するデータベースに「tdbsam」を指定した場合、TDBが使用されます。
この場合、パスワードは「passdb.tdb」というTDBファイルに保存されます。
TDBファイル内に格納する値は、バイナリとして扱われるため、そのままファイルを開いて中身を確認したり編集することはできません。
そこで、選択肢にあるようなTDBを扱うためのコマンドが準備されています。

それでは、選択肢を見ていきます。

1.tdbdump -e TDBファイル名
誤りです。

tdbdumpコマンドは、TDBファイルの中身を人が読めるフォーマットでダンプするコマンドです。
passwd.tdbをダンプした場合以下のように表示されます。

tdbdump passdb.tdb

{
key(13) = "RID_000003e9\00"
data(6) = "user1\00"
}
{
key(19) = "INFO/minor_version\00"
data(4) = "\00\00\00\00"
}
{
key(11) = "USER_user1\00"
data(183) = "\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00dpX_\00\00\00\00\7F\A9T|\06\00\00\00user1\00\05\00\00\00ST20\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\E9\03\00\00\01\02\00\00\00\00\00\00\10\00\00\00\00\B2\C8]\DF\BD\8C\C8\16\02\D6\FCs@\EB\0B\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"
}

:
(以下略)

なお、[-e]オプションは、破損したデータベースからダンプを試みるためのオプションです。

2.tdbtools TDBファイル名 check
正解です。

tdbtoolsコマンドはTDBファイルの内容を表示したり変更したりするコマンドです。checkサブコマンドを使用することで、データベースの整合性を検査することができます。

データベースに問題がない場合は、以下のように表示されます。

# tdbtool passdb.tdb check
Database integrity is OK and has 7 records.

3.tdbbackup -v TDBファイル名
正解です。

tdbbackupコマンドは、.tdb ファイルのバックアップを行うコマンドです。
引数にバックアップするTDBファイルを指定することで、バックアップファイルを作成することができます。

# tdbbackup passdb.tdb
# ls
msg.sock  passdb.tdb  passdb.tdb.bak  secrets.tdb

また、[-v]オプションを利用することで、データベースに破損したデータがないか整合性を検査し、もし問題があった場合は以下のようにバックアップからTDBの復元も行います。

(TDBファイルを破損)
# tdbtool passdb.tdb  check
Could not open passdb.tdb: Input/output error
database not open

([-v]オプションをつけて整合性の検査と復元を実施)
# tdbbackup -v passdb.tdb
restoring passdb.tdb

(tdbtoolで整合性が取れるようになったことを確認)
# tdbtool passdb.tdb  check
Database integrity is OK and has 7 records.

なお、整合性に問題ない場合は、以下のように表示されます。

# tdbbackup -v passdb.tdb
passdb.tdb : 7 records

4.tdbdump --check TDBファイル名
誤りです。

tdbdumpは選択肢1で解説した通り、TDBファイルの中身をダンプするコマンドです。
なお、--checkというオプションはありません。

SambaのデータベースであるTDBファイルは破損することがあります。
そのため、今回紹介した[tdbbackup]コマンドを使って定期的にバックアップを行ったり、Sambaの起動前には、TDBファイルの整合性に問題がないかなど確認するようにしましょう。


例題解説者

株式会社デージーネット OSS研究室 橋本 知里

ページトップへ