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协议-->TCP
和nmb协议-->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协议-->TCP
和nmb协议-->UDP
- 所用有
smb.service
和nmb.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,pass=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之间