文章目录
- 一、Samba介绍
- 1.1、Samba是什么
- 1.2、Samba的核心功能
- 1.3、Samba的主要组件
- 1.4、Samba的工作流程
- 1.5、Samba主要配置文件smb.conf
- 二、Samba安装
- 2.1、更新yum源
- 2.2、安装Samba客户端和服务器软件包
- 2.3、启动Samba
- 三、Samba的使用
- 3.1、设置Samba服务的全局选项
- 3.2、testparm命令验证配置文件的正确性
- 3.3、添加用户
- 3.4、设置Samba用户映射
- 四、安全级别
一、Samba介绍
1.1、Samba是什么
Samba是一种在Linux和UNIX系统上实现SMB协议的免费软件,能够让不同操作系统之间进行文件和打印机共享。
1.2、Samba的核心功能
- 文件共享
- 跨平台文件访问:Samba允许不同操作系统的计算机之间共享文件和目录,尤其是在混合网络环境中。这使得Windows、Linux和macOS系统之间能够无缝地共享文件。
- 配置文件管理:通过配置文件smb.conf,Samba服务器可以灵活设置共享资源、身份验证和访问控制等选项。
- 打印机共享
- 共享打印服务:Samba不仅用于文件共享,还广泛应用于共享打印机。在网络上的多个计算机可以通过Samba访问同一个打印机,提高办公效率。
- 无需额外驱动:由于Samba使用标准化的SMB协议,用户无需额外安装驱动程序,方便了打印机的共享和使用。
- 用户验证与授权
- 支持多种验证方式:Samba支持基于用户的、基于域的和Kerberos身份验证机制。这确保只有经过身份验证的用户才能访问共享资源,提高了安全性。
- 访问控制:管理员可以精细控制每个用户的访问权限,包括只读、读写等。
- 集成企业环境
- 作为域控制器:Samba可以用作Windows域控制器的替代品,管理Windows域内的用户、组和计算机。这在没有Windows服务器的情况下非常实用。
- 备份功能:Samba还可以用于将不同计算机的文件备份到中央存储位置,确保数据的可用性和冗余。
- 网络浏览服务
- NETBIOS名称解析:通过nmbd服务,Samba提供NETBIOS名称解析功能,使客户端能够在局域网内发现和访问共享资源。
- WINS和DNS服务:Samba还支持WINS(Windows Internet Name Service)和DNS服务,进一步方便网络资源的查找和管理。
Samba的核心功能涵盖了从基本的文件和打印机共享到复杂的用户验证、企业环境集成以及网络浏览服务,使其成为跨平台网络环境中不可或缺的工具。这些功能共同构成了一个高效、灵活且安全的共享解决方案,适用于各种规模的网络环境。
1.3、Samba的主要组件
- smbd(Samba Daemon)
smbd是Samba服务器的核心进程,负责处理所有的网络请求和文件共享。当用户从Windows、Linux或其他支持SMB/CIFS协议的客户端访问Samba服务器时,smbd进程将接收并处理这些请求,包括认证用户身份、文件和目录的访问控制等。
- nmbd(NetBIOS Name Server)
nmbd进程是Samba服务器的另一个重要组成部分,它负责处理NetBIOS名称解析和广播。具体来说,nmbd通过NetBIOS协议提供资源的名称解析,使客户端能够通过名称找到Samba服务器上的共享资源。
- winbindd
winbindd是用于与Windows域进行身份验证和用户登录的组件。它可以连接到Windows域控制器,并从中检索用户和域信息,处理Windows用户和组的身份验证,并提供与Windows域的集成。
- smbstatus
smbstatus是一个用于显示当前Samba服务器状态和活动连接的命令。它会显示与Samba服务器相关的进程、连接信息和资源使用情况,帮助管理员监控服务器的活动。
- smbcontrol
smbcontrol是用于与smbd进程进行通信和控制的命令行工具。它可以用来发送信号给smbd进程,以触发特定的操作,如重新加载配置文件、启动或停止特定的共享等。
1.4、Samba的工作流程
- 配置共享资源
- 编辑配置文件:管理员首先需要在Samba服务器上编辑主配置文件smb.conf,指定需要共享的目录和共享权限。
- 设置日志文件:在配置文件中指定日志文件的名称和存放路径,以便记录访问信息。
- 设定本地系统权限:设置共享目录的本地系统权限,以确保正确的文件和目录访问控制。
- 重新加载配置文件:重新加载修改后的配置文件或重新启动SMB服务,使配置生效。
- 客户端请求
- 发起请求:当客户端(如Windows或Linux系统)尝试访问Samba服务器上的共项目录时,它会发送一个网络请求。
- 查询配置文件:Samba服务器接收到请求后,会查询主配置文件smb.conf,以确认是否共享了请求的目录并检查客户端是否有权限访问。
- 服务器处理请求
- 验证用户身份:如果配置文件中定义了需要身份验证,则Samba服务器会验证客户端提供的用户名和密码,以确定是否允许访问。
- 记录访问信息:Samba服务器会把本次访问信息记录在日志文件中,包括来访的主机名和访问时间等信息。
- 访问控制
- 读取配置文件规则:一旦认证通过,Samba服务器会根据配置文件中的规则和权限来控制客户端对共享文件和打印机的访问。
- 执行操作:经过验证且符合访问控制策略的客户端可以进行读取、写入、执行文件等操作。
- 文件传输或打印服务
- 文件传输:客户端获得访问权限后,可以像访问本地文件系统一样访问Samba共享中的文件和目录,并由Samba服务负责在客户端和服务器之间传输文件数据。
- 打印服务:对于共享的打印机,Samba服务允许客户端将打印作业发送到共享打印机,然后Samba服务器将打印作业传输给实际的打印机设备。
1.5、Samba主要配置文件smb.conf
smb.conf文件是Samba服务的核心,它负责存储所有共享资源和访问控制信息,是配置和管理Samba服务的关键。该文件大致可分为两部分:全局设置(Global Settings)和共享定义(Share Definitions)。全局设置影响整个Samba服务器的配置,而共享定义则指定具体的共享资源和访问权限。
- 全局设置
- workgroup:此选项设置了Samba服务器所属的工作组或域名,如workgroup = WORKGROUP。
- server string:这是Samba服务器的简短描述,例如server string = %h server (Samba,Ubuntu)。
- security:设置安全模式,常见的模式有share、user、server、domain和ads。例如security = user指定需要用户名和密码才能访问共享资源。
- passdb backend:定义用户密码数据库的后端类型,如passdb backend = tdbsam表示使用TDB数据库来存储用户验证信息。
- encrypt passwords:此选项控制是否对密码进行加密,为了与现代Windows系统兼容通常设置为yes。
- 共享定义
- comment:为共享资源添加描述性注释,如comment = Public Share。
- path:指定共享资源的完整路径,如path = /home/public。
- browseable:此选项设置共享是否可以在网络邻居中被浏览,如browseable = yes。
- guest ok:设置是否允许匿名访问共享,如guest ok = no表示禁止匿名访问。
- valid users:指定允许访问共享资源的用户或组,如valid users = @tech, manager。
- read only:控制共享资源是否为只读,如read only = yes表示共享目录只能读取不可写入。
二、Samba安装
2.1、更新yum源
[root@iZbp11ghgwglu1equx7sngZ ~]# dnf update -y
Last metadata expiration check: 0:09:22 ago on Mon 05 Aug 2024 04:56:59 PM CST.
Dependencies resolved.
==========================================================================================================================================================================================
Package Architecture Version Repository Size
2.2、安装Samba客户端和服务器软件包
[root@iZbp11ghgwglu1equx7sngZ ~]# yum install samba
Last metadata expiration check: 2:01:58 ago on Mon 05 Aug 2024 04:56:59 PM CST.
Dependencies resolved.
==========================================================================================================================================================================================
Package Architecture Version Repository Size
==========================================================================================================================================================================================
Installing:
samba x86_64 4.20.1-1.el9 baseos 1.0 M
Installing dependencies:
cups-libs x86_64 1:2.3.3op2-29.el9 baseos 262 k
libnetapi x86_64 4.20.1-1.el9 baseos 145 k
samba-common-tools x86_64 4.20.1-1.el9 baseos 482 k
samba-dcerpc x86_64 4.20.1-1.el9 baseos 720 k
samba-ldb-ldap-modules x86_64 4.20.1-1.el9 baseos 29 k
samba-libs x86_64 4.20.1-1.el9 baseos 128 k
Transaction Summary
2.3、启动Samba
[root@iZbp11ghgwglu1equx7sngZ ~]# systemctl start smb
[root@iZbp11ghgwglu1equx7sngZ ~]# systemctl status smb
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; preset: disabled)
Active: active (running) since Mon 2024-08-05 18:59:25 CST; 5s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 85655 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 3 (limit: 22555)
Memory: 21.0M
CPU: 52ms
CGroup: /system.slice/smb.service
├─85655 /usr/sbin/smbd --foreground --no-process-group
├─85659 /usr/sbin/smbd --foreground --no-process-group
└─85660 /usr/sbin/smbd --foreground --no-process-group
Aug 05 18:59:25 iZbp11ghgwglu1equx7sngZ systemd[1]: Starting Samba SMB Daemon...
Aug 05 18:59:25 iZbp11ghgwglu1equx7sngZ smbd[85655]: [2024/08/05 18:59:25.382735, 0] ../../source3/smbd/server.c:1746(main)
Aug 05 18:59:25 iZbp11ghgwglu1equx7sngZ smbd[85655]: smbd version 4.20.1 started.
Aug 05 18:59:25 iZbp11ghgwglu1equx7sngZ smbd[85655]: Copyright Andrew Tridgell and the Samba Team 1992-2024
Aug 05 18:59:25 iZbp11ghgwglu1equx7sngZ systemd[1]: Started Samba SMB Daemon.
三、Samba的使用
3.1、设置Samba服务的全局选项
置Samba服务的全局选项,需要编辑Samba的主配置文件/etc/samba/smb.conf
- 设置工作组名(workgroup)
[root@iZbp11ghgwglu1equx7sngZ /]# vi etc/samba/smb.conf
[global]
workgroup = SAMBA
- 设置服务器描述(description)
[global]
server string = Samba Server on %h
- 设置日志级别(log level)
[global]
log level = 1
- 设置主机名(netbios name)
[global]
netbios name = SERVER_NAME
- 设置安全模式(security mode)
[global]
security = user
- 设置共享目录(shared directory)
[global]
path = /path/to/shared/directory
- 设置匿名访问权限(guest ok)
[global]
guest ok = yes
- 设置允许的用户(valid users)
[global]
valid users = user1 user2
- 设置只读访问(read only)
[global]
read only = yes
- 设置文件系统缓存(file system cache)
[global]
file system cache = yes
3.2、testparm命令验证配置文件的正确性
testparm命令是Samba套件的一部分,用于检查smbd配置文件(通常是smb.conf)的内部正确性。如果testparm命令的语法检查成功,那么可以确保Samba服务能够正确地加载配置文件。但是,这并不能保证加载后的操作会按照预期进行,因此还需要进行额外的操作确认。
testparm命令在大多数Linux发行版中都可以使用,包括Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian等。如果在某些Linux发行版中无法使用,通常是因为Samba套件没有被安装。在这种情况下,可以通过相应的包管理器来安装Samba。
这个命令会检查/etc/samba/smb.conf文件的内部正确性
[root@iZbp11ghgwglu1equx7sngZ ~]# testparm /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
WARNING: The 'netbios name' is too long (max. 15 chars).
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
printcap name = cups
security = USER
workgroup = SAMBA
idmap config * : backend = tdb
cups options = raw
[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S
[printers]
browseable = No
comment = All Printers
create mask = 0600
path = /var/tmp
printable = Yes
[print$]
comment = Printer Drivers
create mask = 0664
directory mask = 0775
force group = @printadmin
path = /var/lib/samba/drivers
write list = @printadmin root
这个命令会输出在smb.conf中未使用的所有选项,因此它们设置为默认值
[root@iZbp11ghgwglu1equx7sngZ ~]# testparm -v /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
WARNING: The 'netbios name' is too long (max. 15 chars).
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
abort shutdown script =
acl claims evaluation = AD DC only
ad dc functional level = 2008_R2
add group script =
additional dns hostnames =
add machine script =
addport command =
addprinter command =
add share command =
add user script =
add user to group script =
afs token lifetime = 604800
afs username map =
aio max threads = 100
algorithmic rid base = 1000
allow dcerpc auth level connect = No
allow dns updates = secure only
allow insecure wide links = No
allow nt4 crypto = No
allow trusted domains = Yes
allow unsafe cluster upgrade = No
apply group policies = No
这个命令会设置日志级别为3,然后检查smb.conf文件的内部正确性
[root@iZbp11ghgwglu1equx7sngZ ~]# testparm -d 3 /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
lp_load_ex: refreshing parameters
Initialising global parameters
Processing section "[global]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
WARNING: The 'netbios name' is too long (max. 15 chars).
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
这个命令会设置日志级别为3,然后检查smb.conf文件的内部正确性
[root@iZbp11ghgwglu1equx7sngZ ~]# testparm -d 3 /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
lp_load_ex: refreshing parameters
Initialising global parameters
Processing section "[global]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
WARNING: The 'netbios name' is too long (max. 15 chars).
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
3.3、添加用户
创建本地用户
[root@iZbp11ghgwglu1equx7sngZ ~]# useradd samba
设置Samba密码
[root@iZbp11ghgwglu1equx7sngZ ~]# smbpasswd -a samba
New SMB password:
Retype new SMB password:
Added user samba.
创建共享目录
[root@iZbp11ghgwglu1equx7sngZ ~]# mkdir /home/samba/sbin
编辑配置文件
[root@iZbp11ghgwglu1equx7sngZ ~]# cat /etc/samba/smb.conf
[sbin]
path = /home/samba/sbin
comment = <注释>
browseable = yes
writable = yes
create mask = 0755
directory mask = 0755
valid users = samba
重启Samba服务
3.4、设置Samba用户映射
创建用户映射文件
- 编辑/etc/samba/smbusers文件:此文件用于存放共享账号的用户映射关系。
[root@iZbp11ghgwglu1equx7sngZ ~]# vi /etc/samba/smbuse
[root@iZbp11ghgwglu1equx7sngZ ~]# cat /etc/samba/smbuse
smbuser = samba
编辑配置文件
- 修改/etc/samba/smb.conf文件:在配置文件的适当位置(通常是[global]部分或特定共享服务的段落),添加username map = /etc/samba/smbusers这一行,以指定用户映射文件的位置
- 配置共享服务参数:在smb.conf文件中,为每个需要用户映射的共享服务配置相应的参数,如path, comment, browseable, writable, valid users等。这些参数定义了共享目录的路径、描述、可见性、可写性和允许访问的用户
添加共享账号用户映射
- 在/etc/samba/smbusers文件中添加映射关系:例如,如果要让本地用户zhangsan和lisi都可以用共享账号smbuser登录,可以在smbusers文件中添加一行smbuser = zhangsan lisi。这样,不管是zhangsan还是lisi,他们都可以用自己的密码通过smbuser这个共享账号来访问Samba共享
重启Samba服务
四、安全级别
Samba的安全级别包括share、user、server和domain四个等级,用于控制用户访问共享资源的验证方式和权限
- share安全级别
- 特点:客户端不需要提供用户名和密码即可访问共享资源,属于匿名访问。
- 适用场景:适用于对安全性要求不高的内部网络或者公共资源的共享,优点是方便和易于配置,但缺点是缺乏用户身份验证机制,安全性较低。
- user安全级别
- 特点:客户端需要提供用户名和密码,认证由Samba服务器本机负责。
- 优点:提供了基于用户的访问控制,能够为每个用户设定权限,安全性较高。同时,可以通过编辑smbusers文件来映射不同用户,方便管理。
- 适用场景:适用于需要身份验证和访问控制的企业或组织内部网络,确保只有授权用户才能访问敏感数据。
- server安全级别
- 特点:客户端需要提供用户名和密码,认证由另一台Samba服务器或Windows服务器负责。
- 优点:可以将用户认证委托给专门的认证服务器,便于集中管理用户账号和密码。如果认证失败,会退到user安全级别。
- 适用场景:适用于有多个服务器并且希望统一管理用户认证的复杂网络环境,可以减轻单个服务器的压力并提高安全性。
- domain安全级别
- 特点:要求网络上存在一台NT PDC(主域控制器),Samba把用户名和密码递交给NT PDC去验证。
- 优点:适用于Windows网络域环境,可以实现与Windows AD(活动目录)的无缝集成,方便在大型网络中使用。
- 适用场景:适用于需要高度集成的Windows网络域环境,例如企业中多个部门之间共享资源时,可以通过域控制器统一管理用户和权限。