CentOS7.9 安装配置 samba
概述
1987年,微软公司和英特尔公司共同制定了SMB(Server Messages Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。当时,Tridgwell想把这款软件的名字SMBServer注册成为商标,但却被商标局以“SMB是没有意义的字符”为由而拒绝了申请。后来Tridgwell不断翻看词典,突然看到一个拉丁舞蹈的名字—Samba,而且这个热情洋溢的舞蹈名字中又恰好包含了“SMB”,于是Samba服务程序的名字由此诞生。Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择
安装samba
可直接通过软件仓库来安装samba,顺带再安装一个samba-client软件包,这是一会儿用于测试共享目录的客户端程序
yum install samba samba-client
配置文件
打开Samba的主配置文件,默认参数并不多,只有37行。其中第5~8行参数中所提到的cups的全称为Common UNIX Printing System(通用UNIX打印系统)是用于打印机或打印服务器的,当前我们没有打印机设备所以直接删除。第17~22行代表共享每位登录用户的家目录内容,虽然在某些情况下这可以更方便地共享文件,但这个默认配置存在安全隐患,建议不要共享,将其删除掉。第24~29行是用SMB协议共享本地的打印机设备,方便局域网内的用户远程使用打印机设备,也将其删除,最后的第31~37行依然为共享打印机设备的参数,同样删除。当然为了避免在工作中使用到了打印机服务而不知如何配置,下面对配置文件进行注释说明:
配置文件:/etc/samba/smb.conf
[root@stache31 ~]# cd /etc/samba/ [root@stache31 samba]# ls lmhosts smb.conf smb.conf.example [root@stache31 samba]# cp smb.conf smb.conf.bak [root@stache31 samba]# vi smb.conf 1 # See smb.conf.example for a more detailed config file or 2 # read the smb.conf manpage. 3 # Run 'testparm' to verify the config is correct after 4 # you modified it. 5 6 [global] #全局配置 7 workgroup = SAMBA #工作组名称 8 security = user #安全验证方式 9 server string = Samba Server Version %v #samba服务器的描述信息 10 passdb backend = tdbsam #表示存储共享帐户的文件类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本samba 密码文件) 11 12 printing = cups #打印服务协议 13 printcap name = cups #打印服务名称 14 load printers = yes #是否加载打印机 15 cups options = raw #打印机的选项 16 17 [homes] #此处用来设置 linux 用户的默认共享,对应用户的家目录,当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的家目录中 18 comment = Home Directories #描述信息 19 valid users = %S, %D%w%S #可用账户 20 browseable = No #指定共享信息是否在“网上邻居”可见 21 read only = No #是否只读 22 inherit acls = Yes #是否继承访问控制列表 23 24 [printers] #打印机共享设置 25 comment = All Printers #描述信息 26 path = /var/tmp #共享路径 27 printable = Yes #是否可打印 28 create mask = 0600 #文件权限 29 browseable = No #指定共享信息是否在“网上邻居”可见 30 31 [print$] 32 comment = Printer Drivers 33 path = /var/lib/samba/drivers 34 write list = @printadmin root #可写入文件的用户列表 35 force group = @printadmin #用户组列表 36 create mask = 0664 #文件权限 37 directory mask = 0775 #目录权限 # 其它参数 writable = Yes #允许写入操作 guest ok = No #表示设置是否所有人均可访问共享目录 public = No #表示设置是否允许匿名用户访问 write list #表示设置允许写的用户和组,组要用 @ 表示,例如 write list = root,@root valid users #设置可以访问的用户和组,例如 valid users = root,@root hosts deny #设置拒绝哪台主机访问,例如 hosts deny = 192.168.10.100 hosts allow #设置允许哪台主机访问,例如 hosts allow = 192.168.10.200
配置文件中的 security 参数代表用户登录Samba服务时采用的验证方式,总共有4种可用参数:
share:代表主机无须验证密码,这相当于vsftpd服务的匿名公开访问模式,比较方便,但安全性很差
user:代表登录Samba服务时需要使用账号密码进行验证,这是默认的验证方式,最为常用
domain:代表通过域控制器进行身份验证,用来限制用户的来源域
server:代表使用独立主机验证来访用户提供的密码,这相当于集中管理账号,并不常用
在最早期的RHEL/CentOS系统中,Samba服务使用的是PAM(可插拔认证模块)来调用本地账号和密码信息,后来在5、6版本中替换成了用smbpasswd命令来设置独立的Samba服务账号和密码。到了RHEL 7/8版本,则又进行了一次改革,将传统的验证方式换成使用tdbsam数据库进行验证。这是一个专门用于保存Samba服务账号密码的数据库,用户需要用pdbedit命令进行独立的添加操作
配置共享
1、Samba配置文件包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。创建共享的方法很简单,只要区域配置写入到Samba服务程序的主配置文件中,然后重启该服务即可,如下我们增加一个共享名为 demo 的共享
配置文件:/etc/samba/smb.conf
# 精简后的配置文件如下 vi smb.conf [global] workgroup = SAMBA security = user passdb backend = tdbsam [demo] comment = demo dir #comment是对该共享的描述,可以是任意字符串 path = /home/samba/demo #共享目录的路径 public = no #关闭“所有人可见” writable = yes #允许写入操作
2、创建用于访问共享的账户信息,Samba服务程序默认使用的是用户密码认证模式(user)这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且认证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户密码认证模式。另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误
# 创建系统用户,该用户无需登录所以通过 -M 指定不创建家目录,并且指定shell为 /sbin/nologin [root@stache31 ~]# useradd -M -s /sbin/nologin demo # 在Samba数据库中创建 demo 用户 [root@stache31 ~]# pdbedit -a -u demo new password: #输入用户密码 retype new password: #再次输入密码 Unix username: demo NT username: Account Flags: [U ] User SID: S-1-5-21-4038020518-2638332441-3945857163-1001 Primary Group SID: S-1-5-21-4038020518-2638332441-3945857163-513 Full Name: Home Directory: \\stache31\demo HomeDir Drive: Logon Script: Profile Path: \\stache31\demo\profile Domain: STACHE31 Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: Wed, 06 Feb 2036 23:06:39 CST Kickoff time: Wed, 06 Feb 2036 23:06:39 CST Password last set: Wed, 13 Apr 2022 16:59:31 CST Password can change: Wed, 13 Apr 2022 16:59:31 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF pdbedit -L #显示用户列表 pdbedit -x test #删除指定用户
3、创建共享目录
[root@stache31 ~]# mkdir -p /home/samba/demo [root@stache31 ~]# chown -R demo:demo /home/samba/demo/
4、启动服务
# 测试配置文件是否有误 [root@stache31 ~]# testparm -s #启动服务 [root@stache31 ~]# systemctl restart smb [root@stache31 ~]# systemctl enable smb