欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Samba

程序员文章站 2022-05-11 18:06:31
...

文章目录

服务器消息块(SMB)

服务器消息块(SMB)协议实现了用于访问服务器上的资源(如文件共享和共享打印机)的应用层网络协议。 在Microsoft Windows上,SMB是默认实现的。 如果运行Red Hat Enterprise Linux,则使用Samba提供SMB共享,并使用cifs-utils实用程序从远程服务器 mount SMB共享。

注释

在SMB的上下文中,您有时会阅读通用Internet文件系统 (CIFS)协议,这是SMB的一种方言。 SMB和CIFS协议都是受支持,并且mount SMB和CIFS共享涉及的内核模块和实用程序都使用名称cifs

一、SAMBA的使用

1 . 提供 SMB 共享

请参阅《红帽系统管理员指南》中的 Samba 部分。

2. 挂载SMB共享

在Red Hat Enterprise Linux上,内核的cifs.ko文件系统模块提供对SMB协议的支持。 但是,要挂载和使用SMB共享,还必须安装cifs-utils软件包:

# yum install cifs-utils

cifs utils 包提供了实用程序以:

  • 挂载SMB 和 CIFS 共享

  • 管理内核**环中的NT Lan Manager(NTLM)凭据

  • 在SMB和CIFS共享的安全描述符中设置并显示访问控制列表(ACL)

2.1 支持的SMB协议版本

cifs.ko内核模块支持以下SMB协议版本:

  • SMB 1
  • SMB 2.0
  • SMB 2.1
  • SMB 3.0

注释

根据协议版本, 并非所有 SMB 功能都实现。

2.1.1 UNIX 扩展支持

Samba使用SMB协议中的CAP_UNIX 功能位来提供UNIX 扩展功能。这些扩展也由 cifs 内核模块支持。但是, Samba和内核模块仅支持 SMB 1 协议中的UNIX扩展。

要使用 UNIX 扩展:

  • 在**/etc/samba/smb.conf文件中的[global]部分将server min protocol选项设置为NT1**。这是Samba服务器的默认设置。

  • 如果未设置 vers = protocol_version 挂载选项,则默认使用SMB 1协议挂载共享。

要验证是否启用了 UNIX 扩展, 请显示出已挂载共享的选项:

# mount
...
//server/share on /mnt type cifs (...,unix,...)

如果UNIX条目显示在装载选项列表中, 则启用UNIX扩展。

2.1.2 手动挂载SMB 共享

要手动挂载载 SMB 共享, 请使用带有-t cifs 参数的mount实用程序:

# mount -t cifs -o username=user_name //server_name/share_name /mnt/
Password for [email protected]//server_name/share_name:

在-o 选项参数中,您可以指定将用于mount共享的选项。 有关详细信息,请参见第2.2.6节“常用挂载选项”和mount.cifs(8)手册页上的OPTIONS部分。

示例1 使用加密的 SMB 3.0 连接mount共享

为通过使用以DOMAIN\Administrator用户身份和加密的SMB 3.0连接,将**\\server\example\共享挂载到/mnt/**目录中:

# mount -t cifs -o username=DOMAIN\Administrator,seal,vers=3.0 //server/example /mnt/
Password for [email protected]//server_name/share_name: ********
2.2.3 系统引导时自动挂载SMB共享

要在系统引导时自动挂载SMB共享,请将共享条目添加到**/etc/fstab**文件。 例如:

//server_name/share_name /mnt cifs credentials=/root/smb.cred 0 0

注意

要使系统自动挂载共享,您必须存储用户名、 密码和域名在证书文件中。 有关详细信息,请参见第2.2.4节, “使用凭据文件对SMB共享进行身份验证”。

在/etc/fstab文件的第四个字段中,指定挂载选项,例如凭据文件的路径。 有关详细信息,请参见mount.cifs(8)手册页上的第2.2.6节“常用挂载选项”和OPTIONS部分。

要验证共享成功挂载,请输入:

# mount /mnt/
2.2.4 使用凭据文件对SMB共享进行身份验证

在某些情况下,管理员希望在不输入用户名和密码的情况下挂载共享。 要实现这一点,请创建凭据文件。 例如:

过程1 创建凭据文件

  1. 创建一个文件,例如〜/smb.cred,并指定文件的用户名、密码和域名:

    username=user_name
    password=password
    domain=domain_name
    
  2. 将权限设置为仅允许所有者访问该文件:

    # chown user_name ~/smb.cred
    # chmod 600 ~/smb.cred
    

您现在可以将credentials = file_name挂载选项传递给mount实用程序,或者在/etc/fstab文件中将其用于挂载共享,而不会提示您输入用户名和密码。

2.2.5 执行多用户SMB挂载

您提供的用于挂载共享的凭据默认确定挂载点上的访问权限。 例如,如果在挂载共享时使用DOMAIN\example用户,共享上的所有操作都将以该用户的身份执行,而不管本地用户执行操作。

但是,在某些情况下,管理员希望在系统引导时自动挂载共享,但用户应使用自己的凭据对共享内容执行操作。 multiuser挂载选项可让您配置此场景。

注意

要使用multiuser,您还必须将sec = security_type 挂载选项设置为支持以非交互方式提供证书的安全类型,例如 krb5或带有凭证文件的ntlmssp选项。 请参阅“以用户身份访问共享”一节。

root用户使用multipuser选项和一个对共享内容具有最小访问权限的帐户来挂载共享。 然后,普通用户可以使用cifscreds实用程序将其用户名和密码提供给当前会话的内核**环。 如果用户访问已挂载共享的内容,那么内核将使用来自内核**环的凭据,而不是最初用于挂载共享的凭据。

使用multiuser选项挂载共享

在系统引导时使用multiuser选项自动挂载共享:

过程2 创建带有multiuser选项/etc/fstab文件条目

  1. 在**/etc/fstab**文件中创建共享条目。 例如:

    //server_name/share_name /mnt cifs multiuser,sec=ntlmssp,credentials=/root/smb.cred 0 0
    
  2. 挂载共享:

    # mount /mnt/
    

如果您不想在系统引导时自动挂载共享,请通过将**-o multiuser,sec = security_type传递给mount**命令手动挂载它。 有关手动挂载SMB共享的详细信息,请参见第2.2.2节“手动挂载SMB共享”。

验证SMB共享是否使用multiuser选项进行挂载

要验证是否使用multiuser选项挂载共享:

# mount
...
//server_name/share_name on /mnt type cifs (sec=ntlmssp,multiuser,...)
以用户身份访问共享

如果使用multiuser选项挂载SMB共享,则用户可以将其服务器的凭证提供给内核的**环:

# cifscreds add -u SMB_user_name server_name
Password: ********

现在,当用户在包含挂载的SMB共享的目录中执行操作时,服务器将为该用户应用文件系统权限,而不是在共享被挂载时最初使用的权限。

注释

多个用户可以同时在挂载的共享上使用他们自己的凭据执行操作。

2.2.5 常用挂载选项

当您挂载SMB共享时,挂载选项将确定:

  • 如何与服务器建立连接。 例如,连接到服务器时使用哪个SMB协议版本。
  • 如何将共享挂载值本地文件系统。 例如,如果系统覆盖远程文件和目录权限以启用多个本地用户访问服务器上的内容。

要在**/etc/fstab文件的第四个字段或mount命令的-o参数中设置多个选项,请使用逗号分隔它们。 例如,请参阅过程2.2,“使用multiuser**选项创建/etc/fstab文件条目”。

以下列表给出了经常使用的挂载选项的概述:

表1 常用的挂载选项

选项 描述
credentials=凭据文件名称 设置凭据文件的路径。 请参见第2.2.4节“使用凭据文件对SMB共享进行身份验证”。
dir_mode=模式 如果服务器不支持CIFS UNIX扩展,则设置目录模式。
file_mode=模式 如果服务器不支持CIFS UNIX扩展,则设置文件模式。
password=密码 设置用于向SMB服务器进行身份验证的密码。 或者,使用credentials选项指定凭据文件。
seal 对使用 SMB 3.0 或更高版本的协议的连接启用加密支持。因此, 将sealvers挂载选项设置为3.0 或更高版本。请参见示例 1, “使用加密的 SMB 3.0 连接安装共享”。
sec=安全模式 设置安全模式(如ntlmsspi)以启用NTLMv2密码散列和启用的数据包签名。 有关支持值的列表,请参见mount.cifs(8)手册页中的选项描述。 如果服务器不支持ntlmv2安全模式,请使用sec = ntlmssp,这是默认设置。 出于安全原因,请勿使用不安全的ntlm安全模式
username=用户名称 设置用于向SMB服务器进行身份验证的用户名。 或者,使用credentials选项指定凭据文件。
vers=SMB协议版本 设置用于与服务器进行通信的SMB协议版本。

有关完整列表,请参见mount.cifs(8)手册页中的OPTIONS部分。

二、SAMBA配置

Samba在Red Hat Enterprise Linux中实现服务器消息块(SMB)协议。 SMB协议用于访问服务器上的资源,如文件共享和共享打印机。 此外,Samba还实现Microsoft Windows使用的分布式计算环境远程过程调用(DCE RPC)协议。

您可以将 Samba 运行为:

  • 活动目录(AD)或NT4域成员
  • 独立服务器
  • NT4主域控制器(PDC)或备份域控制器(BDC)

注释

只有在支持NT4域的Windows版本的现有安装中,红帽才支持这些模式。 红帽建议不要设置新的Samba NT4域,因为Windows 7和Windows Server 2008 R2之后的Microsoft操作系统不支持NT4域。

独立于安装模式, 您可以选择共享目录和打印机。这使 Samba 可以充当文件和打印服务器。

注释

红帽不支持将Samba作为AD域控制器(DC)运行。

1. Samba 服务

Samba提供以下服务:

smbd

此服务使用SMB协议提供文件共享和打印服务。 此外,该服务负责资源锁定以及对连接用户进行身份验证。 smb systemd服务启动并停止smbd守护进程。

要使用smbd服务,请安装samba软件包。

nmbd

此服务使用NetBIOS over IP协议提供主机名和IP解析。 除了名称解析之外,nmbd服务还可以浏览SMB网络来查找域,工作组,主机,文件共享和打印机。 为此, 服务要么直接向广播客户端报告此信息, 要么将其转发到本地或主浏览器。 nmb systemd服务启动并停止nmbd守护进程。

请注意,现代SMB网络使用DNS来解析客户端和IP地址。

要使用nmbd服务,请安装samba软件包。

winbindd

winbindd服务为名称服务交换(NSS)提供一个接口,以在本地系统上使用AD或NT4域用户和组。 例如,这使域用户可以对Samba服务器上托管的服务或其它本地服务进行身份验证。 winbind systemd服务启动并停止winbindd守护进程。

要使用winbindd服务,请安装samba-winbind软件包。

2. 使用testparm实用程序验证smb文件

testparm实用程序验证/etc/samba/smb.conf文件中的Samba配置是否正确。 该实用程序会检测无效的参数和值,但也会检测不正确的设置,例如ID映射。 如果testparm报告没有问题,Samba服务将成功加载**/etc/samba/smb.conf**文件。 请注意,testparm无法验证配置的服务是否可用或按预期工作。

注意

红帽建议您在每次修改此文件后使用testparm验证**/etc/samba/smb.conf**文件。

要验证**/etc/samba/smb.conf文件,请以root用户身份运行testparm实用程序。 如果testparm**在配置中报告错误的参数,值或其它错误,请修复问题并再次运行该实用程序。

示例1 使用testparm

以下输出报告不存在的参数和不正确的ID映射配置:

~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Unknown parameter encountered: "log levell"
Processing section "[example_share]"
Loaded services file OK.
ERROR: The idmap range for the domain * (tdb) overlaps with the range of DOMAIN (ad)!
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
# Global parameters
[global]
...
[example_share]
...

3. 了解 Samba 安全模式

/etc/samba/smb.conf文件**[global]部分中的security**参数管理Samba如何认证连接到服务的用户。 根据您安装Samba的模式,参数必须设置为不同的值:

  • 作为AD域成员,设置security = ads

    在这种模式下,Samba使用Kerberos来验证AD用户。

    有关将Samba设置为域成员的详细信息,请参见第5节“将Samba设置为域成员”。

  • 作为独立服务器,设置security = user

在这种模式下,Samba使用本地数据库来认证连接的用户 。

有关将Samba设置为独立服务器的详细信息,请参见第4节“将Samba设置为独立服务器”。

  • 作为NT4 PDC或BDC,设置security = user

    在这种模式下,Samba会将用户身份验证到本地或LDAP数据库 。

  • 作为NT4域成员,设置security = domain

    在这种模式下,Samba将连接用户认证到NT4 PDC或BDC。 您不能在AD域成员上使用此模式。

    有关将Samba设置为域成员的详细信息,请参见第5节“将Samba设置为域成员”。

有关更多详细信息,请参阅smb.conf(5)手册页中的security参数说明。

4. 将Samba设置为独立服务器

在某些情况下,管理员希望设置不属于域成员的Samba服务器。 在这种安装模式下,Samba将用户身份验证到本地数据库,而不是*DC。 此外,您可以启用来宾访问权限,以允许用户无需身份验证即可连接到一项或多项服务 。

4.1 为独立服务器设置服务器配置

将Samba设置为独立服务器的步骤:

过程1 将Samba设置为独立服务器

  1. 安装samba软件包:

    ~]# yum install samba
    
  2. 编辑/etc/samba/smb.conf文件并设置以下参数:

[global]
workgroup = Example-WG
netbios name = Server
security = user
log file = /var/log/samba/%m.log
log level = 1

该配置在Example-WG工作组中定义了一个名为Server的独立服务器。 此外,此配置可以在最低级别(1)上进行日志记录,并且日志文件将存储在**/var/log/samba/目录中。 Samba会将*log file***参数中的%m宏展开为连接客户端的NetBIOS名称。 这为每个客户端启用单独的日志文件。

有关更多详细信息,请参阅smb.conf(5)手册页中的参数说明。

配置文件或打印机共享。 请参阅:

  • 第7节“在Samba服务器上配置文件共享”
  • 第8节“设置Samba打印服务器”

验证**/etc/samba/smb.conf**文件:

~]# testparm

有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

如果您设置了需要认证的共享,请创建用户帐户。 有关详情,请参阅

第4.2节“创建和启用本地用户帐户”。

打开所需的端口并使用firewall-cmd实用程序重新加载防火墙配置:

~]# firewall-cmd --permanent --add-port={139/tcp,445/tcp}
~]# firewall-cmd --reload

启动smb服务:

~]# systemctl start smb

(可选) 在系统启动时启用smb服务自动启动:

~]# systemctl enable smb

4.2 创建和启用本地用户帐户

为了让用户在连接共享时进行身份验证,您必须在操作系统和Samba数据库中的Samba主机上创建帐户。 Samba需要操作系统帐户来验证文件系统对象上的访问控制列表(ACL)以及Samba帐户以验证连接用户。

如果您使用passdb backend = tdbsam默认设置,则Samba将用户帐户存储在**/var/lib/samba/private/passdb.tdb**数据库中。

例如, 创建 Samba 用户example:

过程2 创建Samba用户

  1. 创建操作系统帐户:

    ~]# useradd -M -s /sbin/nologin example
    

    上一个命令添加example帐户而不创建主目录。 如果该帐户仅用于向Samba进行身份验证,请将/sbin/nologin命令分配为shell以防止帐户在本地登录。

  2. 为操作系统帐户设置密码以启用它:

    ~]# passwd example
    Enter new UNIX password: password
    Retype new UNIX password: password
    passwd: password updated successfully
    

    Samba不使用在操作系统帐户上设置的密码进行身份验证。但是,您需要设置密码才能启用该帐户。 如果一个帐户被禁用,如果该用户连接,Samba将拒绝访问。

  3. 将用户添加到Samba数据库并为该帐户设置密码:

    ~]# smbpasswd -a example
    New SMB password: password
    Retype new SMB password: password
    Added user example.
    

    在使用此帐户连接 Samba 共享时使用此密码进行身份验证。

  4. 启用Samba帐户:

    ~]# smbpasswd -e example
    Enabled user example.
    

5. 将Samba设置为域成员

运行 AD 或 NT4 域的管理员通常希望使用 Samba 将其红帽企业 Linux 服务器作为成员加入到域中。这使您能够:

  • 访问其他域成员的域资源
  • 向本地服务 (如sshd) 验证域用户的身份
  • 共享服务器上托管的目录和打印机,以充当文件和打印服务器

5.1 加入域

要将红帽企业 Linux 系统加入到域中:

过程3 将红帽企业 Linux 系统加入到域

  1. 安装以下软件包:

    ~]# yum install realmd oddjob-mkhomedir oddjob samba-winbind-clients samba-winbind samba-common-tools
    
  2. 如果您加入AD,请另外安装samba-winbind-krb5-locator软件包:

~]# yum install samba-winbind-krb5-locator

此插件使 Kerberos 能够根据使用 DNS 服务记录的 AD 站点定位**分发中心 (KDC)。

  1. (可选)重命名现有的**/etc/samba/smb.conf** Samba配置文件:
~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.old
  1. 加入域。例如, 加入域名为ad.example.com的域:

    ~]# realm join --client-software=winbind ad.example.com
    

    使用上一命令, realm实用程序自动:

    • ad.example.com域中的成员创建**/etc/samba/smb.conf**文件
    • 将用于用户和组查找的winbind模块添加到**/etc/nsswitch.conf**文件
    • 配置**/etc/krb5.conf**文件中的Kerberos客户端以获取AD成员身份
    • 更新/**etc/pam.d/**目录中的可插入验证模块(PAM)配置文件
    • 启动winbind服务并在系统引导时启动该服务

有关realm实用程序的更多详细信息,请参阅领域(8)手册页以及“Red Hat Windows集成指南”中的相应部分。

  1. (可选)在**/etc/samba/smb.conf**文件中设置备份ID映射后端或自定义ID映射设置。 有关详细信息,请参见第5.3节“了解ID映射”。

  2. (可选) 验证配置。请参见5.2 节, “验证 Samba 是否被正确加入为域成员”。

5.2 验证 Samba 是否被正确加入为域成员

在将Red Hat Enterprise Linux作为域成员加入环境之后,您可以运行不同的测试来验证连接是否成功。参见:

  • “验证操作系统是否可以检索域用户帐户和组” 一节
  • "验证AD域用户是否可以获得Kerberos凭据"一节
  • " 列出可用的域"一节
验证操作系统是否可以检索域用户帐户和组

使用getent实用程序验证操作系统是否可以检索域用户和组。例如:

  • 要查询AD域中的administrator帐户:

    ~]# getent passwd “AD\\administrator”
    AD\administrator:*:10000:10000::/home/[email protected]:/bin/bash
    
  • 要查询AD域中Domain Users组的成员:

    ~]# getent group "AD\\Domain Users"
    AD\domain users:x:10000:user
    

    如果该命令正常工作,请在设置文件和目录权限时验证是否可以使用域用户和组。 例如,要将**/srv/samba/example.txt文件的所有者设置为administrator**,并将该组的所有者设置为Domain Admins

~]# chown administrator:"Domain Admins" /srv/samba/example.txt
验证AD域用户是否可以获得Kerberos凭据

在AD环境中,用户可以从DC获取Kerberos凭据。 例如,要验证administrator用户是否可以获取Kerberos凭据:

注释

要使用kinitklist实用程序,请在Samba域成员上安装krb5-workstation软件包。

过程4 获取Kerberos凭据

  1. 获取[email protected]主体的凭据:

    ~]# kinit [email protected]
    
  2. 显示缓存的Kerberos凭据:

    ~]# klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: [email protected]
    Valid starting Expires Service principal
    11.09.2017 14:46:21 12.09.2017 00:46:21
    krbtgt/[email protected]
    renew until 18.09.2017 14:46:19
    
列出可用的域

要列出通过winbindd服务可用的所有域, 请输入:

~]# wbinfo --all-domains
BUILTIN
SAMBA-SERVER
AD

5.3 了解 ID 映射

Windows域通过唯一的安全标识符(SID)区分用户和组。 但是,Linux要求每个用户和组都有唯一的UID和GID。 如果您将Samba作为域成员运行,则winbindd服务将负责向域操作系统提供有关域用户和组的信息。

要使winbindd服务为用户和组提供唯一的ID给Linux,必须在**/etc/samba/smb.conf**文件中为以下项配置ID映射:

  • 本地数据库 (默认域)
  • Samba服务器所属的AD或NT4域
  • 每个受信任域上的用户必须能够访问此Samba服务器上的资源
5.3.1 规划ID范围

无论您在AD中是否存储Linux UID和GID,或者是配置 Samba 以生成它们,每个域配置都需要一个唯一的ID范围,该范围不得与任何其它域重叠。

警告

如果设置了重叠的 ID 范围, Samba 无法正常工作。

示例3 唯一的ID范围

以下显示了默认(*),AD-DOMTRUST-DOM域的非重叠ID映射范围。

[global]
...
idmap config * : backend = tdb
idmap config * : range = 10000-999999
idmap config AD-DOM:backend = rid
idmap config AD-DOM:range = 2000000-2999999
idmap config TRUST-DOM:backend = rid
idmap config TRUST-DOM:range = 4000000-4999999

注意

只能为每个域分配一个范围。因此, 在域范围之间留出足够的空间。这使您可以在以后的域增长时扩展范围。

如果稍后为域分配不同的范围,则以前由这些用户和组创建的文件和目录的所有权将会丢失。

5.3.2 *默认域

在域环境中,为以下每项添加一个ID映射配置:

  • Samba服务器所属的域
  • 应能够访问 Samba 服务器的每个受信任域

但是,对于所有其他对象,Samba将从默认域分配ID。 这包括:

  • 本地Samba用户和组
  • Samba内置帐户和组,例如BUILTIN\Administrators

注意

必须按照本节中的说明配置默认域, 以使 Samba 能够正常运行。

默认域后端必须是可写的,才能永久存储分配的ID。

对于默认域,您可以使用以下其中一个后端:

tdb

当您将默认域配置为使用tdb后端时,请设置一个足够大的ID范围,以包含将来创建的对象,而不是已定义的域 ID 映射配置的一部分。

例如,在**/etc/samba/smb.conf文件的[global]**部分中设置以下内容:

idmap config * : backend = tdb
idmap config * : range = 10000-999999

有关更多详细信息,请参见第5.4.1节“使用tdb ID映射后端”。

autorid

当您将默认域配置为使用autorid后端时, 为域添加其它ID 映射配置是可选的。

例如,在**/etc/samba/smb.conf文件的[global]**部分中设置以下内容:

idmap config * : backend = autorid
idmap config * : range = 10000-999999

有关更多详细信息,请参见第5.4.4.2节“配置autorid后端”。

5.4 不同的ID映射后端

Samba 为特定配置提供了不同的 ID 映射后端。最常用的后端为:

表1 常用 ID 映射后端

后端 使用案例
tdb 仅限*默认域
ad 仅限AD域
rid AD和NT4域
autorid AD,NT4和*默认域

以下各节介绍了使用后端的优点、建议的方案以及如何配置它。

5.4.1 使用 tdb ID映射后端

默认情况下, winbindd 服务使用可写的 tdb ID 映射后端来存储安全标识符 (SID)、UID 和 GID 映射表。这包括本地用户、组和内置主体。

仅对 * 默认域使用此后端。例如:

idmap config * : backend = tdb
idmap config * : range = 10000-999999

有关 * 默认域的详细信息, 请参阅5.3.2 节 “* 默认域”。

5.4.2 使用 ad ID 映射后端

ad ID 映射后端实现一个只读 API, 以便从 ad 中读取帐户和组信息。这提供了以下好处:

  • 所有用户和组设置都集中存储在AD中。
  • 在使用此后端的所有Samba服务器上,用户和组ID是一致的
  • 这些ID不会存储在可能损坏的本地数据库中,因此文件所有权不会丢失。

ad 后端从 ad 中读取以下属性:

表2 ad 后端从用户和组对象读取的属性

AD属性名称 对象类型 映射至
sAMAccountName 用户和组 用户或组名, 具体取决于对象
uidNumber 用户 用户ID (UID)
gidNumber 组ID (GID)
loginShell[a] 用户 用户的shell的路径
unixHomeDirectory[a] 用户 用户主目录的路径
primaryGroupID[b] 用户 主组ID

[a] 如果您设置了idmap config DOMAIN:unix_nss_info = yes,则Samba才读取此属性。

[b] 如果您设置了idmap config DOMAIN:unix_primary_group = yes,则Samba才读取此属性。

5.4.2.1 ad后端的先决条件

要使用ad ID映射后端:

  • 用户和组都必须在AD中设置唯一的ID,并且ID必须在**/etc/samba/smb.conf** 文件中配置的范围内。 Samba服务器上的ID不在该范围内的对象将不可用。
  • 用户和组必须具有在AD中设置的所有必需属性。 如果缺少必需的属性,则用户或组在Samba服务器上将不可用。 所需的属性取决于您的配置。 请参阅表2“ad 后端从用户和组对象读取的属性”。
5.4.2.2 配置ad后端

要将Samba AD成员配置为使用ad ID映射后端:

过程5 在域成员上配置ad后端

  1. 编辑**/etc/samba/smb.conf文件中的[global]**部分:

    a. 如果默认域(*)不存在,请添加ID映射配置。 例如:

    idmap config * : backend = tdb
    idmap config * : range = 10000-999999
    

    有关默认域配置的详细信息, 请参阅5.3.2 节 “* 默认域”。

    b. 为AD域启用ad ID映射后端:

    idmap config DOMAIN : backend = ad
    

    c. 设置分配给AD域中的用户和组的ID的范围。 例如:

    idmap config DOMAIN : range = 2000000-2999999
    
       **注意**
    
      该范围不得与此服务器上的任何其它域配置重叠。 此外,范围必须设置得足够大,以包含将来分配的所有ID。 有关更多详细信息,请参见第5.3.1节“规划ID范围”。
    

    d. 设置Samba在读取AD中的属性时使用RFC 2307 方案:

    idmap config DOMAIN : schema_mode = rfc2307
    

    e. 要使 Samba 从相应的AD属性读取登录shell 和用户主目录的路径, 请设置:

    idmap config DOMAIN : unix_nss_info = yes
    

    或者,您可以设置应用于所有用户的统一的域范围主目录路径和登录shell。 例如:

    template shell = /bin/bash
    template homedir = /home/%U
    

    有关变量替换的详细信息,请参见smb.conf(5)手册页中的VARIABLE SUBSTITUTIONS部分。

    f. 默认情况下,Samba使用用户对象的primaryGroupID属性作为用户 Linux上的主组。 或者,您可以将Samba配置为使用gidNumber属性中设置的值:

    idmap config DOMAIN : unix_primary_group = yes
    
    1. 验证**/etc/samba/smb.conf**文件:

      ~]# testparm
      

      有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

    2. 重载Samba配置:

      ~]# smbcontrol all reload-config
      
    3. 确认设置按预期工作。 请参阅“验证操作系统是否可以检索域用户帐户和组”一节。

    有关更多详细信息,请参见smb.conf(5)和idmap_ad(8)手册页。

5.4.3 使用rid ID映射后端

Samba可以使用Windows SID的相对标识符(RID)在Red Hat Enterprise Linux 上生成 ID。

注释

RID是SID的最后一部分。 例如,如果用户的SID是S-1-5-21- 5421822485-1151247151-421485315-30014,那么30014是相应的RID。 有关详细信息,Samba如何计算本地ID,请参阅idmap_rid(8)手册页。

rid ID映射后端基于AD和NT4域的算法映射方案实现只读API来计算帐户和组信息。 配置后端时,必须在idmap config DOMAIN:range参数中设置最低和最高RID。 Samba不会映射比此参数中设置的RID更低或更高的用户或组。

注意

作为只读后端,rid不能分配新的ID,例如BUILTIN组。因此,请勿将此后端用于*默认域。

5.4.3.1 使用 rid 后端的优点和缺点

优点

  • 所有在配置范围内具有RID的域用户和组都可自动在域成员上使用。
  • 您不需要手动分配ID,主目录和登录shell。

缺点

  • 所有域用户都分配了相同的登录shell和主目录。 但是,您可以使用变量。
  • 如果所有Samba域成员都使用带有相同ID范围设置的rid后端,则用户和组ID在Samba域成员中仅相同。
  • 不能将单个用户或组排除在域成员上可用。仅排除配置范围之外的用户和组。
  • 根据winbindd服务用于计算ID的公式,如果不同域中的对象具有相同的RID,则可能会在多域环境中出现重复ID。
5.4.3.2 配置rid后端

配置Samba域成员以使用rid ID映射后端:

过程6 在域成员上配置 rid 后端

  1. 编辑**/etc/samba/smb.conf文件中的[global]**部分:

    a. 如果默认域(*)不存在,请添加ID映射配置。 例如:

    idmap config * : backend = tdb
    idmap config * : range = 10000-999999
    

    有关默认域配置的详细信息, 请参阅5.3.2 节 “* 默认域”。

    b. 为域启用rid ID映射后端:

    idmap config DOMAIN : backend = rid
    

    c. 设置一个足够大的范围,以包含将来分配的所有RID。 例如:

    idmap config DOMAIN : range = 2000000-2999999
    

    Samba 忽略此域中的RID不在范围内的用户和组。

    注意

    该范围不得与此服务器上的任何其它域配置重叠。 有关更多详细信息,请参见第5.3.1节“规划ID范围”。

    d. 设置将分配给所有映射用户的shell和主目录路径。 例如:

    template shell = /bin/bash
    template homedir = /home/%U
    

    有关变量替换的详细信息,请参见smb.conf(5)手册页中的VARIABLE SUBSTITUTIONS部分。

    1. 验证**/etc/samba/smb.conf**文件:

      ~]# testparm
      

      有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

    2. 重载Samba配置:

      ~]# smbcontrol all reload-config
      
    3. 确认设置按预期工作。 请参阅“验证操作系统是否可以检索域用户帐户和组”一节。

5.4.4 使用autorid ID映射后端[2]

autorid后端的作用类似于rid ID映射后端,但可以为不同的域自动分配ID。 这使您能够在以下情况下使用autorid后端:

  • 仅用于*默认域。
  • 对于*默认域和其他域,无需为每个附加域创建ID映射配置。
  • 仅用于特定域。
5.4.4.1 使用 autorid 后端的优点和缺点

优点

  • 计算的 UID 和 GID 位于配置范围内的所有域用户和组都将自动在域成员上使用。
  • 您不需要手动分配ID,主目录和登录shell。
  • 即使多域环境中的多个对象具有相同的RID,也不会有重复的ID。

缺点

  • 在Samba域成员之间,用户id和组id不相同。
  • 所有域用户获得相同的登录shell和分配的主目录。但是,您可以使用变量。
  • 您不能排除单个用户或组在域成员上可用。只有计算得到的UID或GID超出配置范围的用户和组才被排除。
5.4.4.2 配置autorid后端

要配置Samba域成员使用*默认域的autorid ID映射后端:

注释

如果对默认域使用 autorid, 则为域添加其他 ID 映射配置是可选的。

过程7 在域成员上配置 autorid 后端

  1. 编辑/etc/samba/smb.conf文件中的**[global]**部分:

    a. 为*默认域启用autorid ID映射后端:

    idmap config * : backend = autorid
    

    b. 设置一个足够大的范围,以便为所有现有和将来的对象分配ID。 例如:

    idmap config * : range = 10000-999999
    

    Samba忽略该域中计算的ID不在该范围内的用户和组。 有关后端计算ID的详细信息,请参阅idmap_autorid(8)手册页中的映射公式部分。

    警告

    设置范围后,Samba开始使用它,只能增加范围的上限。 对该范围进行的任何其他更改都可能导致新的ID分配,从而导致文件所有权的丧失。

    c. (可选) 设置范围大小。例如:

    idmap config * : rangesize = 200000
    

    Samba为每个域的对象分配这个数目的连续ID,直到从idmap config *:range参数中设置的范围中的所有ID被采用。 有关更多详细信息,请参阅idmap_autorid(8)手册页中的rangesize参数说明。

    d. 设置将分配给所有映射用户的 shell 和主目录路径。例如:

    template shell = /bin/bash
    template homedir = /home/%U
    

    有关变量替换的详细信息,请参见smb.conf(5)手册页中的VARIABLE SUBSTITUTIONS部分。

    e. (可选)为域添加其他ID映射配置。 如果没有单个域的配置可用,Samba将使用先前配置的*默认域中的autorid后端设置来计算该ID。

注意

如果为各个域配置其他后端,则所有ID映射配置的范围不得重叠。 有关更多详细信息,请参见第5.3.1节“规划ID范围”。

验证**/etc/samba/smb.conf**文件:

~]# testparm

有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

重载Samba配置:

~]# smbcontrol all reload-config

确认设置按预期工作。 请参阅“验证操作系统是否可以检索域用户帐户和组”一节。

6. 将Samba文件服务器集成到IdM域中

如果您在您的环境中运行红帽身份管理(IdM)和Samba,则可以配置Samba服务器以在访问共享时使用Kerberos对IdM用户进行身份验证。

有关详细信息,请参阅“Red Hat Windows集成指南”中的相应部分。

7. 在Samba服务器上配置文件共享

要将Samba用作文件服务器,请将共享添加到独立域或域成员配置的/etc/samba/smb.conf文件中。

您可以使用以下任一方式添加共享:

  • POSIX ACL。 请参见第7.1节“设置使用POSIX ACL的共享”。
  • 细粒度的Windows ACL。 请参见第7.2节“设置使用Windows ACL的共享”。
7.1 设置使用POSIX ACL的共享[3]

作为Linux服务,Samba支持使用POSIX ACL的共享。 它们使您能够使用实用程序(例如chmod)在Samba服务器上本地管理权限。 如果共享存储在支持扩展属性的文件系统上,则可以使用多个用户和组定义ACL。

注释

如果您需要改用细粒度的Windows ACL,请参见第7.2节“设置使用Windows ACL的共享”。

在添加共享之前,先设置Samba。 请参阅:

  • 第4节“将Samba设置为独立服务器”
  • 第5节“将Samba设置为域成员”
7.1.1 添加使用POSIX ACL的共享

要创建一个名为example的共享,它提供**/srv/samba/example/**目录的内容,并使用POSIX ACL:

过程8 添加使用POSIX ACL的共享

  1. (可选)如果该文件夹不存在,则创建该文件夹。 例如:

    ~]# mkdir -p /srv/samba/example/
    
  2. 如果您以enforcing模式运行SELinux,请在目录中设置samba_share_t上下文:

    ~]# semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"
    ~]# restorecon -Rv /srv/samba/example/
    
  3. 在目录上设置文件系统ACL。 有关详细信息,请参见第7.1.2节“设置ACL”。

  4. example共享添加到**/etc/samba/smb.conf**文件中。 例如,要添加共享并启用写入权限:

    [example]
    path = /srv/samba/example/
    read only = no
    

    注释

    无论文件系统ACL如何; 如果你没有设置read only = no,Samba 以只读模式共享目录。

  5. 验证/etc/samba/smb.conf文件:

    ~]# testparm
    

    有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

  6. 打开所需的端口并使用firewall-cmd实用程序重新加载防火墙配置:

    ~]# firewall-cmd --permanent --add-service=samba
    ~]# firewall-cmd --reload
    
  7. 重启smb服务:

    ~]# systemctl restart smb
    
  8. (可选)启用smb服务在启动时自动启动:

    ~]# systemctl enable smb
    
7.1.2 设置ACL

使用POSIX ACL的共享支持:

  • 标准Linux ACL。 有关详细信息,请参见第7.1.2.1节“设置标准Linux ACL”。
  • 扩展ACL。 有关详细信息,请参见第7.1.2.2节“设置扩展ACL”。

7.1.2.1 设置标准Linux ACL

Linux上的标准ACL支持为一个所有者,一个组以及所有其他未定义的用户设置权限。 您可以使用chownchgrpchmod实用程序来更新ACL。 如果您需要精确控制,则使用更复杂的POSIX ACL,请参见第7.1.2.2节“设置扩展ACL”。

例如,要将**/srv/samba/example/目录的所有者设置为root用户,向Domain Users**组授予读写权限,并拒绝对所有其他用户的访问:

~]# chown root:"Domain Users" /srv/samba/example/
~]# chmod 2770 /srv/samba/example/

注释

在目录上启用set-group-ID(SGID)位会自动将所有新文件和子目录的默认组设置为目录组的默认组,而不是将其设置为创建新目录条目的用户的主组的常规行为。

有关权限的更多详细信息,请参见chown(1)和chmod(1)手册页。

7.1.2.2 设置扩展ACL

如果共享目录所在的文件系统支持扩展ACL,则可以使用它们设置复杂的权限。 扩展ACL可以包含多个用户和组的权限。

扩展的POSIX ACL使您能够为多个用户和组配置复杂的ACL。 但是,您只能设置以下权限:

  • 禁止访问
  • 读访问
  • 写访问
  • 完全控制

如果您需要细粒度的Windows权限(如创建文件夹/追加数据),请将该共享配置为使用Windows ACL。 请参见第7.2节“设置使用Windows ACL的共享”。

要在共享上使用扩展POSIX ACL,请执行以下操作:

过程9 在共享上启用扩展POSIX ACL

  1. 在**/etc/samba/smb.conf**文件的share部分中启用以下参数以启用扩展ACL的ACL继承:

    inherit acls = yes
    

    有关详细信息,请参阅smb.conf(5)手册页中的参数说明。

  2. 重启smb服务:

    ~]# systemctl restart smb
    
  3. (可选)启用smb服务并在启动时自动启动:

    ~]# systemctl enable smb
    
  4. 在目录上设置ACL。 有关使用扩展ACL的详细信息,请参阅第5章访问控制列表

示例4 设置扩展ACL

以下过程为Domain Admins组设置读取,写入和执行权限,为Domain Users组设置读取和执行权限,并拒绝的其他人访问**/srv/samba/example/**目录。

过程10 设置扩展ACL

  1. 禁用对用户帐户主组的自动授予权限:

    ~]# setfacl -m group::--- /srv/samba/example/
    ~]# setfacl -m default:group::--- /srv/samba/example/
    

    目录的主组还被映射到动态CREATOR GROUP主体。 当您在Samba共享上使用扩展POSIX ACL时,该主体会自动添加并且无法删除它。

  2. 设置目录的权限:

    a. 授予对Domain Admins组的读取,写入和执行权限:

    ~]# setfacl -m group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
    

    b. 授予对Domain Users组的读取和执行权限:

    ~]# setfacl -m group:"DOMAIN\Domain Users":r-x /srv/samba/example/
    

    c. 为other ACL条目设置权限,以拒绝与other ACL条目不匹配的用户的访问:

    ~]# setfacl -R -m other::--- /srv/samba/example/
    

    这些设置仅适用于此目录。 在Windows中,这些ACL被映射到仅应用于此文件夹模式。

  3. 要使上一步中设置的权限能够被此目录中创建的新文件系统对象继承,请执行以下操作:

    ~]# setfacl -m default:group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
    ~]# setfacl -m default:group:"DOMAIN\Domain Users":r-x /srv/samba/example/
    ~]# setfacl -m default:other::--- /srv/samba/example/
    

    通过这些设置,主体的仅此文件夹模式现在设置为此文件夹,子文件夹和文件

    Samba将先前设置的权限映射到以下Windows ACL:

    主体 权限 应用于
    DOMAIN\Domain Admins 完全控制 此文件夹,子文件夹和文件
    DOMAIN\Domain Users 读取和执行 此文件夹,子文件夹和文件
    Everyone [a] 拒绝 此文件夹,子文件夹和文件
    owner (Unix User\owner) [b] 完全控制 仅此文件夹
    primary_group (Unix User\primary_group) [c] 拒绝 仅此文件夹
    CREATOR OWNER [d]和[e] 完全控制 仅子文件夹和文件
    CREATOR GROUP [f]和[e] 拒绝 仅子文件夹和文件
    [a] Samba从other ACL条目映射此主体的权限。
    [b] Samba将目录的所有者映射到此条目。
    [c]Samba将目录的主组映射到此条目。
    [d] 在新的文件系统对象上,创建者自动继承该主体的权限。
    [e]在使用 POSIX ACL的共享上不支持在ACL中配置或移除这些主体。
    [f]在新的文件系统对象上,创建者的主组自动继承此主体的权限。
    
7.1.3 设置共享上的权限

(可选)要限制或授予对Samba共享的访问权,您可以在**/etc/samba/smb.conf**文件的共享部分中设置某些参数。

注释

基于共享的权限管理用户,组或主机是否能够访问共享。这些设置不会影响文件系统ACL。

使用基于共享的设置来限制对共享的访问。 例如,拒绝来自特定主机的访问。

7.1.3.1 配置基于用户和组的共享访问

基于用户和组的访问控制使您可以授予或拒绝某些用户和组访问共享。 例如,要允许Domain Users组的所有成员访问共享,同时拒绝该用户帐户的访问,请将以下参数添加到共享的配置中:

valid users = +DOMAIN\"Domain Users"
invalid users = DOMAIN\user

invalid users参数的优先级高于valid users参数。 例如,如果user帐户是“Domain Users”组的成员,则当您使用上述示例时,该帐户的访问将被拒绝。

有关更多详细信息,请参阅smb.conf(5)手册页中的参数说明。

7.1.3.2 配置基于主机的共享访问

基于主机的访问控制使您能够根据客户端的主机名,IP地址或IP范围来授予或拒绝对共享的访问。

例如,要启用127.0.0.1 IP地址,192.0.2.0/24 IP范围和client1.example.com主机以访问共享,并另外拒绝client2.example.com主机的访问权限,请执行以下操作:

过程11 配置基于主机的共享访问

  1. 将以下参数添加到/etc/samba/smb.conf*享的配置中:

    hosts allow = 127.0.0.1 192.0.2.0/24 client1.example.com
    hosts deny = client2.example.com
    
  2. 重载Samba配置

    ~]# smbcontrol all reload-config
    

***hosts deny***参数比**hosts allow的优先级高。例如, 如果client2.example.com解析为***hosts allow***参数中列出的IP地址, 则拒绝此主机的访问。

有关更多详细信息,请参阅smb.conf(5)手册页中的参数说明。

7.2 设置使用Windows ACL的共享[4]

Samba支持在共享和文件系统对象上设置Windows ACL。 这使您能够:

  • 使用精细粒度的Windows ACL
  • 使用Windows管理共享权限和文件系统ACL

或者,您可以将共享配置为使用POSIX ACL。 有关详细信息,请参见第7.1节“设置使用POSIX ACL的共享”。

7.2.1 授予SeDiskOperatorPrivilege权限

只有拥有授予的SeDiskOperatorPrivilege权限的用户和组才能配置使用Windows ACL的共享的权限。 例如,要将权限授予DOMAIN\Domain Admins组:

~]# net rpc rights grant "DOMAIN\Domain Admins" SeDiskOperatorPrivilege -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
Successfully granted rights.

注释

在域环境中,将SeDiskOperatorPrivilege授予域组。 这使您可以通过更新用户的组成员身份来集中管理权限

要列出已授予SeDiskOperatorPrivilege的所有用户和组:

~]# net rpc rights list privileges SeDiskOperatorPrivilege -U "DOMAIN\administrator"
Enter administrator's password:
SeDiskOperatorPrivilege:
BUILTIN\Administrators
DOMAIN\Domain Admins
7.2.2 启用Windows ACL支持

要配置支持Windows ACL的共享,您必须在Samba中启用此功能。 要全局启用所有共享,请将以下设置添加到**/etc/samba/smb.conf文件的[global]**部分:

vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes

或者,您可以通过向共享部分添加相同的参数来启用单个共享的Windows ACL支持。

7.2.3 添加使用Windows ACL的共享

要创建一个名为example的共享,它共享**/srv/samb/example/**目录的内容,并使用Windows ACL:

过程12 添加使用Windows ACL的共享

  1. (可选)如果该文件夹不存在,则创建该文件夹。 例如:

    ~]# mkdir -p /srv/samba/example/
    
  2. 如果您以enforcing模式运行SELinux,请在目录中设置samba_share_t上下文:

    ~]# semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"
    ~]# restorecon -Rv /srv/samba/example/
    
  3. example共享添加到**/etc/samba/smb.conf**文件中。 例如,要添加共享并启用写入:

[example]
path = /srv/samba/example/
read only = no

注释

无论文件系统ACL如何; 如果你没有设置read only = no,Samba以只读模式共享目录。

  1. 如果您尚未在**[global]部分为所有共享启用Windows ACL支持,请将以下参数添加到[example]**部分,以便为此共享启用此功能:
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
  1. 验证**/etc/samba/smb.conf**文件:
~]# testparm

有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

  1. 打开所需的端口并使用firewall-cmd实用程序重新加载防火墙配置:

    ~]# firewall-cmd --permanent --add-service=samba
    ~]# firewall-cmd --reload
    
  2. 重启smb服务:

    ~]# systemctl restart smb
    
  3. (可选)启用smb服务并在启动时自动启动:

    ~]# systemctl enable smb
    
7.2.4 管理使用Windows ACL的共享的共享权限和文件系统ACL

要在使用Windows ACL的Samba共享上管理共享和文件系统ACL,请使用Windows应用程序,例如计算机管理。 有关详细信息,请参阅Windows文档。

(可选) 使用smbcacls实用程序来管理ACL。 有关详细信息,请参见第7.3节“使用smbcacls管理SMB共享上的ACL”。

注释

要从Windows修改文件系统权限,您必须使用具有授予的SeDiskOperatorPrivilege权限的帐户。 请参见第7.2.1节“授予SeDiskOperatorPrivilege权限”。

7.3 使用smbcacls管理SMB共享上的ACL

smbcacls实用程序可以列出,设置和删除存储在SMB共享上的文件和目录的ACL。 您可以使用smbcacls来管理文件系统ACL:

  • 在使用高级Windows ACL或POSIX ACL的本地或远程Samba服务器上。
  • 在Red Hat Enterprise Linux上远程管理Windows上托管的共享ACL
7.3.1 了解访问控制条目

文件系统对象的每个ACL条目都包含以下格式的访问控制条目(ACE):

security_principal:access_right/inheritance_information/permissions

示例5 访问控制条目

如果AD\Domain Users组具有适用于Windows上此文件夹子文件夹和文件的“修改”权限,则ACL包含以下ACE:

AD\Domain Users:ALLOWED/OI|CI/CHANGE

以下介绍各个ACE:

Security principal

安全主体是将 ACL 中的权限应用到的用户、组或 SID。

Access right

定义对某个对象的访问是被授予还是被拒绝。 该值可以是ALLOWEDDENIED

Inheritance information

存在以下值:

表3 继承设置

描述 映射到
OI 对象继承 此文件夹和文件
CI 容器继承 此文件夹和子文件夹
IO 仅继承 ACE不适用于当前文件或目录。
ID 继承 ACE 是从父目录继承的。

此外, 这些值可以按如下方式组合:

表4 继承设置组合

值组合方式 映射到Windows适用于设置
OI|CI 此文件夹,子文件夹和文件
OI|CI|IO 仅子文件夹和文件
CI|IO 仅子文件夹
OI|IO 仅文件

Permissions

该值可以是代表一个或多个Windows权限的十六进制值,也可以是smbcacls别名:

  • 表示一个或多个Windows权限的十六进制值。

下表以十六进制格式显示高级Windows权限及其相应的值:

表5 Windows权限及其对应的十六进制格式的smbcacls值

Windows权限 十六进制值
完全控制 0x001F01FF
遍历文件夹/执行文件 0x00100020
列出文件夹/读取数据 0x00100001
读取属性 0x00100080
读取扩展属性 0x00100008
创建文件/写入数据 0x00100002
创建文件夹/追加数据 0x00100004
写入属性 0x00100100
写入扩展属性 0x00100010
删除子文件夹和文件 0x00100040
删除 0x00110000
读取权限 0x00120000
更改权限 0x00140000
取得所有权 0x00180000

多个权限可以使用按位OR操作组合为一个十六进制值。有关详细信息,请参见第7.3.3节“计算ACE掩码”。

  • smbcacls别名。下表显示了可用的别名:

    表6 现有的smbcacls别名及其对应的Windows权限

    smbcacls别名 对应的Windows权限
    R 读取
    READ 读取和执行
    W 比较特殊包括以下:
    创建文件/写入数据
    创建文件夹/追加数据
    写入属性
    写入扩展属性
    读取权限
    D 删除
    P 更改权限
    O 取得所有权
    X 遍历/执行
    CHANGE 修改
    FULL 完全控制

    注释

    您可以在设置权限时组合单字母别名。 例如,您可以将RD设置为应用Windows权限“读取”和“删除”。 但是,您既不能组合多个非单字母别名,也不能组合别名和十六进制值。

7.3.2 使用smbcacls显示ACL

如果运行的smbcacls没有带任何操作参数 (如--add), 则该实用工具将显示文件系统对象的ACL。

例如,要列出**//server/example**共享根目录的ACL:

~]# smbcacls //server/example / -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
REVISION:1
CONTROL:SR|PD|DI|DP
OWNER:AD\Administrators
GROUP:AD\Domain Users
ACL:AD\Administrator:ALLOWED/OI|CI/FULL
ACL:AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACL:AD\Domain Guests:ALLOWED/OI|CI/0x00100021

该命令的输出显示:

  • 修订版(REVISION): 安全描述符的内部 Windows NT ACL 修订版
  • 控制(CONTROL):安全描述符控制
  • 所有者(OWNER):安全描述符所有者的名称或SID
  • 组(GROUP):安全描述符组的名称或SID
  • ACL 条目. 有关详细信息,请参见第7.3.1节“了解访问控制条目”。
7.3.3 计算ACE掩码

在大多数情况下,当您添加或更新ACE时,可以使用表6“现有的smbcacls别名及其相应的Windows权限”中列出的smbcacls别名。

但是,如果要设置表5“Windows权限及其对应的十六进制格式的值”中列出的高级Windows权限,则必须使用按位OR操作来计算正确的值。 您可以使用以下shell命令来计算该值:

~]# echo $(printf '0x%X' $(( hex_value_1 | hex_value_2 | ... )))

示例6 计算ACE掩码

你想设置下列权限:

  • 遍历文件夹/执行文件(0x00100020)
  • 列出文件夹/读取数据(0x00100001)
  • 读取属性(0x00100080)

要计算前面权限的十六进制值,请输入:

~]# echo $(printf '0x%X' $(( 0x00100020 | 0x00100001 | 0x00100080 )))
0x1000A1

设置或更新ACE时使用返回的值。

7.3.4 使用smbcacls添加,更新和删除ACL

根据您传递给smbcacls实用程序的参数,您可以添加,更新和从文件或目录中删除ACL。

添加ACL

要将ACL添加到**/server/example共享的根目录,该共享将此文件夹**,子文件夹文件CHANGE权限授予AD\Domain Users组:

~]# smbcacls //server/example / -U "DOMAIN\administrator \
--add ACL:"AD\Domain Users":ALLOWED/OI|CI/CHANGE

更新ACL

更新ACL与添加新的ACL类似。 通过使用带有现有安全主体的**–modify参数覆盖ACL来更新ACL。 如果smbcacls**在ACL列表中找到安全主体,则该实用程序会更新权限。 否则,该命令会失败并显示错误:

ACL for SID principal_name not found

例如,要更新AD\Domain Users组的权限并将它们设置为READ以读取此文件夹子文件夹文件

~]# smbcacls //server/example / -U "DOMAIN\administrator \
--modify ACL:"AD\Domain Users":ALLOWED/OI|CI/READ

删除ACL

要删除ACL,请将具有确切ACL的**–delete传递给smbcacls**实用程序。 例如

~]# smbcacls //server/example / -U "DOMAIN\administrator \
--delete ACL:"AD\Domain Users":ALLOWED/OI|CI/READ
7.4 使用户能够共享 Samba 服务器上的目录

在Samba服务器上,您可以配置用户可以在没有root权限的情况下共享目录 。

7.4.1 启用用户共享功能

在用户可以共享目录之前,管理员必须在Samba中启用用户共享。 例如,要仅启用本地example组的成员来创建用户共享:

过程13 启用用户共享功能

  1. 创建名为example的本地组(如果它不存在):

    ~]# groupadd example
    
  2. 准备Samba的目录以存储用户共享定义并正确设置其权限。 例如:

    a. 创建目录:

    ~]# mkdir -p /var/lib/samba/usershares/
    

    b. 为example组设置写入权限:

    ~]# chgrp example /var/lib/samba/usershares/
    ~]# chmod 1770 /var/lib/samba/usershares/
    

    设置粘滞位以防止用户重命名或删除此目录中其它用户存储的文件。

  3. 编辑**/etc/samba/smb.conf文件并将以下内容添加到[global]**部分:

    a. 设置配置为存储用户共享定义的目录的路径。例如:

    usershare path = /var/lib/samba/usershares/
    

    b. 设置Samba允许在此服务器上创建的用户共享数量。 例如:

    usershare max shares = 100
    

    如果您对usershare max shares参数使用默认值0,则禁用用户共享。

    c. (可选)设置绝对目录路径的列表。 例如,要配置Samba只允许共享**/data/srv**目录的子目录,请设置:

    usershare prefix allow list = /data /srv
    

    有关可设置的其它用户共享相关参数的列表,请参阅smb.conf(5)手册页中的USERSHARES部分。

  4. 验证**/etc/samba/smb.conf**文件:

    ~]# testparm
    

    有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

  5. 重载Samba配置:

    ~]# smbcontrol all reload-config
    

用户现在可以创建用户共享。 有关详细信息,请参见第7.4.2节“添加用户共享”。

7.4.2 添加用户分享

根据第7.4.1节“启用用户共享功能”配置Samba后,用户可以通过运行net usershare add命令,在没有root权限的情况下在Samba服务器上共享目录。

net usershare add命令的简介:

net usershare add 共享名称 路径 [[ 注释 ] | [ ACL ]][guest_ok=y|n]

注意

如果在创建用户共享时设置ACL,则必须在ACL之前指定注释参数。 要设置空注释,请在双引号中使用空字符串。

请注意,如果管理员在**/etc/samba/smb.conf文件[global]部分中设置usershare allow guest = yes**,则用户只能在用户共享上启用来宾访问权限。

示例7 增加用户共享

用户希望在 samba 服务器上共享**/srv/samba/目录。该共享命名为example,** 没有任何注释集, 并且应由来宾用户访问。 此外,共享权限应设置为AD \ Domain Users组的完全访问权限,并为其他用户读取权限。 要添加此共享, 请作为用户运行:

~]$ net usershare add example /srv/samba/ "" \
"AD\Domain Users":F,Everyone:R guest_ok=yes
7.4.3 更新用户共享的设置

如果要更新用户共享的设置,请使用具有相同共享名称和新设置的net usershare add命令覆盖共享。 请参阅7.4.2 节 “添加用户共享”。

7.4.4 显示有关现有用户共享的信息

用户可以在Samba服务器上输入net usershare info命令来显示用户共享及其设置。

要显示任何用户创建的所有用户共享:

~]$ net usershare info -l
[share_1]
path=/srv/samba/
comment=
usershare_acl=Everyone:R,host_name\user:F,
guest_ok=y
...

要仅列出由运行该命令的用户创建的共享,请省略**-l**参数。

要仅显示有关特定共享的信息,请将共享名称或通配符传递给该命令。 例如, 若要显示其名称以 share_ 开头的共享的信息, 请执行以下操作:

~]$ net usershare info -l share_*
7.4.5 列出用户共享

如果您只想列出没有在Samba服务器上进行设置的可用用户共享,请使用net usershare list命令。

要列出由任何用户创建的共享:

~]$ net usershare list -l
share_1
share_2
...

要仅列出由运行该命令的用户创建的共享,请省略**-l**参数。

要仅显示有关特定共享的信息,请将共享名称或通配符传递给该命令。 例如, 若要显示其名称以 share_ 开头的共享的信息, 请执行以下操作:

~]$ net usershare list -l share_*
7.4.6 删除用户共享

要删除用户共享,请以创建共享的用户身份或作为root用户输入:

~]$ net usershare delete share_name
7.5 启用来宾访问共享

在某些情况下,您希望共享用户无需身份验证即可连接到的目录。 对此进行配置,在共享上启用来宾访问权限。

警告

不需要身份验证的共享可能存在安全风险

如果共享上启用来宾访问,则Samba会将访客连接映射到在guest account参数中设置的操作系统帐户。 如果满足以下至少一个条件,来宾用户可以访问这些文件:

  • 该帐户在文件系统ACL中列出
  • 其它用户的POSIX权限允许它

示例8 来宾共享权限

如果您将Samba配置为将guest 帐户映射到nobody(缺省值),则以下示例中的ACL:

  • 允许来宾用户读取file1.txt
  • 允许来宾用户读取和修改file2.txt
  • 防止访客用户读取或修改file3.txt
-rw-r--r--. 1 root root 1024 1. Sep 10:00 file1.txt
-rw-r-----. 1 nobody root 1024 1. Sep 10:00 file2.txt
-rw-r-----. 1 root root 1024 1. Sep 10:00 file3.txt

例如,要为现有**[example]**共享启用来宾访问权限,请执行以下操作:

过程14 设置来宾共享

  1. 编辑**/etc/samba/smb.conf**文件:

    a. 如果这是您在该服务器上设置的第一个来宾共享:

​ ①在**[global]部分将map to guest = Bad User**:

[global]
...
map to guest = Bad User

使用此设置,Samba拒绝使用不正确密码的登录尝试,除非用户名不存在。 如果指定的用户名不存在,并且共享上启用来宾访问,则Samba将该连接视为来宾登录。

​ ②默认情况下,Samba将访客帐户映射到红帽企业Linux上的nobody帐户。 或者,您可以设置其他帐户。 例如:

[global]
...
guest account = user_name

此参数中设置的帐户必须存在于Samba服务器本地。 出于安全原因,红帽建议使用未分配有效shell的帐户。

b. 将guest ok = yes设置添加到***[example]***部分:

[example]
...
guest ok = yes
  1. 验证**/etc/samba/smb.conf**文件:

    ~]# testparm
    

    有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

  2. 重载Samba配置:

    ~]# smbcontrol all reload-config
    

8. 优化 Samba 服务器的性能

本节介绍了在某些情况下哪些设置可以提高Samba的性能,以及哪些设置可能会对性能产生负面影响。

8.1 设置SMB协议版本

每个新的SMB版本都增加了功能并提高了协议的性能。最近的Windows和Windows Server操作系统始终支持最新的协议版本。 如果Samba也使用最新的协议版本,则连接到Samba的Windows客户端将受益于性能改进。在Samba中,server max protocol的默认值设置为最新支持的稳定SMB协议版本。

要始终启用最新的稳定SMB协议版本,请不要设置server max protocol。 如果手动设置参数,则需要使用每个新版本的SMB协议修改设置,以启用最新的协议版本。

要取消设置,请从**/etc/samba/smb.conf文件的[global]部分删除server max protocol**参数。

8.2 优化包含大量文件的目录的共享

要提高包含超过100000个文件的目录的共享的性能,请执行以下操作:

过程20 优化包含大量文件的目录的共享

  1. 将共享上的所有文件重命名为小写。

    注释

    使用此过程中的设置,名称不是小写的文件将不再显示。

  2. 在共享部分中设置以下参数:

    case sensitive = true
    default case = lower
    preserve case = no
    short preserve case = no
    

    有关这些参数的详细信息,请参阅smb.conf(5)手册页中的说明。

  3. 重载Samba配置:

    ~]# smbcontrol all reload-config
    

应用这些设置后,此共享上所有新创建文件的名称都使用小写字母。由于这些设置,Samba不再需要扫描目录中的大写和小写,这可以提高性能。

8.3 可能会对性能产生负面影响的设置

默认情况下,红帽企业版Linux中的内核针对高网络性能进行了调整。 例如,内核对缓冲区大小使用自动调整机制。 在**/etc/samba/smb.conf文件中设置socket options**参数将覆盖这些内核设置。 因此,设置此参数在大多数情况下会降低Samba网络的性能。

要使用内核中的优化设置,请从**/etc/samba/smb.conf中的[global]部分删除socket options**参数。

9. 常用的Samba命令行实用程序

本节介绍使用Samba服务器时经常使用的命令。

9.1 使用net实用程序

net实用程序使您能够在Samba服务器上执行多个管理任务。 本节介绍net实用程序最常用的子命令。

有关更多详细信息,请参见net(8)手册页。

9.1.1 使用net ads join和net rpc join命令

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

注意

红帽建议使用realm实用程序来加入域。 realm实用程序自动更新所有涉及的配置文件。 有关详细信息,请参见第5.1节“加入域”。

使用net命令加入域:

过程21 使用net命令加入域

  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映射配置。 有关详细信息,请参见第5.3节“了解ID映射”。

  3. 验证**/etc/samba/smb.conf**文件:

    ~]# testparm
    

    有关详细信息,请参见第2节“使用testparm实用程序验证smb.conf文件”。

  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 winbind
    ~]# systemctl start winbind
    
  7. (可选)使用authconf实用程序配置PAM。

有关详细信息,请参阅“Red Hat系统级身份验证指南”中的“使用可插入验证模块(PAM)”部分。

  1. (可选)对于AD环境,配置Kerberos客户端。

有关详细信息,请参阅“Red Hat系统级身份验证指南”中的“配置Kerberos客户端”部分。

9.1.2 使用net rpc rights命令

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

列出权限

要列出所有可用的权限及其所有者,请使用net rpc rights 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.
9.1.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 example
Enter DOMAIN\administrator's password:
IPC$
share_1
share_2
...

注释

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

添加共享

net rpc share add命令使您可以将共享添加到SMB服务器。

例如,远程服务器共享了C:\ example\目录,要将该目录添加为example的共享:

~]# net rpc share add example="C:\example" -U "DOMAIN\administrator" -S server

注释

指定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

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

  • 在**-U参数中指定的用户必须具有授予的SeDiskOperatorPrivilege**权限。
  • 您必须编写一个脚本,将共享部分添加到**/etc/samba/smb.conf文件并重新加载Samba。 脚本必须在/etc/samba/smb.conf[global]部分的delete share command参数中设置。 有关更多详细信息,请参阅smb.conf(5)手册页中的delete share command**描述。
9.1.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帐户添加到域中:

过程22 将用户帐户添加到域

  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
9.1.5 使用net usershare命令

请参阅7.4 节 “使用户能够共享 Samba 服务器上的目录”。

9.2 使用rpcclient实用程序

rpcclient实用程序使您能够在本地或远程SMB服务器上手动执行客户端侧Microsoft远程过程调用(MS-RPC)功能。 但是,大多数功能都集成到由Samba提供的独立实用程序中。 仅使用rpcclient来测试MS-PRC功能。

例如,您可以使用该实用程序来:

  • 管理打印机后台打印子系统(SPOOLSS)。

    示例9 分配驱动程序到打印机

    ~]# 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服务器的信息。

    示例10 列出所有文件共享和共享的打印机

    ~]# 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)协议执行操作。

    示例11 列出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)手册页中的COMMANDS部分。

9.3 使用samba-regedit应用程序

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

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

~]# samba-regedit

使用以下键:

  • 光标向上和光标向下: 浏览注册表树和值。
  • ENTER:打开一个键或编辑一个值
  • TAB:在“”和“”窗格之间切换
  • Ctrl+C:关闭应用程序。
9.4 使用smbcacls实用程序

请参见第7.3节“使用smbcacls管理SMB共享上的ACL”。

9.5 使用smbclient实用程序

使用smbclient实用程序可以访问SMB服务器上的文件共享,与命令行FTP客户端类似。 例如,您可以使用它来上传和下载共享文件。

例如,要使用DOMAIN\user帐户对***server***上托管的***example***共享进行身份验证,请执行以下操作:

~]# smbclient -U "DOMAIN\user" //server/example
Enter domain\user's password:
Domain=[SERVER] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \>

smbclient成功连接到共享后,实用程序进入交互模式并显示以下提示:

smb: \>

要在交互式shell中显示所有可用的命令,请输入:

smb: \> help

要显示特定命令的帮助,请输入:

smb: \> help command_name

有关交互式shell中可用命令的更多详细信息和说明,请参见smbclient(1)手册页。

9.5.1 在交互模式下使用smbclient

如果您使用不带**-c参数的smbclient**,则该实用程序将进入交互模式。

以下过程显示如何连接到SMB共享并从子目录下载文件:

过程23 使用smbclient从SMB共享下载文件

  1. 连接到共享:

    ~]# smbclient -U "DOMAIN\user_name" //server_name/share_name
    
  2. 更改到**/example/**目录:

    smb: \> cd /example/
    
  3. 列出目录中的文件:

    smb: \example\> ls
    . D 0 Mon Sep 1 10:00:00 2017
    .. D 0 Mon Sep 1 10:00:00 2017
    example.txt N 1048576 Mon Sep 1 10:00:00 2017
    9950208 blocks of size 1024. 8247144 blocks available
    
  4. 下载example.txt文件:

    smb: \example\> get example.txt
    getting file \directory\subdirectory\example.txt of size 1048576 as
    example.txt (511975,0 KiloBytes/sec) (average 170666,7
    KiloBytes/sec)
    
  5. 从共享中断开:

    smb: \example\> exit
    
9.5.2 在脚本模式下使用smbclient

如果将**-c commands参数传递给smbclient**,则可以自动执行远程SMB共享上的命令。 这使您可以在脚本中使用smbclient

以下命令显示如何连接到SMB共享并从子目录下载文件:

~]# smbclient -U DOMAIN\user_name //server_name/share_name \
-c "cd /example/ ; get example.txt ; exit"
9.6 使用smbcontrol实用程序

smbcontrol实用程序使您能够将命令消息发送到smbdnmbdwinbindd或所有这些服务。 这些控制消息指示服务,例如,重新加载其配置。

示例12 重载smbd,nmbd和winbindd服务的配置

例如,要重载smbdnmbdwinbindd的配置,请将reload-config消息类型发送到all目标:

~]# smbcontrol all reload-config

有关可用命令消息类型的更多详细信息和列表,请参见smbcontrol(1)手册页。

9.7 使用smbpasswd实用程序

smbpasswd实用程序管理本地Samba数据库中的用户帐户和密码。

如果以用户身份运行该命令,则smbpasswd会更改用户的Samba密码。 例如:

[[email protected] ~]$ smbpasswd
New SMB password:
Retype new SMB password:

如果以root用户身份运行smbpasswd,则可以使用该实用程序来执行以下操作:

  • 创建新用户:
[[email protected] ~]# smbpasswd -a user_name
New SMB password:
Retype new SMB password:
Added user user_name.

注释

在将用户添加到Samba数据库之前,您必须在本地操作系统中创建帐户。 请参见第4.3.1节“添加新用户

  • 启用Samba用户:

    [[email protected] ~]# smbpasswd -e user_name
    Enabled user user_name.
    
  • 禁用Samba用户:

    [[email protected] ~]# smbpasswd -d user_name
    Disabled user user_name.
    
  • 删除用户:

    [[email protected] ~]# smbpasswd -x user_name
    Deleted user user_name.
    

有关更多详细信息,请参见smbpasswd(8)手册页。

9.8 使用smbstatus实用程序

smbstatus实用程序报告:

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

示例13 smbstatus 实用程序的输出

~]# smbstatus
Samba version 4.6.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 Mo Sep 1 10:00:00 2017 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 Mon Sep 1 10:00:00 2017

有关更多详细信息,请参见smbstatus(1)手册页。

9.9 使用smbtar实用程序

smbtar实用程序备份SMB共享或其子目录的内容,并将内容存储在tar归档文件中。 或者,您可以将内容写入磁带设备。

例如,要备份**/server/example/sharedemo目录的内容并将内容存储在/root/example.tar**存档中:

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

有关更多详细信息,请参见smbtar(1)手册页。

9.10 使用testparm实用程序

请参见第2节“使用testparm实用程序验证smb.conf文件”。

9.11 使用wbinfo实用程序

wbinfo实用程序查询并返回由winbindd服务创建和使用的信息。

注释

winbindd服务必须配置并运行以使用wbinfo

例如,您可以使用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)手册页。

10. 其他资源

  • 红帽Samba软件包包括用于安装软件包的所有Samba命令和配置文件的手册页。 例如,要显示**/etc/samba/smb.conf**文件的手册页,说明您可以在此文件中设置的所有配置参数:
~]# man 5 smb.conf
  • /usr/share/docs/samba-version/:包含由Samba项目提供的一般文档,示例脚本和LDAP模式文件。

  • 红帽集群存储管理指南”:提供有关设置Samba和集群简单数据库(CDTB)以共享存储在GlusterFS卷上的目录的信息。

  • 红帽企业版Linux 6集群管理指南”中的“集群Samba配置”部分介绍了如何设置Samba高可用性安装。

    此文档目前不适用于最新的红帽企业Linux版本。

  • 有关在红帽企业Linux上挂载SMB共享的详细信息,请参见“红帽企业Linux存储管理指南”中的相应部分。

相关标签: samba CIFS