Linux之SAMBA文件共享服务器

Posted 锦衣admin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之SAMBA文件共享服务器相关的知识,希望对你有一定的参考价值。

SAMBA服务概述

什么是SAMBA?

  • SMB(Server Message Block)协议实现文件共享,也称为CIFS(Common Internet File System )

  • 是Windows和类Unix系统之间共享文件的一种协议

  • 客户端主要是Windows;支持多节点同时挂载以及并发写入

  • 主要用于windows和Linux下的文件共享、打印共享

  • 实现匿名与本地用户文件共享

SAMBA主要进程:

  • smbd进程 控制发布共享目录与权限、负责文件传输 、端口: TCP 139 445

  • nmbd进程 用于名称解析netbios 、端口:UDP 137 138 ; 基于NETBIOS协议获得计算机名称——>解析为相应IP地址,实现信息通讯

NetBIOS是Network Basic Input/Output System的简称即网络基础输入输出系统,一般指用于局域网通信的一套API
samba服务遵循两大协议:smb协议-->TCPnmb协议-->UDP

SAMBA服务实验

SAMBA环境准备

第一步:从模板机中克隆一台Linux服务器,叫做SAMBA

第二步:更改主机名称与IP地址

# hostnamectl set-hostname samba
# su

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
	BOOTPROTO=none
	IPADDR=10.1.1.10
	NETMASK=255.255.255.0
	GATEWAY=10.1.1.2
	DNS1=8.8.8.8
	DNS2=114.114.114.114

# systemctl restart network
扩展:如果是多张网卡,建议使用"ifdown ens33"以及"ifup ens33"实现重启网络操作

第三步:关闭防火墙与SELinux

# systemctl stop firewalld
# systemctl disable firewalld

# setenforce 0
# vim /etc/selinux/config
	SELINUX=disabled

第四步:配置yum源

  • 如果有网络情况下可以直接使用官网源,CentOS7中已经加载了国内yum源,如果没网需要挂载镜像源
# yum clean all
# yum makecache

SAMBA软件安装(服务器搭建)

第一步:安装samba软件

  • SAMBA也是一个C/S架构的软件,Client主要是Windows,samba服务主要用于Windows和Linux系统之间的文件共享
# yum install samba -y	=>	安装samba服务

# rpm -qa |grep ^samba	=>	查看安装了哪些软件
	[root@samba ~]# rpm -qa |grep ^samba
	samba-common-tools-4.10.16-13.el7_9.x86_64
	samba-common-4.10.16-13.el7_9.noarch
	samba-client-libs-4.10.16-13.el7_9.x86_64
	samba-common-libs-4.10.16-13.el7_9.x86_64
#	samba-4.10.16-13.el7_9.x86_64		=>	服务器端
	samba-libs-4.10.16-13.el7_9.x86_64
	samba-client-4.10.16-13.el7_9.x86_64

smb的配置文件

  • samba服务配置文件默认已经设置好了,我们只需要编写共享名称选项即可
# vim /etc/samba/smb.conf	=>	打开samba服务配置
#l	[global]  		=>	全局选项,所有samba配置都需要遵循的配置	
		workgroup = MYGROUP    =>	定义samba服务器所在的工作组
		security = user        =>   认证模式:share匿名|user用户密码|server外部服务器用户密码
		max log size = 50	   =>   日志的最大大小KB  
		log file = /var/log/samba/log.%m       =	日志文件	
		
		passdb backend = tdbsam      =>	密码格式,代表tdbsam格式的
		server string = Samba Server Version %v      =>   smb服务的描述
						
		load printers = yes         =>	是否加载打印机
		cups options = raw          => 代表打印机的选项
#l	[homes]        	=>	局部选项(共享名称)
		comment = Home Directories    =>  描述
		browseable = no    =>	代表隐藏共享名称
		writable = yes     => 	如果共享有目录代表可读可写
#l	[printers]      =>	共享名称
		comment = All Printers       =>	描述
		path = /var/spool/samba  	 =>	本地的共享目录
		browseable = no  		=>	隐藏,代表是否隐藏共享名称
	
		guest ok = no ——>   public = no  		=>	no代表需要帐号和密码访问,有两种写法
		writable = no  ——>  read only =yes 		=>	no代表不可写和只读,有两种写法
		printable = yes     =>	 打印选项

自己编辑samba共享名称配置文件
#l	[share]		=>	共享名称
		path = /dir1	=>	共享路径
		guest ok = no	=>	需要账号密码访问
		writable = yes	=>	可写

samba默认配置文件:

[root@samba ~]# 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.

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes

[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775

SAMBA综合案例

任务要求

搭建一个SAMBA服务,共享一个目录/samba/share,客户端使用user01/123通过windows或者Linux可以在该目录里创建文件删除文件

解决方案

环境配置

第一步:SAMBA服务器环境准备

更改主机名称、IP地址、关闭防火墙、SELinux、配置YUM源

第二步:安装SAMBA软件

# yum install samba -y	=>	安装samba服务软件
# rpm -aq|grep  ^samba	=>	查看安装了哪些samba服务软件

第三步:查询SAMBA生成文件列表(rpm -ql)

  • 因为samba服务遵循两大协议:smb协议-->TCPnmb协议-->UDP
  • 所用有smb.servicenmb.service两个服务
# rpm -ql samba	=>	查询SAMBA生成文件列表
	/usr/sbin/smbd	=>	二进制文件,代表命令
	/usr/sbin/nmbd	=>	二进制文件,代表命令

	/usr/lib/systemd/system/smb.service	=>	smb服务
	/usr/lib/systemd/system/nmb.service	=>	nmb服务
	#l 备注:有了这两个服务就可以通过systemctl start|restart|stop 服务 进行管理

第四步:在服务器端创建一个共享目录

# mkdir /samba/share -p

第五步:编辑/etc/smb.conf配置文件,实现SAMBA共享

  • 原有配置选项不动,在配置文件最下方编辑共享目录
# vim /etc/samba/smb.conf
	...
	[smb_share]	=>	共享名称
        comment = samba service	=>	备注信息,可有可无
        path = /samba/share		=>	共享目录
        guest ok = no	=>	代表需要账号密码登录
        writable = yes	=>	代表此共享目录可读可写
	或者
	[samba_share]	=>	共享名称
        path = /samba/share
        public = no
        writable = yes

#l 备注:
guest ok === public	两者等价
writable代表可读可写

第六步:创建一个user01用户,然后添加到samba认证中,设置密码为123

  • 以下操作完成后,则SAMBA服务中增加了一个user01的账号及密码123
# useradd user01	=>	创建账号

# which smbpasswd	=>	查询smb密码命令创建目录
	[root@samba ~]# which smbpasswd
	/usr/bin/smbpasswd

# smbpasswd -a user01	=>	-a代表add,给smb服务增加一个账号且设置密码
	New SMB password:123
	Retype new SMB password:123
	Added user user01.	=>	这个信息代表增加成功

第七步:启动nmb与smb服务

# systemctl start nmb
# systemctl start smb

基于Windows和Linux服务端实现samba服务共享

第一步:安装samba客户端

  • 控制面板 => 程序和功能 => 打开或关闭Windows功能

  • 找到以下两个选项进行安装

在这里插入图片描述

第二步:进入计算机(我的电脑),找到映射网络驱动器

  • 指定驱动器(随意选择一个)输入:\\\\SAMBA服务器IP\\共享目录标签
  • 然后输入账号密码即可
    在这里插入图片描述

在这里插入图片描述

第三步:通过acl策略给user01用户于samba共享目录可读可写可执行权限

  • 挂载完成后,目录不可写?答:主要原因在于/samba/share目录没有写入权限

  • 就可以对/samba/share 目录拥有上传下载权限

# setfacl -m u:user01:rwx /samba/share

基于Linux和Linux服务端实现samba服务共享

第一步:基于Linux或Linux实现文件共享

  • 安装samba客户端
  • 利用smbclient命令查看目录信息
# smbclient -L 10.1.1.10 -U user01	=>	查看目录信息
	[root@client ~]# smbclient -L 10.1.1.11 -U user01
	Enter SAMBA\\user01's password:

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
#        smb_share       Disk      samba service	=>	磁盘类型的共享目录
        IPC$            IPC       IPC Service (Samba 4.10.16)
        user01          Disk      Home Directories
	Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------
        SAMBA                Samba 4.10.16

        Workgroup            Master
        ---------            -------
        SAMBA                SAMBA

注意:需要输入user01用户密码
  • 使用smbclient查看目录信息
  • 当不可写时,利用ACL命令增加用户权限即可
# smbclient //10.1.1.10/smb_share -U user01

第二步:把SAMBA挂载到Linux系统(类似NFS)

# mkdir /u01	=>	Linux客户端创建挂载目录
# mount.cifs -o user=user01,password=123 //10.1.1.10/smb_share /u01	=>	挂载

访问控制说明:

控制读写权限
	writable = yes/no
	readonly = yes/no

如果资源可写,但只允许某些用户可写,其他都是只读
write list = admin, root, @staff(用户组)
read list = mary, @students

控制访问对象
	valid users = tom,mary,@itcast
	invalid users = tom
注意:以上两个选项只能存在其中一个

网络访问控制:
hosts deny = 192.168.0.   拒绝某个网段
hosts allow = 192.168.0.254  允许某个IP
hosts deny = all  拒绝所有
hosts allow = 192.168.0. EXCEPT 192.168.0.254  允许某个网段,但拒绝某个单个IP
注意:deny和allow同时存在,allow优先

总结

1. ftp 局域网和外网都可以

2. nfs 局域网 挂载方式访问 mount.nfs 侧重于Linux与Linux之间

3. samba 局域网 直接访问(smbclinet)挂载的方式mount.cifs 侧重于Windows与Linux之间

以上是关于Linux之SAMBA文件共享服务器的主要内容,如果未能解决你的问题,请参考以下文章

Linux文件共享之Samba服务器的配置

linux之使用samba实现文件共享

Linux网络文件共享服务之SAMBA 服务

Linux网络文件共享服务之smaba

linux架构学习第二十九天之samba文件共享服务

samba之linux作为服务端提供文件共享服务