使用 pdbedit 工具查看用户
pdbedit(PassworD Base EDITor)是 Samba 提供的用于管理其密码数据库的官方命令行工具,功能强大且信息准确,是查看和管理 Samba 用户的首选方法,Samba 的用户信息(包括用户名、密码哈希、SID 等)存储在一个专门的数据库文件中(通常是 /var/lib/samba/private/passdb.tdb),pdbedit 直接与该数据库交互。

列出所有 Samba 用户
最直接、最常用的命令是 pdbedit -L(或 pdbedit --list),该命令会列出 Samba 数据库中所有已注册的用户。
[root@centos-server ~]# pdbedit -L smbuser1:1000: smbuser2:1001: testuser:1002:
从输出结果中,我们可以看到每一行代表一个 Samba 用户,格式通常为 用户名:UID:,这里的 UID 是该用户在 CentOS 系统中的用户 ID,这个列表简洁明了,快速展示了哪些系统账号已经被配置为 Samba 账号。
显示详细的用户信息
如果需要获取更详尽的信息,例如用户的登录时间、账号状态、全名等,可以使用 -v(--verbose)选项。
[root@centos-server ~]# pdbedit -L -v Unix username: smbuser1 NT username: smbuser1 Account Flags: [U ] User SID: S-1-5-21-1234567890-1234567890-1234567890-1000 Primary Group SID: S-1-5-21-1234567890-1234567890-1234567890-513 Full Name: Samba Test User 1 Home Directory: \\centos-server\smbuser1 HomeDir Drive: Logon Script: Profile Path: Domain: CENTOS-SERVER Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: never Kickoff time: never Password last set: Wed, 20 Sep 2025 10:30:00 CST Password can change: Wed, 20 Sep 2025 10:30:00 CST Password must change: never ------------------------ Unix username: smbuser2 ... (其他用户的详细信息) ...
详细输出包含了丰富的字段:
- Unix username / NT username: 分别是系统用户名和 NT 风格的用户名。
- Account Flags: 账号标志,
[U]代表普通用户,[D]代表禁用账号,[W]代表工作站信任账号等。 - User SID / Primary Group SID: 安全标识符,是 Windows 环境中用于唯一标识用户和组的 ID。
- Full Name: 用户的全称,可通过
pdbedit修改。 - Password last set: 密码最后设置时间,对于密码策略审计非常有用。
通过检查配置文件间接查看
另一种方法是通过查看 Samba 的主配置文件 /etc/samba/smb.conf 来了解哪些用户被授权访问特定的共享资源,这种方法并不能列出所有 Samba 用户,而是查看与共享资源绑定的用户列表。
在 smb.conf 中可能定义了如下共享:

[shared_data] comment = Shared Data for Sales Team path = /data/sales browseable = yes writable = yes valid users = @salesgroup, smbuser1 admin users = smbadmin
在这个例子中,通过 valid users 和 admin users 指令,我们可以知道 smbuser1 和 salesgroup 组的成员可以访问 shared_data 共享,而 smbadmin 拥有管理员权限,这种方法的局限性在于,它只显示在配置中被显式引用的用户或组,无法反映 Samba 数据库中的全貌,也无法判断这些账号是否真的已启用或密码是否有效。
Samba 用户与系统用户的概念辨析
一个常见的误区是将 CentOS 系统用户与 Samba 用户混为一谈,正确理解二者的关系至关重要。
- 前提关系:一个账号必须是 CentOS 系统中已存在的用户(即存在于
/etc/passwd文件中),才能被添加为 Samba 用户,Samba 不会凭空创建一个系统账号。 - 独立认证:成为 Samba 用户后,该账号需要设置一个独立的 Samba 密码(通过
smbpasswd -a <username>命令),这个密码存储在 Samba 的数据库中,与用户的系统登录密码可以完全不同。 - 非一一对应:并非所有系统用户都是 Samba 用户,只有那些执行了
smbpasswd -a命令并被添加到 Samba 数据库的用户,才能通过pdbedit -L查看到。
系统用户是“存在证明”,而 Samba 用户是“访问许可”,管理员需要先在系统中创建一个“人”(系统用户),然后为他颁发一张“门禁卡”(Samba 用户和密码)。
为了更直观地理解不同方法的适用场景,下表对它们进行了小编总结:
| 方法 | 命令/操作 | 用途 | 优点 | 缺点 |
|---|---|---|---|---|
| 列出所有用户 | pdbedit -L |
快速查看所有已配置的 Samba 用户列表 | 简洁、快速、权威 | 信息量有限 |
| 查看详细信息 | pdbedit -L -v |
获取单个或所有用户的详细配置和状态 | 信息全面,利于排错和审计 | 较多,不够简洁 |
| 检查配置文件 | cat /etc/samba/smb.conf |
查看特定共享资源的授权用户/组 | 直接关联共享权限,便于配置审查 | 无法列出所有用户,信息不完整 |
相关问答 (FAQs)
问题1:我如何在 CentOS 上为 Samba 添加一个新用户?
解答: 添加一个新的 Samba 用户分为两步:

- 创建系统用户(如果该用户尚不存在),使用
useradd命令创建一个标准的 Linux 系统账号,创建名为newuser的用户:sudo useradd newuser
- 将其添加到 Samba 数据库并设置密码,使用
smbpasswd -a命令,它会提示你为该用户设置一个专用于 Samba 访问的密码。sudo smbpasswd -a newuser New SMB password: Retype new SMB password: Added user newuser.
完成这两步后,
newuser就成为了一个有效的 Samba 用户,可以通过pdbedit -L查看到。
问题2:为什么我用 pdbedit -L 看到的用户数量,比系统中 cat /etc/passwd 显示的用户数量少很多?
解答:
这是完全正常的现象,正如上文“概念辨析”部分所述,系统用户和 Samba 用户不是一回事。
/etc/passwd 文件列出了 CentOS 系统中的所有账号,包括系统服务账号(如 nobody, mail 等)和普通登录账号,而 pdbedit -L 只列出了那些被明确启用并配置了 Samba 密码的账号,一个系统账号只有在管理员使用 smbpasswd -a <username> 命令将其添加到 Samba 密码数据库后,才会出现在 pdbedit 的列表中。pdbedit -L 的列表是 /etc/passwd 列表的一个子集,只包含了那些被授予了“共享访问许可”的用户。