本章主要介绍Samba服务器简介、Samba工作原理、Samba服务、Samba功能、Samba安装、Samba共享、Samba配置详解等。
1 Samba简介
Samba:是一种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。主要功能是作为NFS系统(Linux系统之间文件共享)的补充,实现在Linux和Windows系统中进行文件共享和打印机共享。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
CIFS 协议(Common Internet File System,公共Internet文件系统) 定义网络中使用的标准远程文件系统访问协议,使用户组能够一起工作并在网络中实现共享文档。
Samba服务采用C/S模式,,其工作机制是让NetBIOS(Windows 网上邻居的通信协议)和SMB两个协议运行于TCP/IP通信协议之上,并且用NetBEUI协议让Windows在“网上邻居”中能浏览Linux服务器。Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux下已经架设好的Samba服务器,windows客户端就可以通过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也可以访问网络中其它windows系统或者Linux系统共享出来的文件。
1.1 Samba工作原理
Samba的工作原理是:让Windows系列操作系统网络邻居的通讯协议——NETBIOS(NETwork Basic Input/Output System)和SMB(Server Message Block)这两个协议在TCP/IP通信协议上运行,并且使用Windows的NETBEUI协议让Linux可以在网络邻居上被Windows看到。其中最重要的就是SMB(Server Message Block)协议,在所有的诸如Windows Server 2003、Windows XP等Windows系列操作系统中广为应用。Samba就是SMB服务器在类UNIX系统上的实现,目前可以在几乎所有的UNIX变种上运行。
1.2 Samba服务
Samba所需软件包括:Samba(服务器端软件包),Samba-client(客户端软件包),Samba-common(Samba公共文件软件包),Samba-Winbind(使用 Windows 域控制器管理 Linux 帐户);
Samba由smbd和nmbd两个守护进程组成:
smbd服务进程是Samba的核心启动服务,主要负责建立Linux Samba服务器与Samba客户机之间的对话,为客户端提供文件共享与打印机服务及负责用户权限验证以及锁功能,smdb默认监听端口是139与445TCP端口。Samba通过smb服务启动smbd进程,可使用命令 # netstat -nutlp 可以查看进程端口信息;
nmbd进程提供NetBIOS名称服务,以满足基于Common Internet File System(CIFS)协议的共享访问环境(类似与DNS实现的功能,实现把Linux系统共享的工作组名称与其IP对应起来),Samba通过nmb服务启动nmbd进程,该进程默认监听的是137与138UDP端口。
1.3 Samba功能
文件共享和打印共享是Samba最主要的功能。Samba不但方便文件共享和打印共享,还实现了相关的控制和管理功能。具体来说,Samba完成的功能有:
1.3.1 共享目录
在局域网上共享某个或某些目录,使得同一个网络内的Windows用户可以在网上邻居里访问该目录,就跟访问网上邻居里其它Windows机器一样。
1.3.2 目录权限
决定每一个目录可以由哪些人访问,具有哪些访问权限。Samba允许设置一个目录让一个人、某些人、组和所有人访问。
1.3.3 共享打印机
在局域网上共享打印机,使得局域网的其它用户可以使用Linux操作系统下的打印机。
1.3.4 打印机使用权限
决定哪些用户可以使用打印机。
安装和配置好了Samba服务器后,Linux就可以向局域网中的Windows用户提供文件和打印服务了。
2 Samba安装2.1 系统环境准备名称ip操作系统安装组件Samba服务器192.168.1.181CentOS Linux 7.6 x86-64samba/samba-client/samba-common/samba-winbind/samba-winbind-clients
关闭防火墙
# systemctl stop firewalld && systemctl disable firewalld
临时关闭selinux
# setenforce 0
永久关闭selinux
# sed -i ‘s/=enforcring/=disabled/’ /etc/selinux/config
2.2 Samba服务安装2.2.1 使用yum安装Samba服务器
安装samba服务和samba-client软件,依赖samba-common ,samba-winbind,samba-winbind-clients软件包将自动安装;
# yum install samba samba-client -y
2.2.2 samba服务依赖安装的软件包
查看与samba相关的软件包名称及相应版本
# rpm -qa samba*
2.2.3 samba软件包相关配置文件
查看samba软件包生成的文件列表
# rpm -ql samba
查看samba-common软件包生成的文件列表
# rpm -ql samba-common
2.2.4 配置开机启动并启动# systemctl enable smb.service# systemctl enable nmb.service# systemctl start smb.service# systemctl start nmb.service
2.2.5 查看smb和nmb服务启动端口# ss -tunlp | grep smb# ss -tunlp | grep nmb
2.3 smb.conf配置文件
Samba的主配置文件为/etc/samba/smb.conf,主配置文件由两部分构成:全局参数及共享定义。在配置相关参数时,格式为:name = value
[root@superman-vm01 ~]# vim /etc/samba/smb.conf
2.3.1 全局参数
Global Settings (全局参数):该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
Share Definitions(共享定义) :该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。
注:可以使用# testparm命令测试smb.conf配置是否正确;使用命令# testparm -v可以详细的列出smb.conf支持的配置参数;另可以使用命令# man smb.conf 查看相关参数及相关功能。
2.4 相关命令的选项及功能2.4.1 smbclient命令
它提供一种命令行使用交互式方式访问samba服务器的共享资源 ,用法如下:
列出samba共享服务器端的文件列表
# smbclient -L <sambaserver_ip> -U username%password
像ftp一样,使用smbclient与samba服务器进行交互操作
# smbclient //<sambaserver_ip>/<share_dir> -U username%password
不进入交互界面,直接显示共享目录下的列表文件
# smbclient -c “ls” //<sambaserver_ip>/<share_dir> -U username%password
2.4.2 smbpasswd命令
实现添加或删除samba用户和为用户修改密码 ,保存到单独的文件中。
-a:向smbpasswd文件中添加用户;
-c:指定samba的配置文件;
-x:从smbpasswd文件中删除用户;
-d:在smbpasswd文件中禁用指定的用户;
-e:在smbpasswd文件中激活指定的用户;
-n:将指定的用户的密码置空。
例:第一次创建用户wanghai并指定密码文件为/etc/samba/smb.pass
# touch /etc/samba/smb.pass# smbpasswd -a test -c /etc/samba/smb.pass
2.4.3 pdbedit命令
实现添加或删除samba用户和为用户修改密码,添加到passdb.tdb库中
新建Samba账户
# groupadd -r <groupname># useradd -g <groupname> -s /sbin/nologin -r <username># pdbedit -a <username>
列出Samba用户列表,读取passdb.tdb数据库文件
# pdbedit -L
列出Samba用户列表的详细信息
# pdbedit -Lv
暂停该Samba用户的账号
# pdbedit -c “[D]” -u <username>
恢复该Samba用户的账号
# pdbedit -c “[]” -u <username>
删除Samba账户
# pdbedit -x <username>
2.5 Samba服务器访问
2.5.1 Windows下查看Linux Samba服务器共享文件的方法
可通过“IE浏览器”或双击打开“我的电脑”,方式如下:
\\<sambaserver_ip>\<share_dir>
\\<sambaserver_ip>\<share_dir>
2.5.2 linux下查看Linux Samba服务器的方法
可通过命令smbclient ,方法如下:
# smbclient -L <sambaserver_ip> -U username%password
2.5.3 linux下手动挂载samba共享目录的方法
可通过命令mount ,方法如下:
# mount -t cifs //<sambaserver_ip>/<share_dir> /mnt -o username=<username>
2.5.4 linux下自动挂载samba共享目录的方法
方法如下:
# vim /etc/fstab # 添加如下项,直接显示用户名及密码//192.168.1.181/fm /mnt cifs defaults,_netdev,user=fmadmin,password=fmadmin 0 0
或者
# vim /etc/fstab # 添加如下项,以配置文件的方式验证用户及密码//192.168.1.181/fm /mnt cifs defaults,_netdev,credentials=/etc/samba/pwd.txt 0 0# vim /etc/samba/pwd.txt # 添加用户名及密码username=fmadminpassword=fmadmin
3 Samba配置案例3.1 案例一
公司允许所有用户匿名访问共享文件/public ,允许匿名用户上传、删除、修改文件。
3.1.1 设定配置文件# vim /etc/samba/smb.conf # 设置成如下内容#======================= Global Settings =====================================[global]# ———————– Network Related Options ————————- workgroup = WORKGROUP server string = Samba Server Version %v netbios name = SambaServer# ————————— Logging Options —————————– log file = /var/log/samba/log.%m max log size = 2048# ———————– Standalone Server Options ———————— map to guest = Bad User#============================ Share Definitions ==============================[public] comment = Public Stuff path = /var/ftp/pub browseable = yes writeable = yes guest ok = yes create mask = 0644 directory mask = 0755
3.1.2 验证smb.conf 配置文件# 测试smb.conf语法的正确性# testparm Load smb config files from /etc/samba/smb.confLoaded services file OK.Server role: ROLE_STANDALONEPress enter to see a dump of your service definitions# Global parameters[global] log file = /var/log/samba/log.%m map to guest = Bad User max log size = 2048 netbios name = SAMBASERVER server string = Samba Server Version %v idmap config * : backend = tdb[public] comment = Public Stuff create mask = 0644 guest ok = Yes path = /var/ftp/pub read only = No
3.1.3 重启smb和nmb服务# systemctl restart smb.service# systemctl restart nmb.service
3.1.4 创建共享目录
创建共享目录,并分配nobody匿名用户权限
# mkdir -p /var/ftp/pub # 创建samba共享目录# chown nobody:nobody /var/ftp/pub/ # 为共享目录分配给匿名用户(nobody)权限# ll /var/ftp # 查看共享目录权限755
3.1.5 linux客户端测试# smbclient -N //192.168.1.181/public # 连接共享目录而不提示输入密码[root@superman-vm01 ~]# smbclient -N //192.168.1.181/publicTry “help” to get a list of possible commands.smb: \> smb: \> dir . D 0 Wed Oct 31 03:45:09 2018 .. D 0 Sat May 15 18:19:25 2021 22005252 blocks of size 1024. 15865536 blocks availablesmb: \> smb: \> mkdir superman # 匿名用户创建superman文件夹smb: \> smb: \> ls . D 0 Sat Jul 24 18:12:22 2021 .. D 0 Sat May 15 18:19:25 2021 superman D 0 Sat Jul 24 18:12:22 2021 22005252 blocks of size 1024. 15865536 blocks availablesmb: \> smb: \> quit# 退出
3.1.6 windows客户端测试
Win键 R,输入\\192.168.1.181\public
注意:win10下可能无法访问共享文件夹解决
# 管理员权限进入cmd# 开启SMBv1sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsisc.exe config mrxsmb10 start = auto# 关闭SMBv2 and SMBv3sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsisc.exe config mrxsmb20 start = disabled# 需要重启win103.2 案例二
公司现有多个部门,因工作需要,将FM部的资料存放在samba服务器的/var/ftp/fm 目录中集中管理,以便FM人员浏览。
要求:
1、该目录/var/ftp/fm仅允许FM部员工访问 ;
2、仅允许FM部普通用户对文件目录/var/ftp/fm/upload 进行上传、下载、删除及创建,且普通用户仅能管理自己上传或创建的文件;
3、允许管理员fmadmin对文件目录文件/var/ftp/fm/admin进行上传、下载、删除及创建,同时允许FM部门普通用户下载资源;
4、允许fmadmin用户对目录/var/ftp/fm 中的所有目录文件进行管理
3.2.1 设定配置文件# vim /etc/samba/smb.conf # 设置成如下内容#======================= Global Settings =====================================[global]# ———————– Network Related Options ————————- workgroup = WORKGROUP server string = Samba Server Version %v netbios name = SambaServer# ————————— Logging Options —————————– log file = /var/log/samba/log.%m max log size = 2048# ———————– Standalone Server Options ———————— security = user passdb backend = tdbsam#============================ Share Definitions ==============================[fm] comment = FM Share path = /var/ftp/fm browseable = yes valid users = @fmusers writeable = yes guest ok = no create mask = 0644 directory mask = 0755
3.2.2 验证smb.conf 配置文件# testparmLoad smb config files from /etc/samba/smb.confLoaded services file OK.Server role: ROLE_STANDALONEPress enter to see a dump of your service definitions# Global parameters[global] log file = /var/log/samba/log.%m max log size = 2048 netbios name = SAMBASERVER security = USER server string = Samba Server Version %v idmap config * : backend = tdb[fm] comment = FM Share create mask = 0644 path = /var/ftp/fm read only = No valid users = @fmusers
3.2.3 重启smb和nmb服务# systemctl restart smb.service# systemctl restart nmb.service
3.2.4 创建fm部门普通用户及管理员账号# 创建fm部普通用户分组# groupadd -r fmusers# 创建FM部门员工账号,并划分为fmusers组# useradd -g fmusers -s /sbin/nologin -r wangh# useradd -g fmusers -s /sbin/nologin -r yangsc# useradd -g fmusers -s /sbin/nologin -r liangzq# 创建FM部门管理账号fmadmin,并划分为fmusers组# useradd -g fmusers -s /sbin/nologin -r fmadmin
3.2.5 配置用户登录密码# 配置登陆samba账号密码# pdbedit -a fmadmin new password:retype new password:# pdbedit -a wanghnew password:retype new password:# pdbedit -a yangscnew password:retype new password:# pdbedit -a liangzqnew password:retype new password:
3.2.6 创建共享目录,并分配给目录相关权限# 创建samba共享目录,并分配权限# mkdir -p /var/ftp/fm/{upload,admin}# 分配/var/ftp/fm 及其下目录的属主及属组# chown -R fmadmin:fmusers /var/ftp/fm# 分配fm目录及其下的文件为755权限# chmod -R 755 /var/ftp/fm# 为目录/var/ftp/fm/upload给予775权限,允许内部所有用户所有权限# chmod 775 /var/ftp/fm/upload
3.2.7 linux客户端测试# smbclient //192.168.1.181/fm -U fmadmin # 使用fmadmin管理员登陆验证smb: \> mkdir software # 创建目录测试smb: \> mkdir opensoft # 创建目录测试smb: \> dirsmb: \> rmdir software # 删除目录测试smb: \> dirsmb: \> put install.log # 上传文件测试smb: \> dirsmb: \> get install.log # 下载文件测试smb: \> rename install.log a.txt # 修改文件名称测试smb: \> dirsmb: \> del a.txt # 删除文件测试smb: \> dir # 显示目录内容smb: \> cd admin\ # 切换到/var/ftp/fm/admin目录中创建文件smb: \admin\> dirsmb: \admin\> put install.log # 上传文件测试smb: \admin\> get install.log # 下载文件测试smb: \admin\> rename install.log a.txt # 修改文件名称测试smb: \admin\> mkdir test # 创建文件夹 testsmb: \admin\> dirsmb: \admin\> quit# smbclient //192.168.1.181/fm -U wangh #使用普通用户wangxs登陆进行测试smb: \> dir # 显示目录下文件smb: \> mkdir fmuser # 拒绝在/var/ftp/fm目录中创建目录smb: \> put install.log # 拒绝在/var/ftp/fm目录中创建文件smb: \> cd upload # 在/var/ftp/fm/upload 文件中测试创建、上传、删除、修改权限smb: \upload\> mkdir wangh # 允许创建目录smb: \upload\> put install.log # 允许上传文件smb: \upload\> get install.log # 下载install.logsmb: \upload\> rename install.log a.txt # 把install.log改名为a.txtsmb: \upload\> del a.txt # 删除a.txtsmb: \upload\> cd ..smb: \> cd admin # 切换进入/var/ftp/fm/admin目录smb: \admin\> dir # 显示目录文件smb: \admin\> put install.log # 拒绝在/var/ftp/fm/admin目录上传文件smb: \admin\> get a.txt # 允许在/var/ftp/fm/admin目录下载文件smb: \admin\> del install.log # 拒绝普通用户删除/var/ftp/fm/admin目录中的文件
综上,两种不同的使用场景 ,通过不同的配置参数分别实现。