零、序言
早期可用 FTP 服务器软体进行 不同主机之间档案、资料的传送
但是!!
使用 FTP 传送档案却有一些问题:不能直接修改主机上面的档案和资料,即要修改时,要经过 下载—>修改—>重上传 的步骤。修改文件时每次都需要重复这三部分操作,比较繁琐。这种情况下,孕育而生的就是,实现 能在主机间直接修改文件的方法:NFS 与 CIFS。
NFS(Network File System),主用于 Unix Like 系统机器之间的文档传送。例如 Linux 以及其衍生系统。
CIFS(Common Internet File System),主用于 Microsoft Like 系统机器之间的文档传送。例如 Windows 的网络邻居。
但是,NFS 仅能满足 Unix Like 系统之间的机器沟通,CIFS 仅能满足 Microsoft Like 相关机器之间的机器沟通,若需要在 Unix Like 和 Microsoft Like 之间进行沟通时,这两种方法都不能满足需求了。因此需要一种能 相互分享档案、资料的跨平台文件系统。
基于上述的需求,利用封包侦测逆向工程,发展而成的 SMB Server,实现跨平台间文件直接访问的可能。
SMB(Server Message Block),用于 Unix Like 与 DOS System 互相分享资料。后来就称之为 SAMBA。
应用:
- 分享档案(文档)与打印机服务
- 提供使用者登入 SAMBA 主机时的身份认证,以提供不同身份者的个人资料,甚至可以提供非主机用户的权限
- 可以进行 Windows 网络上的主机名称解析(NetBIOS name)
- 可以进行装置的分享(例如Zip,CDROM…)
SAMBA 原理
底层协议
就如 NFS 系统是架构在 RPC Server 上面一样,SAMBA 这个文档系统是架构在 NetBIOS(Network Basic Input/Output System)这个通讯协议上的。最早 IBM 开发 NetBIOS 的目的仅是使区域网络内少数电脑进行网络连接的通讯协议,并不是针对大型网络,因此,这个 NetBIOS 是无法跨路由的(Router/Gateway)。因 NetBIOS 在区域网络上性能优越,所以 Microsoft 的网络架构就使用这种协议进行交互。可见,应用前景非常广泛,随即而来就是不满足 NetBIOS 无法跨路由的弊端,因此,为了使基于 NetBIOS 开发的服务器可以支持跨路由连接,就发展成了 NetBIOS over TCP/IP 技术。
基于 NetBIOS over TCP/IP 技术的支持,SAMBA 服务器就可以支持跨路由访问了,但是目前 SAMBA 还是比较广泛的使用在 LAN 里。
使用 deamons
NetBIOS 最初是定义在区域网络交互上的,没有如 TCP/IP 的协议,也就不可能使用 IP 地址的设定。
如此,要指定目标主机,就需要每台主机都要设置一个 NetBIOS 协议中定义的【NetBIOS Name】,之后的步骤:
1、取得对方主机的 NetBIOS Name,定位该主机:
要访问对方主机(Windows)文档时,必须加入该主机的群组(Workgroup),并且自己的主机也必须设定一个【NetBIOS Name】(HostName),在同一群组中,NetBIOS Name 必须为唯一。
2、利用对方给与的权限存取可用资源:
在找到对方主机后,能否操作资源还要验证对方主机是否有设置访问权限。
因此,理论上来说,使用 SAMBA Client 的 Linux 系统可以访问开启了共享的 Windows 系统共享文件夹!!!
一、简介
SAMBA 服务程序是一款基于 SMB 协议并由 服务端 和 客户端 组成的 开源文件共享软件,实现最常用的 Linux 系统与 Windows 系统之间的文件共享。SMB 是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内不同的计算机之间提供文件以及打印机等资源的共享服务。SMB协议 是 Server/Client 型协议。通过设置“NetBIOS over TCP/IP” 可跨路由使用 SAMBA 所提供的的服务。
SAMBA 的两个服务以及端口
- nmbd 主要利用 UDP 137 和 138 端口负责名称解析的服务;
- smbd 这个进程的主要功能是用来管理 SAMBA 主机分享的目录、文件和打印机等。利用 TCP 协议传输资料,使用 139 和 445 端口。
SAMBA 包含的主要套件
- samba :这个套件主要包含 SAMBA 的 daemon 档案(smbd 及 nmbd)、SAMBA 的文件档(document)、以及其他与 SAMBA 相关的 logrotate 设定文件及开机预设选项档案等;
- samba-common :这个套件则主要提供了 SAMBA 的主要设定档(smb.conf)、smb.conf 语法检验的测试程序(testparm)等等;
- samba-client :这个套件则主要提供了当 Linux 系统作为 SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 档案格式的执行档 smbmount 等等。
配置文件相关参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# smb.conf [global] # 全局参数 # 工作组名称 workgroup = MYGROUP # 服务器介绍信息,参数 %v 为显示 SMB 版本号 server string = Samba Server Version %v # 定义日志文件存放位置与名称,参数 %m 为来访的主机名 log file = /var/log/samba/log.%m # 定义日志文件最大容量为 50KB max log size = 50 # 安全验证的方式,总共有 4 种 # user (默认)需由SMB服务验证来访主机提供的口令后才可建立访问 # share 来访主机无需验证口令,方便,但安全性差 # server 使用独立远程主机验证来访主机提供的口令(集中管理账号) # domain 使用PDC完成验证 security = user # 定义用户后台的类型 # smbpasswd 使用SMB服务的smbpasswd命令给系统用户设置SMB密码 # tdbsam 创建数据库文件并使用pdbedit建立SMB独立用户 # ldapsam 基于LDAP服务进行账户验证 passdb backend = tdbsam # 设置是否当SAMBA服务启动时共享打印机设备 load printers = yes # 打印机选项 cups options = raw [home] # 共享参数 # 描述信息 comment = Home Directories # 指定共享是否在“网上邻居”中可见 browseable = no # 定义是否可写入操作,与“read only”相反 writable = yes [printers] # 打印机共享参数 comment = ALL Printers # 共享文件的实际路径(重要) path = /var/spool/samba browseable = no # 是否所有人可见,等同于“public”参数 guest ok = no writable = no printable = yes [linuxprobe] # 自定义共享文件名称,此处为linuxprobe # 自定义描述,例如警告 comment = Do not arbitrarily modify the database file # 共享文件路径 path = /home/database # 关闭所有人可见 public = no # 可写操作 writable = yes |
二、安装
1、CentOS 系统 yum 安装
sudo yum install -y samba
2、关闭 selinux 和 iptables 防火墙,或者添加规则进入防火墙中
关闭:
sudo systemctl stop iptables
sudo setenforce 0
或者将 /etc/selinux/config 下 SELINUX=enforcing 改为 SELINUX=disabled
3、修改配置文件并添加系统用户并将用户 添加到 SAMBA 用户数据库中
三、设置
设置samba访问用户
在Linux中,创建的SSH访问用户不等于在samba里面就有访问权限,需要用pdbedit(这是Samba的用户管理命令)添加可以访问Samba服务器的权限用户。
常用的参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
pdbedit -a username:新建Samba账户。 pdbedit -r username:修改Samba账户。 pdbedit -x username:删除Samba账户。 pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。 pdbedit -Lv:列出Samba用户列表详细信息。 pdbedit -c “[D]” -u username:暂停该Samba用户账号。 pdbedit -c “[]” -u username:恢复该Samba用户账号。 |
另一个可以管理用户的samba管理命令是smbpasswd(属于Samba套件,能够实现添加或删除samba用户和为其修改密码,但是不能查看所有用户)。
1 2 3 4 5 6 |
-a:向smbpasswd文件中添加用户; -c:指定samba的配置文件; -x:从smbpasswd文件中删除用户; -d:在smbpasswd文件中禁用指定的用户; -e:在smbpasswd文件中激活指定的用户; -n:将指定的用户的密码置空。 |
设置samba共享文件
设置好可以访问samba文件服务器的访问用户后,就可以设置共享文件了。具体设置参数可参照第一部分的参数列表。
四、访问
1、Windows 访问
在文件管理器的地址栏上填写:\\服务器IP\共享文件名
也可以通过磁盘映射,将共享的文件夹以磁盘的形式访问,更加方便。
2、Linux 访问
访问前需要安装一些依赖和软件
1)在客户端安装 cifs-utils 软件包
1 |
sudo yum install cifs-utils |
2)创建挂载目录,并且进行挂载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mkdir /database # 在root目录创建认证文件(以此为SMB文件名、SMB用户密码、SMB共享域) sudo vim auth.smb username=smbuser password=123 domain=MYGROUP # 设置权限 sudo chmod -Rf 600 auth.smb # 配置挂载信息(远程共享信息、本地挂载目录、文件系统类型、认证文件、开机自检选项) sudo vim /etc/fstab //172.31.233.195/public /database cifs credentials=/root/auth.smb 0 0 sudo mount -a # 通过 df -h 查看是否挂载 df -h |