1. Samba 概述

  SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内不同操作系统的计算机之间提供文件及打印机等资源的共享服务。SMB 协议是客户机/服务器 型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。

为什么要用SAMBA?

ftp的优缺点:

  优点:文件传输、应用层协议、可跨平台

  缺点:只能实现文件传输,无法实现文件系统挂载;无法直接修改服务器端文件

Samba的特性:

  使用smb/cifs 协议、可跨平台、可实现文件系统挂载、可实现服务器端修改文件

smb协议和cifs 直接的关系

  随着Internet 的流行,Microsoft 希望将这个协议扩展到 Internet 上去,成为 Internet 上计算机之间相互共享数据的一种标准。因此他将原来的几乎没有多少技术文档的SMB 协议进行整理,重新命名为CIFS (Common Internet File System),它使程序可以访问远程Internet 计算机上的文件并要求此计算机提供服务。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS 是公共的或开发的SMB 协议版本,并由Microsoft 使用。SMB 协议在局域网上用于服务器文件访问和打印的协议。

2. Samba服务详解

2.1 Samba软件相关信息

  1)协议:SMB/CIFS

  2)服务:

    smb  实现资源共享、权限认证  TCP  139  445

  3)配置文件(/etc/samba/)

    smb.conf  主配置文件

    smbusers  别名配置文件

2.2 登录验证模式(安全级别)

  1)share 匿名验证

  2)user 本地用户验证(Samba服务器默认的安全级别,用户在访问共享资源之前必须提供用户和密码进行验证)

扩展:tdbsam:该方式是使用一个数据库文件来验证。数据库文件叫passdb.tdb。可以通过 pdbedit -a 向数据库中添加新用户,不过要建立的用户必须先是系统用户。也可以理解为我们是以 pdbedit -a 将系统用户转化为 samba 用户。pdbedit 命令参数很多,下述为常用:

pdbesit -a username:新建Samba用户(将系统用户转化为samba用户,并设置密码)

pdbedit -x username:删除samba用户

pdbedit -L:列出samba用户列表,读取pdbedit.tdb 数据库文件。

  3)别名用户访问(虚拟用户)

2.3 常见配置参数解释

[global] 用于定义samba服务的总体特性,其配置项对所有共享资源生效

workgroup = WORKGROUP
#设定samba server 所要加入的工作组或域
server string = Samba Server Version %v
#设定Samba Server 的注释,可以是任意字符串,也可以不填。宏%v表示显示samba的版本号
interfaces = lo eth0 192.168.80.129/
#设置samba server 监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
hosts allow = . 192.168.. 192.168.80.130
#表示允许连接到samba server 的客户端,多个参数以空格隔开。可以用一个IP 表示,也可以用一个网段表示。
hosts allow 和 hosts deny 刚好相反(2选1)
例:
hosts allow=192.168.80. EXCEPT192.168.80.130
表示允许来自192.168.80.* 的主机连接,但排除192.168.80.130
hosts allow=192.168.80.0/24
表示允许来自192.168.80.0/24子网中的所有主机连接
log file = /var/log/samba/log.%m
#设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),
#表示对每台访问Samba Server的机器都单独记录一个日志文件。
max log size =
#设置Samba Server日志文件的最大容量,单位为kB,0代表不限制
security = user
#设置用户访问Samba Server的验证方式。
passdb backend = tdbsam
load printers = yes/no
#设置是否在启动samba时就共享打印机

[homes] 用于设置用户宿主目录的共享属性(特殊共享)

[homes]                    #共享名
comment = Home Directories #共享描述
browseable = no #共享是否可被查看
writable = yes #共享是否可写
valid users =%S #允许访问该共享的用户
例:valid users = sss,@sss(多个用户或组中间用逗号隔开,如果要加入一个组要用"@组名")

[printers] 用于设置打印机共享资源的属性(特殊共享,共享打印设备,现在基本不用)

[printers]                #共享名
comment = All Printers #共享描述
path = /var/spool/samba #共享路径
browsable = no #共享是否可被查看
guest ok = no #是否可以匿名访问,类似于public
writable = no #是否可写
printable = yes #是否可以打印

[自定义] 自定义共享域

[自定义]                #共享名
comment = the share is xbz #共享描述
path = /share/zdy #共享路径
public = yes #是否可以匿名访问,类似于 guest ok
browseable = yes #共享是否可被查看
writable = yes #是否可写(同时设置目录的W)

配置文件检查工具

testparm:若显示"Loaded services file OK."信息表示配置文件的语法是正确的

-v:显示samba所支持的所有选项

2.4 访问控制

写入权限的控制方式(类似vsftp的限制方式):

  配置文件开启,文件系统严格控制(尽量使用)

    writable = yes

    setfacl 或 chmod 777

  文件系统开启,配置文件严格控制

    chmod 777 /dir

    read only = yes

    write list = 用户,@组

2.5 服务启动管理

启动、停止、重启和重新加载samba服务

systemctl start|stop|restart|reload smb

开机自启samba服务

systemctl enable smb
chkconfig --level smb on|off

2.6 客户端登录方式

Linux端:

smbclient -U 用户名 -L //服务器IP           #查看服务器共享
smbclient -U 用户名 //服务器IP/共享名 #登录服务器共享

windows端

\\服务器IP\共享名            #登录
net use * /del #清空登录缓存

3. samba 部署与实验

防火墙端口:

[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp
[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp --permanent
[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp
[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp--permanent
[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp
[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp --permanent
[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp
[root@centos2 /etc/samba]# firewall-cmd --zone=public --add-port=/tcp --permanent

3.1 部署:

1. 服务器端安装 samba

[root@centos2 ~]# yum -y install samba

2. 确认客户端和相关命令软件包是否安装(默认安装)

[root@localhost ~]# rpm -q samba-client
[root@localhost ~]# rpm -q samba-common

3. 创建共享区域

 备份主配置文件

 创建独立的共享区间(仿照模板编写)

4. 启动smb 服务并查看默认共享区域

systemctl start smb
smbclient -U 用户名 -L smbserverIP

3.2 本地验证(登录、上传、下载)

a、修改配置文件(添加自定义共享)

[自定义]
comment = test
path = /data/
public = yes
browseable = yes
writable = yes

b、创建共享目录并给定相应权限

[root@centos2 /]# mkdir data
[root@centos2 /]# chmod data

c、测试配置文件并重启服务

[root@centos2 /etc/samba]# testparm
[root@centos2 /etc/samba]# systemctl start smb

d、创建linux用户

[root@centos2 /etc/samba]# useradd -s /sbin/nologin zhangsan

e、转换为samba用户

[root@centos2 /etc/samba]# pdbedit -a zhangsan

f、客户端查看共享文件并登录测试

[root@localhost ~]# smbclient -U zhangsan -L 192.168.80.129
[root@localhost ~]# smbclient -U zhangsan //192.168.80.129/test

登录报错:protocol negotiation failed: NT_STATUS_IO_TIMEOUT

解决办法:在samba服务器的/etc/hosts文件中添加本机解析(samba服务器自身)

注:由于未设置文件的权限默认,指定用户上传的文件只有自己可以修改和覆盖

3.3 访问控制-通过配置限制

valid users 仅允许部分用户访问共享区域

注:前提条件是指定目录权限给到最大,通过修改配置文件来实现实验结果

部分用户登录samba 服务器

修改/etc/samba/smb.conf 中自定义的共享区域

  添加:设置合法用户列表

  valid users = 用户,@组(多个逗号隔开)

部分用户对共享区域有写权限

  添加:开启只读,设置可写列表

  read only = yes

  write list = lisi

设置上传文件的默认权限

create mask 文件默认权限

directory mask 目录的默认权限

修改配置文件自定义的共享区域

  添加:

  create mask = 666

  directory mask = 777

[root@centos2 /etc/samba]# vim smb.conf
...
[test]
comment = test
path = /data/
public = yes
browseable = yes
valid users = zhangsan,lisi
read only = yes
write list = lisi
create mask =
directory mask = [root@centos2 /etc/samba]# testparm
[root@centos2 /etc/samba]# useradd -s /sbin/nologin lisi
[root@centos2 /etc/samba]# pdbedit -a lisi
[root@centos2 /etc/samba]# systemctl restart smb

3.4 用户别名(虚拟用户)

1)添加别名(/etc/samba/smbusers)

  添加:zhangsan = zs

2)启用别名(修改主配置文件)

  vim /etc/samba/smb.conf

  添加:

    username map = /etc/samba/smbusers

3)测试

  smbclient -U 别名 //服务器IP/共享名

3.5 映射网络驱动器(挂载)

Linux下:

  临时挂载:

    mount -t cifs -o username=xxx,password=xxx //服务器ip/服务器共享  /本地挂载目录

  永久挂载:/etc/fstab

    //服务器ip/共享  /本地挂载目录 cifs  defaults,username=xxx,password=xxx 0 0

windows下:

  我的电脑、计算机、此电脑等右键映射网络驱动器【注意是反斜杠\】

最新文章

  1. 微信"流量红包"的玩法攻略 广东移动用户有福啦
  2. HTML label标签的for属性--input标签的accesskey属性
  3. 总结最近移动端遇到的坑(auto-size + zepto)
  4. 实现Android包的批量删除
  5. ZendStudio 解决svn导出项目乱码问题
  6. 隐藏,显示任务栏,桌面 C++代码
  7. 【javascript基础】7、继承
  8. WCF TCP 错误代码 10061: 由于目标计算机积极拒绝
  9. 利用一些码农Trick去搞一搞G和T的单词
  10. Codeforces Round #261 (Div. 2)——Pashmak and Buses
  11. C# WInform 界面左导航菜单
  12. python 集合 set
  13. utf8的大小写敏感性测试及其修改方法
  14. JDK8 HashMap--removeNode()移除节点方法
  15. CentOS7.3安装Go运行和开发环境
  16. P1678 烦恼的高考志愿(二分)
  17. [转]KMP算法理解及java实现
  18. MVC架构介绍-Model的开发
  19. HSF源码阅读
  20. 列式数据库~clickhouse 数据同步使用

热门文章

  1. Chrome崩溃的解决办法
  2. Spring Security教程之基于方法的权限控制(十二)
  3. asp.net core api 跨域配置
  4. 01.普通抖音新手如何从0开始入门3个月做到粉丝100w+
  5. excel绘制多列 其中一列作为横坐标 ; 数值拟合
  6. OI之路
  7. MyEclipse部署外部引用的jar到web-inf的lib目录下
  8. 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[5]:调试 debug
  9. ES7.3.0配置邮件告警
  10. MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题