成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Samba下的Trivial Database文件

運維 系統運維
Samba 使用 Trivial Database 文件來存儲永久性和臨時性數據,作為其在 Linux 和 Windows 之間的工作集成文件和打印共享的一部分。本文將主要講解有關 Samba 用來存儲信息的 Samba Trivial Database (TDB) 格式、如何查看 TDB 文件內部以及如何將它們備份的所有信息。

 Samba 使用 Trivial Database 文件來存儲永久性和臨時性數據,作為其在 Linux 和 Windows 之間的工作集成文件和打印共享的一部分。本文將主要講解有關 Samba 用來存儲信息的 Samba Trivial Database (TDB) 格式、如何查看 TDB 文件內部以及如何將它們備份的所有信息。

了解 TDB 文件

在運行時,Samba 存儲許多信息,從本地密碼到希望從中收到信息的一系列客戶端。這類數據其中一些是暫時的,在 Samba 重啟時可能會被丟棄,但是另一些卻是永久的,不會被丟棄。這類數據可能是很大的,也可能是不經常訪問只是在內存中保留,或者在重啟時保持存在。要滿足這些要求,Samba 團隊創建了 Trivial Database。它實際上是一個鍵值存儲,這意味著數據通過惟一鍵的方式存儲和檢索,且沒有像在關系數據庫中那樣的表聯接。鍵值存儲 — 尤其是 TDB — 被設計成將數據存儲到磁盤并將其取回的一種快速方式。

鍵值存儲

雖然有許多 TDB 的替代品,例如 GNU 數據庫管理器(GNU Database Manager,GDBM),但是 Samba 項目特別需要多個進程同時向數據庫寫入以及支持鎖定數據的內部片段。因此,該團隊構建了它們自己的數據庫管理器并稱其為 Trivial Database 管理器。通過集群 TDB(Clustered TDB,CTDB)項目,TDB 已經擴展為支持集群的操作且可用于其他項目。

如果您熟悉關系數據庫,例如 IBM DB2、MySQL 或 PostgreSQL,則相比之下您將發現鍵值存儲非常簡單。關系數據庫可能有包含多個列的表,而鍵值存儲實際上有兩列:鍵列和值列。關系數據庫使用結構化查詢語言(Structured Query Language,SQL)以便從多個表和列中提取信息,但是鍵值存儲僅限于對鍵列的操作。

由于其簡單,鍵值存儲對于較小系列的作業非常有用,而且可以非常快速地執行那些作業。鍵值存儲從基本上說就是磁盤上的哈希表,因此在無需借助索引的情況下可以猜測一塊數據的位置。

TDB 特別被編寫來處理許多并發的編寫器和二進制數據,例如內部數據結構。因此,存儲并檢索此數據的最快方式是運用二進制格式。二進制存儲意味著數據庫文件可以更小,且在數據移入和移出數據庫時無需在不同格式之間轉換數據。

用于 Samba 的 TDB 文件

Samba 在幾個不同的地方存儲其 TDB 文件。找到這些文件的最容易方式是查看 smbd -b 的輸出,如清單 1 所示。

清單 1. 顯示 smbd 構建信息

# smbd -b
...
Paths:
SBINDIR: /usr/sbin
BINDIR: /usr/bin
SWATDIR: /usr/share/swat
CONFIGFILE: /etc/samba/smb.conf
LOGFILEBASE: /var/log/samba
LMHOSTSFILE: /etc/samba/lmhosts
LIBDIR: /usr/lib
MODULESDIR: /usr/lib/samba
SHLIBE1T: so
LOCKDIR: /var/lib/samba
STATEDIR: /var/lib/samba
CACHEDIR: /var/lib/samba
PIDDIR: /var/run
SMB_PASSWD_FILE: /var/lib/samba/private/smbpasswd
PRIVATE_DIR: /var/lib/samba/private

清單 1 中的多個路徑均指向帶有 TDB 文件的位置。幸運的是,許多都是相同的,這會減少您需要查看的位置。例如,LOCKDIR、STATEDIR 和 CACHEDIR 都指向 /var/lib/samba,且 PRIVATE_DIR 位于稱為私有 的子目錄中。您可以進入那些子目錄并查看自己需要的文件。

TDB 文件大致可分為兩組:持久的和臨時的。表 1 顯示了持久文件的名稱和功能。

Table 1. 持久的 TDB 文件

文件名 目的
account_policy.tdb 存儲帳戶策略,例如鎖定閾值和密碼長度
group_mapping.tdb 存儲 Windows NT 用戶標識符 (SID) 和 UNIX® 用戶 ID 之間的關系
ntdrivers.tdb 存儲有關打印機驅動程序的信息
ntforms.tdb 存儲有關打印隊列形式的信息 — 例如,紙張大小
ntprinters.tdb 存儲有關打印機初始化設置的信息
passdb.tdb 僅用于一些安全模式以便存儲認證證書
registry.tdb 可通過其他 Windows 系統訪問的骨架注冊表
secrets.tdb 存儲本地秘密,例如類似輕量級目錄訪問協議(Lightweight Directory Access Protocol,LDAP)密碼的工作站計算機密鑰和憑證
share_info.tdb 為每一個本地共享存儲訪問控件列表(Access Control List,ACL)信息
winbindd_idmap.tdb 如果您正在使用 winbind,那么持久存儲 Windows NT SID 和動態創建的用戶之間的映射信息

應該備份如表 1 所示的 TDB 文件。本文后面會提供此操作的過程。

另外,存在許多存儲狀態信息和緩存數據的臨時 TDB 文件。因為在 Samba 啟動時會重建這些文件,所以無需備份它們。

#p#

使用 TDB 文件

Samba 附帶了三種用于處理 TDB 文件的工具:

●tdbdump:打印 TDB 文件的內容。

●tdbbackup:備份并驗證 TDB 文件。

●tdbtool:創建、查看并修改 TDB 文件。

快速查看 TDB 文件內部

查看 TDB 文件中的內容的最快方式是通過 tdbdump 命令將其轉儲。清單 2 顯示了 ntprinters.tdb 文件的轉儲。

清單 2. 在 TDB 文件上使用 tdbdump

[root@bob ~]# tdbdump /var/lib/samba/ntprinters.tdb
{
key(21) = "GLOBALS/c_setprinter\00"
data(4) = "\00\00\00\00"
}
{
key(13) = "SECDESC/test\00"
data(140) = "\80\00\00\00\00\00\02\00\80\00\00\00\01\00\04\80\14\00\00\00$\00\00
\00\00\00\00\004\00\00\00\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00\01\02\00\00
...
\00 \02\00\00\00\02\18\00\0C\00\0F\10\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00"
}
{
key(17) = "SECDESC/cups-pdf\00"
data(140) = "\80\00\00\00\00\00\02\00\80\00\00\00\01\00\04\80\14\00\00\00$\00\00
\00\00\00\00\004\00\00\00\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00\01\02\00\00
...
\00 \02\00\00\00\02\18\00\0C\00\0F\10\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00"
}

從清單 2 的輸出,您可以看到在數據庫中有三個鍵。第一個鍵為 21 字節(字節長度顯示在括號中 [()]),被稱為GLOBALS/c_setprinter,后跟 NULL,其為 ASCII 碼零。非輸出字符用十六進制格式顯示,其是后跟兩個十六進制字符的反斜線。第一個鍵的值為 4 字節且其完全為 NULL。

接下來的兩個鍵被稱為 SECDESC/test 和 SECDESC/cups-pdf 且兩個都是以 NULL 結束。因為該數據完全是二進制且不可輸出,所以已經以十六進制格式的非輸出字符輸出了。

備份并恢復 TDB 文件

表 1 顯示了幾種在重啟持久存在并應該備份的 TDB 文件。像大多數數據庫那樣,您不能只復制文件,因為復制可能會損壞。如果文件正在被寫入時您復制該文件,會發生備份損壞,從而您具有處于不一致狀態的備份。一個替代辦法是關閉 Samba 守護進程,然后復制這些文件。

備份 TDB 文件最容易的方式是使用 Samba 附帶的 tdbbackup 實用工具。此實用工具可以安全復制 TDB 文件,即使其正在被積極地寫入。tdbbackup 的另一幫助功能是可以查看 TDB 文件是否損壞,且如果發現損壞則自動恢復為備份文件。清單 3 顯示了正在備份的 TDB 文件。

清單 3. 備份 TDB 文件

[root@bob samba]# ls -l account_policy.*
-rw------- 1 root root 8192 Apr 7 2008 account_policy.tdb
[root@bob samba]# tdbbackup account_policy.tdb
[root@bob samba]# ls -l account_policy.*
-rw------- 1 root root 8192 Apr 7 2008 account_policy.tdb
-rw------- 1 root root 36864 Dec 8 21:42 account_policy.tdb.bak
[root@bob samba]# tdbdump account_policy.tdb | md5sum
53ea608f0d93061480549c511756b778 -
[root@bob samba]# tdbdump account_policy.tdb.bak | md5sum
53ea608f0d93061480549c511756b778 -

清單 3 中的第一個命令簡要列出了所有以 account_policy 開始的文件,以便確認只存在一份副本。接下來通過運行 tdbbackup account_policy.tdb 來備份帳戶策略數據庫。第三個命令尋找任何以 account_policy 開始的文件,以便顯示已經創建的帶有 .bak 擴展名的新文件。雖然大小不同于原文件,但是轉儲每一個文件并計算 MD5 哈希顯示了它們的校驗和是相同的。因此更大的文件大小并不是問題,因為每個鍵值對的內容是相同的。

如果由于某種原因原始的 account_policy.tdb 文件受到損壞,例如在系統不正常關機期間,您可以從其備份恢復舊的文件。清單 4 顯示了此過程。

清單 4. 驗證并恢復 TDB 文件

[root@bob samba]# ls -l account_policy.tdb
-rw------- 1 root root 1213 Dec 8 21:49 account_policy.tdb
[root@bob samba]# tdbbackup -v account_policy.tdb
tdb_oob len 1256 beyond eof at 1213
restoring account_policy.tdb
[root@bob samba]# ls -l account_policy.tdb*
-rw------- 1 root root 36864 Dec 8 21:49 account_policy.tdb
-rw------- 1 root root 36864 Dec 8 21:42 account_policy.tdb.bak
[root@bob samba]# tdbbackup -v account_policy.tdb
account_policy.tdb : 17 records
[root@bob samba]# tdbdump account_policy.tdb | md5sum
53ea608f0d93061480549c511756b778 -

清單 4 中的第一個命令顯示文件大小已經顯著地減少。tdbbackup 命令再次運行,但是帶有 -v 標記,其驗證 TDB 文件。如果該文件受到損壞,您將看到錯誤摘要,后面是文件已經恢復的通知。通過 ls 命令比較文件的大小,您可以看到備份被用于替換當前的數據庫。

您可以安全地多次運行 tdbbackup 命令。在有效的數據庫文件上運行它,類似 清單 4 中的倒數第二個命令, 則會提供文件中的記錄數。MD5 總和與損壞之前所看到的相匹配。

注意:tdbbackup 命令接受通配,所以您可以同時備份并驗證多個文件。

變更 TDB 文件

tdbtool 實用工具使您可以更改 TDB 文件內部的數據。此實用工具還檢查文件內的個別鍵和值,而不必轉儲整個文件并對整個輸出排序。

tdbtool 可在命令行上接受命令,或者您可以打開交互式控制臺。要在命令行上完成任務,請運行 tdbtool example.tdb command options,其中 example.tdb 是文件名,command 是命令,針對命令的選項位于最后。要使用 tdb shell,只需單獨運行 tdbtool 或在命令行上傳遞文件的名稱。

要創建數據庫,請單獨運行 tdbtool,然后輸入 create test.tdb。這樣做可以在磁盤上創建名為 test.tdb 的數據庫并打開它以便您在此會話中進行的任何變更都在該文件上。如果您有現成的 TDB 文件,您可以在命令行上指定該名稱或使用 open 命令。奇怪的是,直接從命令行創建 TDB 文件的惟一方式涉及指定名稱兩次,例如 tdbtool test.tdb create test.tdb,其返回一個錯誤但成功地創建一個數據庫。

在您創建完數據庫或者打開現有數據庫時,可以使用以下選項:

●dump:顯示數據庫中的所有內容,就像 tdbdump。

●keys:只以 ASCII 顯示鍵,或通過 hexkeys 命令,用十六進制格式顯示它們。

●erase:在沒有提示的情況下刪除數據庫中的所有內容。

●info:顯示數據庫使用的鍵和字節數的概要。

●check:查看數據庫是否有效。

●speed:執行測試以便查看數據以多快的速度讀取并寫入數據庫。

●show key:輸出與鍵存儲在一起的值。

●delete key:刪除鍵和值。

要添加并處理數據,您需要有 insert 和 store 命令。它們每一個都接受鍵和值的參數,值為可選。如果您不指定一個值,那么您將看到鍵在值中存儲零字節數據。

插入記錄 意味著創建新的記錄,而存儲記錄 可以覆蓋現有的條目。清單 5 顯示了這兩個命令之間的差異。

清單 5. 存儲與插入記錄

tdb> insert mykey myvalue
tdb> insert mykey newvalue
insert failed
tdb> store mykey newvalue
Storing key:
key 5 bytes
mykey
data 8 bytes
[000] 6E 65 77 76 61 6C 75 65 newvalue
tdb> store newkey someothervalue
Storing key:
key 6 bytes
newkey
data 14 bytes
[000] 73 6F 6D 65 6F 74 68 65 72 76 61 6C 75 65 someothe rvalue

清單 5 中的事件順序是:

1、插入名為 mykey 的鍵,具有值 myvalue。此操作成功。

2、插入與以前名稱相同的鍵但是具有新的值。此操作失敗,因為鍵已經存在。

3、存儲鍵而不是插入它。此操作成功,且您將獲得更詳細的輸出。

4、存儲具有新值的新鍵。即使鍵不存在此操作也會成功。

您可以在 tdb shell 中使用事務,以便允許您運行一系列命令并作為一個組應用它們,或者作為一個組取消它們。清單 6 顯示了兩個事務。

清單 6. 使用事務

tdb> transaction_start
tdb> insert somekey somevalue
tdb> show somekey
key 7 bytes
somekey
data 9 bytes
[000] 73 6F 6D 65 76 61 6C 75 65 somevalu e
tdb> transaction_cancel
tdb> show somekey
fetch failed
tdb> transaction_start
tdb> insert somekey somevalue
tdb> transaction_commit
tdb> show somekey
key 7 bytes
somekey
data 9 bytes
[000] 73 6F 6D 65 76 61 6C 75 65 somevalu e

該事務首先以 transaction_start 命令開始。下一步是插入一個鍵。如果另一個進程要讀取數據庫,則不會看到此鍵,因為它是沒有提交。打開該事務的進程確實可以看到該鍵。然后,通過 transaction_cancel 取消該事務。該鍵不再出現。

然后重新運行該進程,但是通過 transaction_commit 提交事務。然后該鍵對于所有讀取器都存在。

如果您位于事務中,則其他讀取器可能受阻,這意味著它們將掛起直到事務完成。所以當在生產數據庫中使用事務時請小心!雖然它們是非常安全的功能,但是如果過度使用就會潛在地傷害性能。#p#

超越 TDB

根據您的配置,用戶帳戶可存儲在各種不同的位置,兩種工具為您提供一種命令行界面,同時也考慮到后端通信。例如,您可以使用相同的命令,即使用戶數據存儲在 LDAP 中而不是 TDB 文件中。

使用 smbpasswd

smbpasswd 實用工具可添加并刪除用戶或計算機帳戶并變更密碼。其最常用于執行后面的任務,更改當前用戶的密碼,或者根本更改其他用戶的密碼。

在后面的文章中,您將更深入地了解有關不同密碼后端的信息,但是在較高的等級上,Samba 密碼可以用幾種不同的方式進行存儲,這取決于 Samba 的制作時間和您正在集成的系統。smbpasswd 和 pdbedit(下面將進行描述)可以針對任何后端(即使它不是 TDB)執行其操作。

Microsoft 客戶端以 Microsoft 專用的哈希而不是純文本或 UNIX 密碼哈希形式在網絡中傳遞密碼。這意味著無法采用 Microsoft 密碼哈希并確定該密碼是否與存儲在 UNIX 密碼數據庫中的密碼相同。因此,Samba 必須為 Microsoft 哈希保留單獨的密碼數據庫;這就被稱為密碼后臺。

使用 pdbedit

pdbedit 管理 Samba 用戶數據庫和帳戶策略。它可以做任何事情,從而 smbpasswd 可以增加管理策略并在不同后臺之間遷移帳戶。

要顯示數據庫中的所有用戶,請運行 pdbedit -L。通過傳遞 -v 標記,您可以獲得有關用戶的更多詳細資料,如清單 7 所示。

清單 7. 用戶的詳細清單

[root@bob tmp]# pdbedit -L -v
---------------
Unix username: sean
NT username:
Account Flags: [U ]
User SID: S-1-5-21-2287037134-1443008385-640796334-1001
Primary Group SID: S-1-5-21-2287037134-1443008385-640796334-513
Full Name: Sean
Home Directory: \\bob\sean
HomeDir Drive:
Logon Script:
Profile Path: \\bob\sean\profile
Domain: BOB
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Mon, 24 May 2010 21:28:49 CDT
Password can change: Mon, 24 May 2010 21:28:49 CDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

您必須作為 root 用戶登錄,pdbedit 命令才能工作。您可以編輯各種用戶設置,例如最后登錄時間、密碼變更以及主目錄,就像您正在使用 Microsoft 實用工具一樣。

每一個用戶參數都有自己的命令行選項,為了獲得細節,請查看 pdbedit(8) 聯機幫助頁。

同樣重要的是,要注意 Samba 用類似的方式處理計算機帳戶和用戶帳戶。清單 8 顯示了配置為域控制器的 Samba 服務器的密碼數據庫。

清單 8. 密碼數據庫,包括計算機帳戶

[root@sergeant ~]# pdbedit -L
root:0:root
mythupstairs$:4294967295:MYTHUPSTAIRS
BOB$:1043:Machine
sean:1002:Sean,,,
sergeant$:4294967295:Machine

以美元符號 ($) 結束的名稱都是計算機帳戶,用于向域驗證計算機。相應的秘密將存儲在遠程服務器中的 secrets.tdb 上和域控制器中的 passdb.tdb 上。

【編輯推薦】

  1. 活用三種權限 理解Samba的權限控制
  2. Samba實用技巧:更換用戶、端口監聽、列表控制
  3. 使用GFS和DRBD在CentOS 5.5上進行Samba CTDB集群部署
責任編輯:黃丹 來源: 51CTO.com
相關推薦

2009-12-02 11:39:15

samba設置用戶

2011-09-15 14:43:27

CentOSsamba

2009-04-28 19:02:23

2023-07-27 09:11:32

ZONEINFO時區數據庫

2010-08-05 11:03:55

創建分區文件系統

2009-11-27 13:11:31

Samba做文件服務器

2009-11-26 09:02:30

Suse Linux

2022-01-04 09:36:24

Samba文件共享工具Linux

2010-01-07 10:34:28

Ubuntu samb

2010-08-26 17:11:50

DB2database Pa

2009-10-15 10:02:39

linuxyum命令詳解

2011-03-25 09:35:07

2010-01-08 17:32:11

Ubuntu samb

2009-06-16 10:10:40

JavaMail AP

2010-05-27 09:04:25

MEF架構.NET 4

2010-03-30 16:26:09

Oracle

2011-01-19 15:03:24

Qmail控制文件

2012-10-24 14:47:50

IBMdw

2018-12-25 10:36:41

TomcatServer文件

2009-06-12 16:05:47

JBoss配置
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区久久久久久久久 | 祝你幸福电影在线观看 | 网址黄 | 精品二区 | 日韩欧美一级 | 午夜欧美| 亚洲最大的成人网 | 久久久久九九九女人毛片 | 久久久噜噜噜久久中文字幕色伊伊 | 91国产视频在线 | 久草欧美视频 | 午夜精品久久 | 国产一区 | 久久一区视频 | 久久综合九色综合欧美狠狠 | 久久综合影院 | 视频一区二区三区四区五区 | 亚洲天堂久久 | 日韩视频免费 | 久久成人人人人精品欧 | 91综合在线观看 | 午夜电影网站 | 国产二区视频 | 中文字幕av中文字幕 | 久久成人免费 | 黄色日批视频 | 久在线视频播放免费视频 | 91精品国产自产精品男人的天堂 | 午夜看看 | 欧美一区二区 | 久久久男人的天堂 | www.成人免费视频 | 精品一区二区三区在线观看国产 | 99精品国产一区二区青青牛奶 | 91视频三区 | 国产一级片在线观看视频 | 国产精品久久久久久久久久久久久 | 亚洲大片一区 | 久久久精品一区 | 精品日韩一区 | 91av小视频 |