
Samba文件共享服务
1.Samba基本概述
Server Message Block (SMB)是Windows服务器和客户端之间实现文件共享的服务协议。
Samba服务通常用来做跨系统文件共享服务,实现不同操作系统之间的资源共享。
Samba相关功能
- 用户验证
- 文件共享
- 打印共享
- 域名解析
Samba软件包
- samba: samba服务端共享程序
- common: samba服务配置文件语法检验testparm
- cifs-utils: samba客户端软件, 提供所需工具指令集
Samba主要程序
程序名 功能 端口 nmbd 提供基于NetBios主机名称解析 udp/137,138 smbd 提供对文件、打印资源的共享 udp/139,445
2.Samba服务配置
实践环境准备
操作系统 主机名称 IP地址 Linux7 Samba服务端-Samba-Server 192.168.69.112 Linux7 Linux客户端-Samba-Client 192.168.69.113 Windows7 Windows客户端 192.168.69.100 1.安装Samba服务程序
[root@x86cloud ~]# systemctl stop firewalld [root@x86cloud ~]# setenforce 0 [root@x86cloud ~]# yum -y install samba2.samba主配置文件,默认存放于/etc/samba/smb.conf
//筛选Samba注释配置文件 [root@x86cloud ~]# egrep -v '^#|^$' /etc/samba/smb.conf [global] //全局参数 workgroup = SAMB //工作组名称 hosts allow = 192.168.56. //表示允许IP或网段, 允许使用通配符或主机名 interfaces = eth0 //SambaServer监听网卡, 也可以写IP地址 max connections = 0 //最大连接数目, 超出拒绝, 0表示不限制 max log size = 50 //定义日志文件的最大容量为50KB security = user //安全验证方式,总共有4种 //share:无需验证身份, 简单方便, 安全性差 //user:需要验证用户密码才可访问, 安全性高 //server:需要通过三方服务验证账号密码, (集中管理账户) //domain: 使用域控制器进行身份验证 passdb backend = tdbsam//定义用户密码的类型,共有3种 //smbpasswd:为系统用户设置Samba服务程序的密码 //tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户 //ldapsam: 基于LDAP服务进行账户验证 printing = cups //设置Samba共享打印机的类型(bsd, sysv, plp, lprng, aix, hpux, qnx) printcap name = cups //设置共享打印机的配置文件 load printers = yes //设置在Samba服务启动时是否共享打印机设备 cups options = raw //打印机的选项 //为了更方便查阅共享重要参数的功能, 共享参数如下: [共享名/访问名] comment = 任意字符串 path = 共享目录路径 browseable = 指定该共享是否可以浏览 writable = 指定该共享路径是否可写 valid users = 允许访问该共享的用户 invalid users = 禁止访问该共享的用户 write list = 允许写入该共享的用户 guest ok = 指定该共享是否允许guest账户访问3.建立访问共享资源, 在Linux7系统中, Samba服务程序默认使用的是用户口令认证模式,确保仅让有密码且受信任的用户访问共享资源, 不过需要使用pdbedit建立账户信息数据库来管理SMB服务程序
//pdbedit [选项] 账户 //-a 用户名 建立Samba用户 //-x 用户名 删除Samba用户 //-L 列出用户列表 //-Lv 列出用户详细信息的列表 [root@x86cloud ~]# useradd $USER [root@x86cloud ~]# pdbedit -a -u $USER new password: //输入密码 retype new password: //确认密码4.创建用于共享资源的文件目录, 要考虑到文件读写权限的问题
[root@x86cloud ~]# mkdir /share/smb -p [root@x86cloud ~]# chown -R $USER.$USER /share/smb/5.修改Samba服务程序的主配置文件, 可以删除[homes][printers]
[global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw //建立共享目录 [share] comment = This is share SMB Service path = /share/smb public = no writable = yes6.重启smb服务并加入开机自启动
[root@x86cloud ~]# systemctl restart smb [root@x86cloud ~]# systemctl enable smb //如果必须开启防火墙, 注意执行如下指令 [root@x86cloud ~]# firewall-cmd --permanent --add-service=samba [root@x86cloud ~]# firewall-cmd --reload
4.Win挂载Samba
要在Windows系统中访问共享资源,只需在我的电脑上方输入
\\192.168.69.112然后再加服务器的IP地址即可
正确输入bgx账户名以及使用pdbedit命令设置的密码后,就可以登录到共享界面中了。此时,我们可以尝试执行查看、写入、更名、删除文件等操作。
5.Linux挂载Samba
Samba服务可以实现Linux系统之间的文件共享, 在客户端安装支持文件共享服务的软件包cifs-utils1.安装可以访问samba资源的客户端
[root@x86cloud ~]# yum -y install cifs-utils2.临时查看SMB服务端共享资源
//以匿名身份查看授权资源,直接回车即可 [root@samba-client ~]# smbclient -L 192.168.56.11 Enter SAMBA\root's password: Anonymous login successful OS=[Windows 6.1] Server=[Samba 4.6.2] Sharename Type Comment --------- ---- ------- samba-share Disk This is Share /data/samba/share IPC$ IPC IPC Service (Samba 4.6.2) //以个人账号身份查看授权资源,直接回车即可 [root@samba-client ~]# smbclient -L 192.168.56.11 -U $USER%123 Domain=[SAMBA-SERVER] OS=[Windows 6.1] Server=[Samba 4.6.2] Sharename Type Comment --------- ---- ------- samba-share Disk This is Share /data/samba/share IPC$ IPC IPC Service (Samba 4.6.2) //直接访问共享 [root@samba-client ~]# smbclient //192.168.56.11 -U $USER%1233.手动挂载SMB访问共享
//建立挂载点 [root@samba-client ~]# mkdir /cifs //以匿名的身份挂载资源 [root@samba-client ~]# mount -t cifs -o guest //192.168.56.11/samba-share /cifs //以账户密码身份挂载 [root@samba-client ~]# mount -t cifs -o rw,user=$USER,pass=123 //192.168.56.11/samba-share /cifs4.也可以将登陆账户密码保存至配置文件,可以免输入密码去访问挂载
//创建相应文件, 并赋予安全权限 [root@samba-client ~]# vim /etc/samba/$USER username=$USER password=1 domain=MYGROUP [root@samba-client ~]# chmod 600 /etc/samba/$USER //挂载时执行用户密码文件credentials=/etc/samba/$USER [root@samba-client ~]# mount -t cifs -o rw,credentials=/etc/samba/$USER //192.168.56.11/samba-share /cifs5.自动挂载SMB共享
[root@samba-client ~]# vim /etc/fstab //第一种方式,以用户名密码的方式 //192.168.69.112/samba-share /cifs cifs domain=WORKGROUP,user=$USER,pass=123 0 0 //第二种方式,通过上述的配置文件定义账户与密码以及域 //192.168.69.112/samba-share /cifs cifs credentials=/etc/samba/$USER 0 0 #第二种方式的定义的配置文件 [root@samba-client ~]# vim /etc/samba/$USER username=$USER password=1 domain=MYGROUP
6.SMB多用户挂载
在Samba Server服务器上, 共享/data/samba/public,实现对访问挂载后的共享的每个用户单独的验证,实现权限隔离。
允许bgx1 能够读写
允许bgx2 能够读
允许bgx3 不能访问//1.创建系统用户 [root@samba-server ~]# useradd bgx1 -s /sbin/nologin [root@samba-server ~]# useradd bgx2 -s /sbin/nologin [root@samba-server ~]# useradd bgx3 -s /sbin/nologin //2.添加系统用户至samba服务 [root@samba-server ~]# pdbedit -a bgx1 [root@samba-server ~]# pdbedit -a bgx2 [root@samba-server ~]# pdbedit -a bgx3 [root@samba-server ~]# pdbedit -L bgx2:1008: bgx1:1007: bgx3:1009: //3.修改samba配置文件共享目录 [root@samba-server ~]# cat >> /etc/samba/smb.conf <<-EOF [samba-public] comment = This is a Share samba-public path = /data/samba/public public = no valid users = bgx1,bgx2 invalid users = bgx3 writable = yes EOF //4.创建共享目录, 并设置权限 [root@samba-server ~]# mkdir -p /data/samba/public -p [root@samba-server ~]# chown bgx1 /data/samba/public/ //5.使用testparm测试 [root@samba-server ~]# testparm Processing section "[samba-share]" Processing section "[samba-public]" Loaded services file OK. #testparm命令报错: rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) //临时生效 [root@samba-server ~]# ulimit -n 16384 //重启后生效 [root@samba-server ~]# echo "root - nofile 16384" >> /etc/security/limits.conf //5.重启smb服务 [root@samba-server ~]# systemctl restart smb nmb [root@samba-server ~]# systemctl enable smb nmb //6.客户端挂载, 并测试权限 [root@samba-client ~]# mkdir /$USER{1..3} [root@samba-client ~]# mount -t cifs -o username=bgx1,pass=123 //192.168.69.112/samba-public /bgx1/ [root@samba-client ~]# mount -t cifs -o username=bgx2,pass=123 //192.168.69.112/samba-public /bgx2 [root@samba-client ~]# mount -t cifs -o username=bgx3,pass=123 //192.168.69.112/samba-public /bgx3 mount error(13): Permission denied Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) //7.自动挂载 //挂载属性_netdev是关键选项,网络连通后挂载, 否则容易引起服务器无法启动 [root@samba-client ~]# echo "//192.168.69.112/samba-public /bgx1 cifs defautlts,username=bgx1,password=123,_netdev 0 0" >> /etc/fstab [root@samba-client ~]# echo "//192.168.69.112/samba-public /bgx2 cifs defautlts,username=bgx2,password=123,_netdev 0 0" >> /etc/fstab [root@samba-client ~]# echo "//192.168.69.112/samba-public /bgx3 cifs defautlts,username=bgx3,password=123,_netdev 0 0" >> /etc/fstab