一、服务介绍

Samba是在LinuxUNIX系统上实现SMB协议的一个自由软件服务,属于C/S架构。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

二、服务的发展

在早期的网络中,数据的传输一般都是在FTP服务器上进行的传输,虽然FTP服务子啊传输数据时比较方便,但是却有一个缺点,那就是用户无法直接修改主机上的数据,也就是说我们如果想去对一个数据做修改那么只能通过在服务端上将源数据下载到客户端之后才可以进行修改,因此数据需要在服务端和客户端上都有存在,这样的话就会有一个问题,如果说某一次修改了数据之后但是没有及时的上传会服务端,过了一阵后就无法确定哪个数据是最新的数据。
那么这个时候就需要有一种文件系统,直接满足在客户端就可以修改存储数据,那么只要保证我们的服务端拥有这套数据就可以,后来就引用了NFS文件系统,那么在Windows下也有这种文件系统那就是CIFS,但是这种服务仅可以让Windows之间来进行共享,不可以错系统的进行数据共享,这就是一个问题。
1991 年一个名叫安德鲁的大学生就有这样的困扰,他手上有三部机器,分别是跑DOS个人计算机、DEC公司的 Digital Unix 系统以及Sun的 Unix 系统。在当时,DEC 公司有发展出一套称为 PATHWORKS 的软件,这套软件可以用来分享 DEC 的Unix 与个人计算机的DOS这两个操作系统的档案数据,可惜让他觉得较困扰的是,Sun的 Unix 无法藉由这个软件来达到数据分享的目的。这个时候哥们就想说既然这两部系统可以相互沟通,没道理Sun 就必需这么苦命吧?可不可以将这两部系统的运作原理找出来,然后让 Sun这部机器也能够分享档案数据呢?,为了解决这样的的问题,这老兄就自行写了个程序去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出ServerMessage Block (SMB) 这个档案系统,而就是这套SMB软件能够让Unix与DOS互相的分享数据!
因此哥们就去申请了SMBServer ( Server Message Block 的简写 )这个名字来做为他撰写的这个软件的商标,可惜的是,因为SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个SAMBA刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称。
Samba有两个守护进程:smb和nmb(139、445端口)

三、实现Linux与Windows之间共享

1.第一台虚拟机配置yum源

  1. // 先创个目录
  2. [root@localhost ~]# mkdir /opt/centos
  3. // 挂载光驱
  4. [root@localhost ~]# mount -o loop /dev/cdrom /opt/centos
  5. // 配置本地yum源
  6. [root@localhost ~]# vim /etc/yum.repos.d/local.repo
  7. [centos]
  8. name=centos7
  9. baseurl=file:///opt/centos
  10. gpgcheck=0
  11. enabled=1
  12. [root@localhost ~]# yum clean all
  13. [root@localhost ~]# yum repolist

2.安装依赖及修改配置文件

  1. // 安装服务
  2. [root@localhost ~]# yum install -y samba
  3. // 修改配置文件
  4. [root@localhost ~]# vim /etc/samba/smb.conf
  5. # See smb.conf.example for a more detailed config file or
  6. # read the smb.conf manpage.
  7. # Run 'testparm' to verify the config is correct after
  8. # you modified it.
  9. [global]
  10. workgroup = SAMBA
  11. security = user
  12. passdb backend = tdbsam
  13. printing = cups
  14. printcap name = /dev/null
  15. printcap name = lpstat
  16. load printers = No
  17. cups options = raw
  18. disable spoolss = Yes
  19. [homes]
  20. comment = Home Directories
  21. valid users = %S, %D%w%S
  22. browseable = No
  23. read only = No
  24. inherit acls = Yes
  25. [printers]
  26. comment = All Printers
  27. path = /var/tmp
  28. printable = Yes
  29. create mask = 0600
  30. browseable = No
  31. [print$]
  32. comment = Printer Drivers
  33. path = /var/lib/samba/drivers
  34. write list = @printadmin root
  35. force group = @printadmin
  36. create mask = 0664
  37. directory mask = 0775
  38. [share]
  39. path = /opt/share
  40. browseable = Yes
  41. public = Yes
  42. writable = Yes
  43. 参数详解:
  44. [global] samba服务器的全局设置,对整个服务器有效
  45. load printers = no //是否启用打印机。
  46. cups options = raw //打印系统,建立文件时所给的权限
  47. printcap name = /dev/null //设置获取打印机描述信息的文件位置
  48. printcap name = lpstat
  49. printing = bsd
  50. //定义打印机的系统类型,可选项有:bsd、sysv、plp、lprng、aix、hpux、qnx、cups
  51. disable spoolss = yes //新增,禁用打印机共享

3.授权启动

  1. // 创建共享目录
  2. [root@localhost ~]# mkdir /opt/share
  3. // 赋与共享目录所有权限
  4. [root@localhost ~]# chmod 777 /opt/share/
  5. // 启动samba守护进程
  6. [root@localhost ~]# systemctl start smb
  7. [root@localhost ~]# systemctl start nmb
  8. // 查找139、445端口
  9. [root@localhost ~]# netstat -ntpl
  10. Active Internet connections (only servers)
  11. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  12. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 969/sshd
  13. tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1158/master
  14. tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1669/smbd
  15. tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1669/smbd
  16. tcp6 0 0 :::22 :::* LISTEN 969/sshd
  17. tcp6 0 0 ::1:25 :::* LISTEN 1158/master
  18. tcp6 0 0 :::445 :::* LISTEN 1669/smbd
  19. tcp6 0 0 :::139 :::* LISTEN 1669/smbd
  20. // 创建samba用户密码
  21. [root@localhost ~]# smbpasswd -a root
  22. // 完成之后Windows下访问验证
  23. win+r
  24. 输入IP地址:\\192.168.200.50

四、实现Linux之间共享

1.第二台虚拟机安装配置

  1. // 客户端安装
  2. [root@localhost ~]# yum install samba-client cifs-utils -y
  3. [root@localhost ~]# smbclient -L 192.168.200.50 -U root
  4. Enter SAMBA\root's password:
  5. Sharename Type Comment
  6. --------- ---- -------
  7. print$ Disk Printer Drivers
  8. share Disk
  9. IPC$ IPC IPC Service (Samba 4.10.4)
  10. root Disk Home Directories
  11. Reconnecting with SMB1 for workgroup listing.
  12. Server Comment
  13. --------- -------
  14. Workgroup Master
  15. --------- -------
  16. SAMBA LOCALHOST
  17. [root@localhost ~]# mount -t cifs //192.168.200.50/share /mnt/
  18. Password for root@//192.168.200.50/share: ******
  19. [root@localhost ~]# df -h
  20. Filesystem Size Used Avail Use% Mounted on
  21. devtmpfs 1.9G 0 1.9G 0% /dev
  22. tmpfs 1.9G 0 1.9G 0% /dev/shm
  23. tmpfs 1.9G 12M 1.9G 1% /run
  24. tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
  25. /dev/mapper/centos-root 150G 1.5G 149G 1% /
  26. /dev/sr0 4.5G 4.5G 0 100% /opt/centos
  27. /dev/sda1 1014M 150M 865M 15% /boot
  28. tmpfs 378M 0 378M 0% /run/user/0
  29. //192.168.200.50/share 150G 1.5G 149G 1% /mnt