在文章的开始,希望大家关注公众号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