SAMBA 的介绍
SAMBA —— SMAServer (Server Message Block) ,用来沟通 Windows 与 Unix Like 这两个不同操作平台,实现文件共享
1 )主要功能:
- 共享文件与打印机服务
- 可以提供用户登录 SAMBA 主机时的身份认证,以提供不同身份的个别数据
- 可以进行 Windows 网络上的主机域名解析 (NetBIOS Name)
在同一个组中,NetBIOS Name 是独一无二的
- 可以进行设备的共享 (例如 Zip、CD-ROM)
2 )SAMBA 使用的 NetBIOS (Network Basic Input / Output System)通信协议
3 )SAMBA 使用的 daemons
- 取得对方主机的 NetBIOS Name ,定位该主机所在
- 利用对方给予权限访问可用资源
SAMBA 是通过两个服务来控制这两个步骤,分别是:
- nmbd:这个 daemons 是用来管理工作组、NetBIOS Name 等的解析。主要利用 UDP 协议开启 port 137、138 来负责名称解析的任务。
- smbd:这个 daemons 的主要功能是用来管理 SAMBA 主机共享的目录、文件与打印机等。主要利用可靠的 TCP 协议来传输数据,开放的端口为 139 、445.。
4 )连接模式的介绍(Peer / Peer、Domain model)
- Peer / Peer (Workgroup mode,对等模式)
- Domain model (主控模式)
SAMBA 服务器的基础设置
SAMBA 所需软件
- samba:提供 SMB 服务器所需的各项服务程序(smbd 及 nmbd)、相关文件以及其他与 SAMBA 相关的 logrotate 配置文件等
- samba-client:Linux 作为 SAMBA Client 端时,所需的工具命令
- samba-common:提供服务器与客户端都会使用的数据
安装 及 启动服务
- dnf install samba samba-client samba-common -y
- systemctl enable --now smb.service
SAMBA 的软件结构
- /etc/samba/smb.conf:SAMBA 的主要配置文件
- /etc/samba/lmhosts:NetBIOS Name 对应的 IP 文件
- /etc/sysconfig/samba:提供启动 smbd、nmbd 时,还想要加入的相关服务参数
- /var/lib/samba/private/{passdb.tab,secrets.tab}:管理 SAMBA 的用户账号/密码时,用到的数据文件
基础的网上邻居共享流程 与 smb.conf 的常用设置项目
网上邻居的默认限制:
- 服务器与客户端必须要在同一个网络中 (否则需要修改 Windows 默认防火墙)
- 最好设置为同一工作组
- 主机名称不可相同(NetBIOS Name)
注意:
工作组与主机名设置—— 右击“我的电脑”- 弹出快捷菜单中,选择“属性” - 修改相关设置。
Windows 共享设置步骤:
- 打开“资源管理器”,然后再要共享的目录、磁盘、设备(如打印机)上面右击,在弹出的快捷菜单中,选择“共享”,设置共享数据。
- 建立一组给用户使用的账号与密码,让其他主机的用户可以通过该账号密码连接进入,使用网上邻居共享的资源。
注意:网上邻居的资源名称,写法“\\IP\共享资源名称” ;共享资源名称为 “VB Game”
SAMBA 的设置:
- 服务器全局设置方面:在 smb.conf 中设置好工作组、NetBIOS Name 主机名、密码使用状态(无密码共享或本机密码)等
- 规划准备共享的目录参数:在 smb.conf 中设置好预计要共享的目录或设备以及可供使用的账号数据
- 建立所需要的文件系统:根据步骤2 设置,在 Linux 文件系统中建立好共享出去的文件或设备,以及相关权限参数
- 建立可用 SAMBA 的账号:根据步骤2 设置,建立所需的 linux 实体账号,再以 pdbedit 建立使用 SAMBA 的密码
- 启动服务:启动 SAMBA 的 smbd 、nmbd 服务
Linux 系统的使用
1 ) smbclient:查询网上邻居共享的资源,以及使用类似 FTP 的方式上传/下载网上邻居
-
smbclient -L //[ IP | hostname ] [ -U username ] # 查询网上邻居共享资源
-
smbclient -L '//[ IP | hostname ]/资源名称' [ -U username ] # 使用某个账号来直接登录某台主机的某个共享资源 (类似 FTP 的方式登录远程主机)
- smb: \> # 在smb: \> 下面其实就在 //[ IP | hostname ]/资源名称' 这个目录下
- smb: \> ls # 查看当前所在目录的文件
- smb: \> get # 下载单一文件
- smb: \> put # 上传单一文件
- smb: \> del # 删除某个文件
- smb: \> rm # 删除文件
- smb: \> exit # 离开 smbclient 的软件功能
2 ) mount.cifs:直接挂在网上邻居成为网络驱动器 (将远程服务器共享出来的目录整个挂载到本机的挂载点,可直接执行复制,编辑等操作)
mount -t cifs // IP/共享资源 /挂载点 [ -o options ]
-o 后面可接的常用参数 (options)
- username=登录账号
- password=登录密码
例:
SMB 服务器主机
- cd /etc/samba
- cp -p smb.conf.example smb.conf # 用配置文件模板复制生成 SAMBA 主配置文件 smb.conf
- vim /etc/samba/smb.conf # 编辑 smb.conf 配置文件,添加 共享目录【HAHA】及参数
[HAHA] # 共享目录的名称
comment = westos dir # 共享目录的解释
path = /westos # 共享目录的路径
- smbclient -L //172.25.254.20 -U westos # 用 westos 用户身份 登录、查询 172.25.254.20 的网上邻居资源
客户端主机 (Client)
- mount -t cifs //172.25.254.20/HAHA /mnt/ -o username=westos,password=123 # 临时 挂载远程主机的共享目录(HAHA)
- vim /etc/fstab # 设置开机启动 , 永久 自动挂载远程主机的共享目录(HAHA)到本地挂载点 /mnt 下
//172.25.254.20/HAHA /mnt/ cifs defaults,username=westos,password=123
- systemctl restart smb.service # 重启 smb.service 服务
测试:
允许远程登录 SAMBA 服务器主机的共享的资源,有可读写权限
SMB 服务器主机
- chmod 777 /westos # 使共享资源的目录权限为 777 (所有用户都可读写,可执行)
- vim /etc/samba/smb.conf # 编辑 smb.conf 配置文件,添加 【HAHA】的 可读写权限
writable = yes
- systemctl restart smb.service # 重启 smb.service 服务
客户端主机 (Client)
- cd /mnt
- touch file1 # 可以新建 文件 file1 (数据同步 远程主机/westos)
允许 匿名用户登录 访问共享资源
SMB 服务器主机
- vim /etc/samba/smb.conf # 编辑 smb.conf 配置文件,允许匿名用户访问
map to guest = bad user # 映射 匿名用户 以访客身份登录
guest ok = yes # 允许访客登录
- systemctl restart smb.service # 重启 smb.service 服务
测试: 匿名用户登录
用户访问控制
SMB 服务器主机
- vim /etc/samba/smb.conf # 编辑 smb.conf 配置文件
hosts allow = 172.25.254.20 # 只能允许 172.25.254.20 访问,其他 IP 不能访问
hosts deny = 172.25.254.20 # 不允许 172.25.254.20 访问,其他 IP 能访问
- systemctl restart smb.service # 重启 smb.service 服务
测试:
设置 客户端 多用户认证访问远程共享资源
客户端主机 (Client)
- dif install cifs-utils -y # 安装 SAMBA 多人挂载工具
- touch /root/smbauth # 参考 man mount.cifs 说明,建立 认证文件——smbauth
- vim
username = westos # root用户 ,持有 SAMBA 用户 westos 以及 密码,登录 SMB.service
password = 123
- chmod 600 /root/smbauth # 设置文件权限,只有root 用户 可写,可执行 文件 smbauth
- mount -o credentials=/root/smbauth,sec=ntlmssp,multiuser //172.25.254.20/HAHA /mnt # 多用户认证挂载
参数
credentials=/root/smbauth # root用户 隐藏 登录账户及密码(账户信息直接读取 文件smbauth)
sec=ntlmssp # 用户登录,认证方式 ntlmssp
multiuser # 支持多用户 挂载
测试:
cifscreds add [ -u username ] [ -d ] < hosts | domain> # 添加 其他用户 -u SAMABA 账户用户 身份挂载、登录 方式
cifscreds clear [ -u username ] [ -d ] < hosts | domain> # 除掉 某用户 -u SAMABA 账户用户 身份挂载、登录 方式
cifscreds clearall # 清除所有用户 -u SAMABA 账户用户 身份挂载、登录 方式
客户端主机 (Client)
- su - linux # 客户端 切换 linux 用户身份
- cifscreds add -u westos 172.25.254.20 # linux 用户身份 以 SAMABA 账户用户westos 身份 ,登录、挂载SMB共享资源