linux服务之Samba(centos7.6)

在文章的开始,希望大家关注公众号Lind-Learn,在这里会分享各类计算机技术的知识。


1. samba介绍

在日常办公环境中,操作系统除了windows以外,还有linux或者UNIX。windows和linux或者UNIX之间共享文件是无法直接完成的,为了解析不同系统之间的文件共享,samba服务可以较好地解决不同系统平台之间的共享问题。
samba是在LINUX和UNIX系统上实现SMB协议的一个免费C/S软件,由服务器及客户端程序构成
SMB(Server Messages Block,信息服务块)是一种再局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等泽园的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他。

2. samba部署

  • 基础命令
# 安装软件包
[root@Lind ~]# yum -y install samba samba-client
# samba:客户端
# samba-client:客户端提供了smbclient命令

# 设置服务自启动
[root@Lind ~]# systemctl enable smb nmb
# 组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口
# 注意这里nmb是依赖rpc(远程过程调用服务)服务的(一般默认是安装好的)

# 开启服务
[root@Lind ~]# systemctl start smb nmb

  • samba配置文件
[root@Lind ~]# vim /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
# 你可以参考更详细的示例文件 (smb.conf.example) 或阅读 smb.conf 的手册页。testparm 命令可以用来验证配置文件的正确性
[global] # 这部分包含了全局设置,适用于所有Samba共享
	# 设置工作组名称为 "SAMBA",Windows系统中,同一个工作组中的计算机更容易互相发现。
        workgroup = SAMBA 
        
	# 设置安全模式为“用户”,要求客户端在访问共享资源时提供用户名和密码。
        security = user
        # 安全模式有五种
        # 1. user(用户级安全)
        #	这是最常用的安全模式。用户必须提供有效的用户名和密码来访问共享资源。认证在Samba服务器上完成,适用于大多数工作组和域环境。
        # 2. share(共享及安全)
        #	用户不需要提供用户名,只需要提供访问共享资源的密码。这种模式主要用于不需要严格控制用户权限的简单环境。此模式在现代Samba版本中已经被废弃,不建议使用。
        # 3. domain(域级安全)
        #	Samba服务器作为域成员加入到Windows NT域中,用户的认证由域控制器(PDC或BDC)进行。Samba将用户的认证请求转发到域控制器,适用于需要集成到现有Windows NT域的环境中。
        # 4. abs(Active Directory安全)
        #	Samba服务器作为Active Directory域的成员,使用Kerberos进行认证。这种模式用于Samba服务器加入Active Directory域的场景,适合现代企业环境。
        # 5. server(服务及安全)
        #	Samba将用户的认证请求转发到另一台Samba服务器或Windows服务器上。如果该服务器接受请求,那么用户就被认为是已认证的。这种模式也较少使用,在现代Samba配置中不建议使用。
		
	# 指定Samba使用 tdbsam 作为密码数据库,这是一种轻量级数据库格式,适用于存储用户认证信息。
        passdb backend = tdbsam
	
    # 启用CUPS打印系统的支持。
        printing = cups
        
	# 指定打印机能力文件名称为CUPS。CUPS会自动生成这个文件以列出可用的打印机。
        printcap name = cups
        
	# 自动加载在系统上配置的所有打印机。
        load printers = yes
        
	 将打印数据直接发送到打印机,而不进行格式转换。
        cups options = raw

[homes]# 这个部分配置了用户的家庭目录共享。
	# 为共享提供描述性注释,说明它是家庭目录。
        comment = Home Directories
        
	# 仅允许当前登录用户访问自己的家庭目录。%S表示共享名(通常是用户名),%D%w%S是域控制器相关的参数。
        valid users = %S, %D%w%S
        
	#  这个共享不会显示在网络邻居中,用户需要知道路径才能访问。
        browseable = No
    # 共享的内容不是只读的,用户可以进行写入操作。
        read only = No
    # 继承文件系统中的访问控制列表(ACL)权限。
        inherit acls = Yes

[printers]# 这部分配置了打印机共享。
	# 为打印机共享提供描述性注释。
        comment = All Printers
        
	# 打印机的临时文件目录。当文件被发送到打印机时,它们会临时存储在这个目录中。
        path = /var/tmp
        
   # 标记此共享为可打印的。
        printable = Yes
        
   # 设置新创建的打印文件的权限,使得只有文件所有者可以读写。
   # 第一位表示特殊权限位4 2 1(分别表示设置用户ID位,设置组ID位,粘粘滞位),后面的三位跟一般文件的权限一样
        create mask = 0600
        
   # 打印机共享不会显示在网络邻居中。
        browseable = No

[print$]# 这部分配置了存储打印机驱动程序的共享。
	# 为此共享提供描述性注释,说明它是存储打印机驱动程序的地方。
        comment = Printer Drivers
        
    # 指定驱动程序存储的路径。
        path = /var/lib/samba/drivers
        
    # 仅允许 printadmin 组和 root 用户有写入权限。
    # 组前面加上@符
        write list = @printadmin,root
        
    # 强制所有文件的属组为 printadmin。
        force group = @printadmin
        
    # 设置新文件的权限,使得文件所有者和组成员可以读写,其他用户只读。
        create mask = 0664
        
    # 设置新目录的权限,使得所有者和组成员可以读写和执行,其他用户只读和执行。
        directory mask = 0775

注:smb配置样例文件篇幅较长,相关解释放在文章尾部

3. samba文件共享

  • samba共享设置
[共享名]
comment =			描述
path =				共享目录绝对路径
browseable = no|yes	是否允许浏览
hosts allow = 		允许哪些网段访问
public = no|yes		类似于guest ok
valid users = 		允许哪些用户可以访问共享
# 注:public和valid users不能同时使用,这样public没效果
writeable = no|yes	是否开启所有人写权限
write list = @组 用户 上述代码为NO,允许哪些用户可写
readonly = no|yes	是否只读共享
read list = @组 用户 指定只能读取该共享资源的用户和组

vaild users 指定能够进入此资源的特定用户和组
invalid users 指定不能够使用共享资源的用户和组
read list 指定只能读取该共享资源的用户和组
write list 指定能读取和写该共享资源的用户和组
admin list 指定能管理该共享资源(包括读写和权限赋予等)的用户和组
pulbic 指明该共享资源是否能给游客装好访问,这个开关有时候也叫guest ok,所以有的配置文件中guest ok = yes是一样的。
hide dot files 知名是是不是像unix那样隐藏以"."号开头的文件

create mode 指明新建立的文件的属性,一般是0755
directory mode 指明新建立的目录的属性,一般是0755

sync always 知名对该共享资源进行写操作后是否进行同步操作
short preserve case 指明不管文件名大小写。
preserve case 指明保持大小写
case sensitive 指明是否对大小写敏感,一般选no,不然可能引起错误。
mangle case 指明混合大小写。
default case 指明缺省的文件名是全部大写还是小写。
force user 前置把建立文件的属主是谁。防止相同权限的用户删除别人的东西
wide links 指明是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links = no将使该连接不可用。
max connections = n 设定同时连接数是n
delete readonly 指明能否删除共享资源李米娜已经定义为只读的文件。

  • samba用户

由于系统本地用户无法直接登录,必须samba用户才可以登录
创建samba的方法

  1. 创建系统用户
  2. 将系统用户转为samba用户

smbpasswd命令介绍
smbpasswd -改变用户的SMB口令
-a 添加用户 # smbpasswd -a lind
-x 删除用户 # smbpasswd -x lind
-d 禁用账户 # smbpasswd -d lind
-e 取消禁用 # smbpasswd -e lind
-n 清除密码 # smbpasswd -n lind

  • 共享案例
  1. 新建文件夹/common
  2. 在server上配置SMB服务
  3. 您的SMB服务器必须是workgroup工作组的一个成员
  4. 共享/common目录 共享名必须为common
  5. 只有192.168.11.0网段内的客户端可以访问common共享
  6. common必须是可以浏览的
  7. 用户basim必须能够读共享中的内容,如果需要的话,验证密码是lind
[root@Lind samba]# vim /etc/samba/smb.conf
# 添加内容
[common]
        comment = test
        path = /common
        browseable = yes
        hosts allow = 192.168.11.0/24
        valid users = basim

# 创建目录
[root@Lind samba]# mkdir /common

# 重启服务
[root@Lind samba]# systemctl restart smb nmb
[root@Lind /]# useradd basim
[root@Lind /]# smbpasswd -a basim

4. 客户端挂载共享

smbclient - 类似FTP操作方式访问SMB/CIFFS服务器资源的客户端
-L 此选项允许你查看服务器上可以获得的服务资源
-U|–user=username[%password] 这个参数指定程序连接时使用的用户名或者用户名和密码,如果米欸有指定password,将提示用户输入/
-W|–workgroup=domain 设置用户名的SMB域。这个选项越过了smb.conf配置文件中的默认域
-N 不用询问密码

[root@Lind /]# mount -o username=basim,password=lind -t cifs //192.168.11.20/common /mnt/samba/
  • mount: 这是 Linux 和类 Unix 系统中用于挂载文件系统的命令。
  • -o: 表示“options”,后面跟着挂载选项。
  • username=basim: 指定挂载时使用的用户名为 basim。
  • password=lind: 指定挂载时使用的密码为 lind。请注意,直接在命令行中传递密码并不安全,因为这可能会导致密码被记录在历史记录或被其他用户看到。
  • -t cifs: 指定要挂载的文件系统类型为 CIFS (Common Internet File System),这是 Samba 使用的文件系统协议。
  • //192.168.11.20/common: 这是远程 Samba 服务器的地址以及要挂载的共享名称。在这个例子中,服务器的 IP 地址是 192.168.11.20,共享名是 common。
  • /mnt/samba/: 这是本地文件系统上的一个目录,即挂载点。挂载完成后,你就可以通过访问这个本地目录来访问远程共享中的文件和目录了。

综上所述,这条命令的作用是将位于 IP 地址 192.168.11.20 上的 Samba 服务器的 common 共享挂载到本地的 /mnt/samba/ 目录下,并且使用用户名 basim 和密码 lind 进行身份验证。

unmount dir取消挂载
实现永久挂载:在/etc/fstab文件中增添挂载文件

附:smb配置样例文件

[root@Lind ~]# vim /etc/samba/smb.conf.example 
# 这是主 Samba 配置文件。有关这里列出的选项的详细信息,请参阅 smb.conf(5) 手册页。
# Samba 有大量可配置选项,其中大多数未在此示例中显示。
#
# Samba Wiki 包含许多安装、配置和使用 Samba 的分步指南:
# https://wiki.samba.org/index.php/User_Documentation
#
# 在此文件中,以分号(;)或井号(#)开头的行是注释并会被忽略。此文件使用井号表示注释,
# 分号用于文件中可能希望配置的部分。
#
# 注意:在修改此文件后运行 "testparm" 命令以检查基本语法错误。

#---------------
# 安全增强型 Linux (SELinux) 的注意事项:
#
# 如果要允许 Samba 主域控制器 (PDC) 使用 useradd 和 groupadd 系列的二进制文件,
# 请将 samba_domain_controller 布尔值打开。作为 root 用户运行以下命令来打开此布尔值:
setsebool -P samba_domain_controller on

#
# 如果你希望通过 Samba 共享 home 目录,请将 samba_enable_home_dirs 布尔值打开。
# 作为 root 用户运行以下命令来打开该布尔值:
setsebool -P samba_enable_home_dirs on

#
# 如果创建了一个新目录,如新建的顶级目录,请将其标签设为 samba_share_t,
# 这样 SELinux 才允许 Samba 读取和写入该目录。不要为系统目录(如 /etc/ 和 /home/)
# 设置 samba_share_t 标签,因为这些目录应该已经有 SELinux 标签。
#
# 运行 "ls -ldZ /path/to/directory" 命令查看某个目录的当前 SELinux 标签。

#
# 仅对你创建的文件和目录设置 SELinux 标签。使用 chcon 命令可以临时更改标签:
chcon -t samba_share_t /path/to/directory

#
# 通过 chcon 进行的更改在文件系统重新标记或运行 restorecon 等命令时会丢失。
#
# 使用 samba_export_all_ro 或 samba_export_all_rw 布尔值共享系统目录。
# 共享这些目录并只允许只读权限:
setsebool -P samba_export_all_ro on
# 共享这些目录并允许读写权限:
setsebool -P samba_export_all_rw on

#
# 若要运行脚本 (preexec/root prexec/print command/...),
# 将它们复制到 /var/lib/samba/scripts/ 目录中,以便 SELinux 允许 smbd 运行它们。
# 请注意,如果你将脚本移动到 /var/lib/samba/scripts/,它们将保留现有的 SELinux 标签,
# 这些标签可能 SELinux 不允许 smbd 运行。复制脚本将产生正确的 SELinux 标签。
# 作为 root 用户运行 "restorecon -R -v /var/lib/samba/scripts" 命令以应用这些文件的正确 SELinux 标签。
restorecon -R -v /var/lib/samba/scripts

#--------------
#
#======================= 全局设置 =====================================

[global]

# ----------------------- 与网络相关的选项 -------------------------
#
# workgroup = Windows NT 域名或工作组名称,例如 MYGROUP。
#
# server string = 相当于 Windows NT 描述字段。
#
# netbios name = 用于指定不与主机名绑定的服务器名,
# 最大长度为 15 个字符。
#
# interfaces = 用于配置 Samba 监听多个网络接口。
# 如果你有多个接口,可以使用 "interfaces =" 选项来
# 配置 Samba 监听哪些接口。绝不要忽略本地主机接口 (lo)。
#
# hosts allow = 允许连接的主机。此选项也可以在
# 每个共享的基础上使用。
#
# hosts deny = 不允许连接的主机。此选项也可以在
# 每个共享的基础上使用。
#
	workgroup = MYGROUP
	server string = Samba Server Version %v

	netbios name = MYSERVER

	interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
	hosts allow = 127. 192.168.12. 192.168.13.

# --------------------------- 日志记录选项 -----------------------------
#
# log file = 指定日志文件的写入位置以及如何拆分。
#
# max log size = 指定日志文件的最大大小。日志
# 文件达到指定大小时会轮换。
#

	# 日志文件按每台机器拆分:
	log file = /var/log/samba/log.%m
	# 每个日志文件的最大大小为 50KB,然后轮换:
	max log size = 50

# ----------------------- 独立服务器选项 ------------------------
#
# security = Samba 运行的模式。可以设置为 user、share
# (已弃用) 或 server (已弃用)。
#
# passdb backend = 用于存储用户信息的后端。新
# 安装应使用 tdbsam 或 ldapsam。无需额外配置
# 即可使用 tdbsam。"smbpasswd" 实用程序提供向后兼容性。
#

	security = user
	passdb backend = tdbsam


# ----------------------- 域成员选项 ------------------------
#
# security = 必须设置为 domain 或 ads。
#
# passdb backend = 用于存储用户信息的后端。新
# 安装应使用 tdbsam 或 ldapsam。无需额外配置
# 即可使用 tdbsam。"smbpasswd" 实用程序提供向后兼容性。
#
# realm = 仅当 "security = ads" 选项设置时才使用 realm 选项。
# realm 选项指定主机所在的 Active Directory 域。
#
# password server = 仅当 "security = server"
# 选项设置时使用,或当你无法使用 DNS 定位域控制器时使用。
# 参数列表可以包括 My_PDC_Name、[My_BDC_Name] 和 [My_Next_BDC_Name]:
#
# password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
#
# 使用 "password server = *" 自动定位域控制器。

	security = domain
	passdb backend = tdbsam
	realm = MY_REALM

	password server = <NT-Server-Name>

# ----------------------- 域控制器选项 ------------------------
#
# security = 必须设置为 user 以成为域控制器。
#
# passdb backend = 用于存储用户信息的后端。新
# 安装应使用 tdbsam 或 ldapsam。无需额外配置
# 即可使用 tdbsam。"smbpasswd" 实用程序提供向后兼容性。
#
# domain master = 指定 Samba 成为域主浏览器,允许
# Samba 在子网之间汇总浏览列表。如果已有 Windows NT 域控制器执行此任务,
# 则不要使用 "domain master" 选项。
#
# domain logons = 允许 Samba 为 Windows 工作站提供网络登录服务。
#
# logon script = 指定客户端登录时运行的脚本。 这些
# 脚本必须在名为 NETLOGON 的共享中提供。
#
# logon path = 指定 (使用 UNC 路径) 存储用户配置文件的位置。
#
#
	security = user
	passdb backend = tdbsam

	domain master = yes
	domain logons = yes

	# 以下登录脚本名由机器名 (%m) 决定:
	logon script = %m.bat
	# 以下登录脚本名由所用 UNIX 用户决定:
	logon script = %u.bat
	logon path = \\%L\Profiles\%u
	# 使用空路径来禁用配置文件支持:
	logon path =

	# 各种脚本可以在域控制器或独立
	# 机器上使用,以添加或删除相应的 UNIX 帐户:

	add user script = /usr/sbin/useradd "%u" -n -g users
	add group script = /usr/sbin/groupadd "%g"
	add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
	delete user script = /usr/sbin/userdel "%u"
	delete user from group script = /usr/sbin/userdel "%u" "%g"
	delete group script = /usr/sbin/groupdel "%g"


# ----------------------- 浏览器控制选项 ----------------------------
#
# local master = 设置为 no 时,Samba 不会成为网络上的主浏览器。
# 设置为 yes 时,适用正常的选举规则。
#
# os level = 决定服务器在主浏览器选举中的优先级。
# 默认值应该是合理的。
#
# preferred master = 设置为 yes 时,Samba 在启动时强制进行本地浏览器选举
# (并使其获胜的机会稍高一些)。
#
	local master = no
	os level = 33
	preferred master = yes

#----------------------------- 名称解析 -------------------------------
#
# 此部分详细介绍了对 Windows Internet 名称服务 (WINS) 的支持。WINS
# 能够在网络中动态分配和解析 NetBIOS 名称到 IP 地址。
#
# WINS 支持 NetBIOS 名称到 IP 地址的动态分配和解析。
#
# 包括 WINS 服务器:
	wins support = yes
# 成为 WINS 服务器,并且仍然允许域控制器使用 DNS 进行名称解析。
# 包括 WINS 客户端:
	wins server = w.x.y.z
	wins proxy = yes

# --------------------------- 打印选项 -----------------------------
#
# Load printers = yes: 提示 Samba 从您的打印机数据库加载打印机列表。
# 这适用于 CUPS、lprng、LPD、LPR 和传统 UNIX 打印服务。
# 请注意,打印机驱动程序存储在打印服务器上,而不是 Samba 本身。
# 
	load printers = yes
	cups options = raw

# 当启用此设置时,Samba 将假定所有打印机均为等同的。
# 启用此设置并在客户端的 “\\servername\printer” 字段中使用 “printer” 名称,
# 可以为所有打印机指定相同的驱动程序和配置选项。
# 默认情况下,此选项设置为 yes。
#
	#设置为 no 以防止将客户端设置更改到服务器。 
	#如果禁用此设置,您需要将所需的驱动程序复制到每个客户端计算机。 
	use client driver = no

# 指定打印命令,默认情况下,Samba 使用 lpr (BSD 风格的打印系统):
	printing = cups
	print command = lpr -r -P'%p' %s
	# lpq 命令列出队列中的作业:
	lpq command = lpq -P'%p'
	# lprm 命令删除队列中的作业:
	lprm command = lprm -P'%p' %j
	# lppause 命令暂停队列中的作业:
	lppause command = lppause -P'%p' %j
	# lpresume 命令恢复队列中的作业:
	lpresume command = lpresume -P'%p' %j
	# lprsetup 命令从队列中删除作业:
	lprsetup command = lprsetup -P'%p'

# ------------------------ 文件系统选项 ------------------------------
#
# map archive = yes: 将 Windows archive 位映射到 UNIX x 位:
	map archive = yes

# map hidden = yes: 将 Windows hidden 位映射到 UNIX h 位:
	map hidden = yes

# map system = yes: 将 Windows system 位映射到 UNIX s 位:
	map system = yes

# map read only = yes: 将 Windows read-only 位映射到 UNIX r 位:
	map read only = yes

# ------------------------ 存取控制选项 ------------------------------
#
# invalid users = root: 列出禁止访问的用户。
# 这些用户将被拒绝对共享的访问权。默认情况下,这些用户的访问权限被拒绝。
	invalid users = root
# valid users = 允许访问的用户列表。默认情况下,这些用户的访问权限被拒绝。
	valid users = @smbusers
# read list = 允许只读访问的用户和组的列表。
	read list = @staff
# write list = 允许写入访问的用户和组的列表。
	write list = @staff

# --------------------------- 共享定义 -----------------------------
#
# "smb share" 是指与 Samba 服务器共享的网络资源。它可以是目录、打印机或
# 硬盘。每个共享必须有一个 [name] 部分,包含定义共享的选项。
# 每个共享可以有多个子部分,每个部分都包含单独的配置。
# 
[homes]
	comment = Home Directories
	browseable = no
	writable = yes

# 一个简单的网络目录共享的示例:
[Shared_Documents]
	comment = Public Stuff
	path = /home/public
	public = yes
	writable = yes
	printable = no
	create mask = 0777
	directory mask = 0777

[printers]
	comment = All Printers
	path = /var/spool/samba
	browseable = no
	guest ok = no
	writable = no
	printable = yes
# 特定打印机的共享示例:
[HP_LaserJet_6L]
	comment = HP_LaserJet 6L
	path = /var/spool/samba
	browseable = no
	guest ok = no
	writable = no
	printable = yes
	printer name = HP_LaserJet_6L

[netlogon]
	comment = Network Logon Service
	path = /var/lib/samba/netlogon
	browseable = no
	writable = no

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值