Red Hat Training

A Red Hat training course is available for RHEL 8

3.20. 经常使用 Samba 命令行工具

本章论述了使用 Samba 服务器时经常使用的命令。

3.20.1. 使用 net ads join 和 net rpc join 命令

使用 net 工具的 join 子命令,您可以将 Samba 加入到 AD 或 NT4 域。要加入域,您必须手动创建 /etc/samba/smb.conf 文件,并有选择地更新其他配置,如 PAM。

重要

红帽建议使用 realm 工具来加入域。realm 工具自动更新所有涉及的配置文件。

流程

  1. 使用以下设置手动创建 /etc/samba/smb.conf 文件:

    • 对于 AD 域成员:

      [global]
      workgroup = domain_name
      security = ads
      passdb backend = tdbsam
      realm = AD_REALM
    • 对于 NT4 域成员:

      [global]
      workgroup = domain_name
      security = user
      passdb backend = tdbsam
  2. * 默认域和要加入到 /etc/samba/smb.conf 文件中 [global] 部分的域添加 ID 映射配置。
  3. 验证/etc/samba/smb.conf文件:

    # testparm
  4. 以域管理员身份加入域:

    • 加入 AD 域:

      # net ads join -U "DOMAIN\administrator"
    • 要加入 NT4 域:

      # net rpc join -U "DOMAIN\administrator"
  5. winbind 源追加到 /etc/nsswitch.conf 文件中的 passwdgroup 数据库条目中:

    passwd:     files winbind
    group:      files winbind
  6. 启用并启动 winbind 服务:

    # systemctl enable --now winbind
  7. (可选)使用 authselect 工具来配置 PAM。

    详情请查看 authselect(8) 手册页。

  8. 另外,对于 AD 环境,配置 Kerberos 客户端。

    详情请查看您的 Kerberos 客户端文档。

3.20.2. 使用 net rpc right 命令

在 Windows 中,您可以为帐户和组分配特权来执行特殊操作,如对共享设置 ACL 或上传打印机驱动程序。在 Samba 服务器上,您可以使用 net rpc permissions 命令来管理特权。

列出您可以设置的权限

若要列出所有可用的特权及其所有者,可使用 net rpc permissions list 命令。例如:

# net rpc rights list -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
     SeMachineAccountPrivilege  Add machines to domain
      SeTakeOwnershipPrivilege  Take ownership of files or other objects
             SeBackupPrivilege  Back up files and directories
            SeRestorePrivilege  Restore files and directories
     SeRemoteShutdownPrivilege  Force shutdown from a remote system
      SePrintOperatorPrivilege  Manage printers
           SeAddUsersPrivilege  Add users and groups to the domain
       SeDiskOperatorPrivilege  Manage disk shares
           SeSecurityPrivilege  System security
授予权限

若要为帐户或组赋予特权,可使用 net rpc rights grant 命令。

例如,将SePrintOperatorPrivilege 特权赋予 DOMAIN\printadmin 组 :

# net rpc rights grant "DOMAIN\printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.
撤销权限

若要从帐户或组撤销特权,可使用 net rpc rights revoke 命令。

例如,要对DOMAIN\printadmin 组撤销 SePrintOperatorPrivilege 特权:

# net rpc rights remoke "DOMAIN\printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully revoked rights.

3.20.3. 使用 net rpc share 命令

net rpc share 命令提供了在本地或远程 Samba 或 Windows 服务器上列出、添加和删除共享的功能。

列出共享

若要列出 SMB 服务器上的共享,请使用 net rpc share list 命令。(可选)将 -S server_name 参数传给命令,以列出远程服务器的共享。例如:

# net rpc share list -U "DOMAIN\administrator" -S server_name
Enter DOMAIN\administrator's password:
IPC$
share_1
share_2
...
注意

/etc/samba/smb.conf 文件中设置了 browseable = no 的、托管在 Samba 服务器上的共享不会显示在输出中。

添加共享

net rpc share add 命令允许您向 SMB 服务器添加共享。

例如,要在共享 C:\example\ 目录的远程 Windows 服务器中添加一个名为 example 的共享:

# net rpc share add example="C:\example" -U "DOMAIN\administrator" -S server_name
注意

在指定 Windows 目录名称时,您必须省略路径中的结尾反斜杠。

使用命令在 Samba 服务器中添加共享:

  • -U 参数中指定的用户必须拥有在目标服务器上赋予了 SeDiskOperatorPrivilege 的特权。
  • 您必须编写一个脚本,其在 /etc/samba/smb.conf 文件中添加共享部分,并重新加载 Samba 。该脚本必须在 /etc/samba/smb.conf[global] 部分中的 add share command 参数中设置。详情请查看 smb.conf(5) 手册页中的 add share command 描述。
删除共享

net rpc share delete 命令允许您从 SMB 服务器中删除共享。

例如,要从远程 Windows 服务器中删除名为 example 的共享:

# net rpc share delete example -U "DOMAIN\administrator" -S server_name

使用命令从 Samba 服务器中删除共享:

  • -U 参数中指定的用户必须被赋予了 SeDiskOperatorPrivilege 特权。
  • 您必须编写一个脚本,其从 /etc/samba/smb.conf 文件中删除共享的部分,并重新加载 Samba 。该脚本必须在 /etc/samba/smb.conf[global] 部分中的 delete share command 参数中设置。详情请查看 smb.conf(5) 手册页中的 delete share command 描述。

3.20.4. 使用 net user 命令

net user 命令允许您在 AD DC 或 NT4 PDC 中执行以下操作:

  • 列出所有用户帐户
  • 添加用户
  • 删除用户
注意

只有在列出域用户帐户时,才需要指定连接方法,如 AD 域的ads 或 NT4 域的rpc 。其他用户相关的子命令可以自动探测连接方法。

-U user_name 参数传给命令,以指定允许执行所请求的操作的用户。

列出域用户帐户

列出 AD 域中的所有用户:

# net ads user -U "DOMAIN\administrator"

列出 NT4 域中的所有用户:

# net rpc user -U "DOMAIN\administrator"
在域中添加用户帐户

在 Samba 域成员中,您可以使用 net user add 命令将用户帐户添加到域。

例如,将 user 账户添加到域:

  1. 添加帐户:

    # net user add user password -U "DOMAIN\administrator"
    User user added
  2. (可选)使用远程过程调用(RPC)shell 来启用 AD DC 或 NT4 PDC 中的帐户。例如:

    # net rpc shell -U DOMAIN\administrator -S DC_or_PDC_name
    Talking to domain DOMAIN (S-1-5-21-1424831554-512457234-5642315751)
    
    net rpc> user edit disabled user: no
    Set user's disabled flag from [yes] to [no]
    
    net rpc> exit
从域中删除用户帐户

对于 Samba 域成员,您可以使用 net user delete 命令从域中删除用户帐户。

例如,从域中删除 user 账户:

# net user delete user -U "DOMAIN\administrator"
User user deleted

3.20.5. 使用 rpcclient 工具

The rpcclient 工具可让您在本地或远程 SMB 服务器上手动执行客户端 Microsoft 远程过程调用(MS-RPC)功能。但是,大部分特性都已集成到 Samba 提供的单独工具中。使用 rpcclient 只用于测试 MS-PRC 功能。

先决条件

  • samba-client 软件包已安装。
示例

例如,您可以使用 rpcclient 工具来:

  • 管理打印机假脱机子系统(SPOOLSS)。

    例 3.7. 将驱动程序分配给打印机

    # rpcclient server_name -U "DOMAIN\administrator" -c 'setdriver "printer_name" "driver_name"'
    Enter DOMAIN\administrators password:
    Successfully set printer_name to driver driver_name.
  • 检索有关 SMB 服务器的信息。

    例 3.8. 列出所有文件共享和共享的打印机

    # rpcclient server_name -U "DOMAIN\administrator" -c 'netshareenum'
    Enter DOMAIN\administrators password:
    netname: Example_Share
    	remark:
    	path:   C:\srv\samba\example_share\
    	password:
    netname: Example_Printer
    	remark:
    	path:   C:\var\spool\samba\
    	password:
  • 使用安全帐户管理器远程(SAMR)协议来执行操作。

    例 3.9. 在 SMB 服务器中列出用户

    # rpcclient server_name -U "DOMAIN\administrator" -c 'enumdomusers'
    Enter DOMAIN\administrators password:
    user:[user1] rid:[0x3e8]
    user:[user2] rid:[0x3e9]

    如果您针对独立服务器或域成员运行命令,它将列出本地数据库中的用户。针对 AD DC 或 NT4 PDC 运行命令列出域用户。

其它资源

  • rpcclient(1) 手册页

3.20.6. 使用 samba-regedit 应用程序

某些设置(如打印机配置)存储在 Samba 服务器上的注册表中。您可以使用基于 ncurses 的 samba-regedit 应用程序来编辑 Samba 服务器的注册表。

samba regedit

先决条件

  • samba-client 软件包已安装。

流程

要启动应用程序,请输入:

# samba-regedit

使用以下键:

  • 上键和下键:在注册表树和值中进行导航。
  • Enter:打开关键字或编辑值。
  • 选项卡 :在 KeyValue 窗格间切换。
  • Ctrl+C:关闭应用程序。

3.20.7. 使用 smbcontrol 工具

smbcontrol 工具允许您向 smbdnmbdwinbindd 或 所有这些服务发送命令消息。这些控制消息指示服务重新载入其配置。

先决条件

  • samba-common-tools 软件包已安装。

流程

  • 通过将 reload-config 消息类型发送到 所有 目的地,来重新载入 smbdnmbdwinbindd 服务的配置:
# smbcontrol all reload-config

其它资源

  • smbcontrol(1) 手册页

3.20.8. 使用 smbpasswd 工具

smbpasswd 工具管理本地 Samba 数据库中的用户帐户和密码。

先决条件

  • samba-common-tools 软件包已安装。

流程

  1. 如果您以用户身份运行命令,smbpasswd 将修改运行命令的用户的 Samba 密码。例如:

    [user@server ~]$ smbpasswd
    New SMB password: password
    Retype new SMB password: password
  2. 如果以 root 用户身份运行 smbpasswd,例如,您可以使用该工具来:

    • 创建一个新用户:

      [root@server ~]# smbpasswd -a user_name
      New SMB password: password
      Retype new SMB password: password
      Added user user_name.
      注意

      在将用户添加到 Samba 数据库之前,您必须先在本地操作系统中创建帐户。请参阅配置基本系统设置指南中的 从命令行添加新用户 部分。

    • 启用 Samba 用户:

      [root@server ~]# smbpasswd -e user_name
      Enabled user user_name.
    • 禁用 Samba 用户:

      [root@server ~]# smbpasswd -x user_name
      Disabled user user_name
    • 删除用户:

      [root@server ~]# smbpasswd -x user_name
      Deleted user user_name.

其它资源

  • smbpasswd(8) 手册页

3.20.9. 使用 smbstatus 工具

smbstatus 工具报告,关于:

  • 每个 smbd 守护进程的每个 PID 到 Samba 服务器的连接。此报告包括用户名、主组群、SMB 协议版本、加密和签名信息。
  • 每个 Samba 共享的连接。此报告包括 smbd 守护进程的 PID、连接机器的 IP、连接建立的时间戳、加密和签名信息。
  • 锁定文件列表。报告条目包括更多详情,如 Opportunistic lock(oplock)类型

先决条件

  • samba 软件包已安装。
  • smbd 服务在运行。

流程

# smbstatus

Samba version 4.15.2
PID  Username              Group                Machine                            Protocol Version  Encryption  Signing
....-------------------------------------------------------------------------------------------------------------------------
963  DOMAIN\administrator  DOMAIN\domain users  client-pc  (ipv4:192.0.2.1:57786)  SMB3_02           -           AES-128-CMAC

Service  pid  Machine    Connected at                  Encryption  Signing:
....---------------------------------------------------------------------------
example  969  192.0.2.1  Thu Nov  1 10:00:00 2018 CEST  -           AES-128-CMAC

Locked files:
Pid  Uid    DenyMode   Access    R/W     Oplock      SharePath           Name      Time
....--------------------------------------------------------------------------------------------------------
969  10000  DENY_WRITE 0x120089  RDONLY  LEASE(RWH)  /srv/samba/example  file.txt  Thu Nov  1 10:00:00 2018

其它资源

  • smbstatus(1) 手册页

3.20.10. 使用 smbtar 工具

smbtar 工具备份 SMB 共享的内容或其子目录,并将内容存储在 tar 存档中。或者,您可以将内容写入磁带设备。

先决条件

  • samba-client 软件包已安装。

流程

  • 使用以下命令备份 //server/example/ 共享中 demo 目录的内容,并将内容存储在 /root/example.tar 归档中:

    # smbtar -s server -x example -u user_name -p password -t /root/example.tar

其它资源

  • smbtar(1) 手册页

3.20.11. 使用 wbinfo 工具

wbinfo 工具查询并返回 winbindd 服务创建和使用的信息。

先决条件

  • samba-winbind-clients 软件包已安装。

流程

例如,您可以使用 wbinfo 来:

  • 列出域用户:

    # wbinfo -u
    AD\administrator
    AD\guest
    ...
  • 列出域组:

    # wbinfo -g
    AD\domain computers
    AD\domain admins
    AD\domain users
    ...
  • 显示用户的 SID:

    # wbinfo --name-to-sid="AD\administrator"
    S-1-5-21-1762709870-351891212-3141221786-500 SID_USER (1)
  • 显示域和信任的信息:

    # wbinfo --trusted-domains --verbose
    Domain Name   DNS Domain            Trust Type  Transitive  In   Out
    BUILTIN                             None        Yes         Yes  Yes
    server                              None        Yes         Yes  Yes
    DOMAIN1       domain1.example.com   None        Yes         Yes  Yes
    DOMAIN2       domain2.example.com   External    No          Yes  Yes

其它资源

  • wbinfo(1) 手册页