实现 Linux 系统之间共享文件资源以及在 Linux 系统与 Windows 系统之间共享文件
Samba 软件包的构成
服务端: samba
客户端: samba-client
公共组件: samba-common
Smbd: 负责为客户机提供服务器中共享资源 (目录和文件) 的访问, 监听 139 端口(smb 协议),445 端口(cifs 协议)
Nmbd: 负责提供基于 netblos 协议的主机名称解析, 以便为 Windows 网络中的主机进行查询服务, 监听 137-138 端口(netblos 协议)
Samba 服务的程序组件
主配置文件路径
/etc/samba/smb.conf
配置文件参数解释
[global] |
| # 全局参数。 |
| workgroup = MYGROUP | # 工作组名称 |
| server string = Samba Server Version %v | # 服务器介绍信息,参数 %v 为显示 SMB 版本号 |
| log file = /var/log/samba/log.%m | # 定义日志文件的存放位置与名称, 参数 %m 为来访的主机名 |
| max log size = 50 | # 定义日志文件的最大容量为 50KB |
| security = user | # 安全验证的方式,总共有 4 种 |
| #share:来访主机无需验证口令;比较方便,但安全性很差,7.0 以上系统不支持 share, 使用 user 模式,map to guest=bad user 代替 | |
| #user:需验证来访主机提供的口令后才可以访问;提升了安全性 | |
| #server:使用独立的远程主机验证来访主机提供的口令(集中管理账户) | |
| #domain:使用域控制器进行身份验证 | |
| passdb backend = tdbsam | # 定义用户后台的类型,共有 3 种 |
| #smbpasswd:使用 smbpasswd 命令为系统用户设置 Samba 服务程序的密码 | |
| #tdbsam:创建数据库文件并使用 pdbedit 命令建立 Samba 服务程序的用户 | |
| #ldapsam:基于 LDAP 服务进行账户验证 | |
| load printers = yes | # 设置在 Samba 服务启动时是否共享 打印机设备 |
| cups options = raw | # 打印机的选项 |
[homes] |
| # 共享参数 |
| comment = Home Directories | # 描述信息 |
| browseable = no | # 指定共享信息是否在 “网上邻居” 中可见 |
| writable = yes | # 定义是否可以执行写入操作, 与 “read only” 相反 |
[printers] |
| # 打印机共享参数 |
| comment = All Printers |
|
| path = /var/spool/samba | # 共享文件的实际路径(重要)。 |
| browseable = no | # 网络发现是否可见 |
| guest ok = no | # 是否所有人可见,等同于 "public" 参数。 |
| writable = no | # 是否允许写入 |
| printable = yes |
|
u 部署 samba 服务
匿名方式访问
准备环境
- setenforce 0 // 关闭 selinux
- systemctl stop firewalld // 关闭防火墙
1. 搭建本地 yum 源.
2. 使用 yum 方式安装 samba 服务程序
yum install -y samba* //yum 方式安装 samba 服务
创建共享的目录
编辑主配置文件设置匿名共享, 设置共享目录
重启服务, 使用 windos 访问验证, 无法访问请检查 iptable 防火墙
- mkdir -p /var/public // 创建要共享目录
- VIM /etc/samba/smb.conf // 编辑 samba 主配置文件
------------------ 添加或者修改红色部分的参数 -----------------
- [global]
- workgroup = SAMBA
- security = user //7.0 以下系统将 user 改为 share
- passdb backend = tdbsam
- map to guest = bad user //7.0 以上匿名访问必加
- [public] // 共享目录名称
- comment = public // 共享描述
- path = /var/public // 共享目录路径
- guest ok = yes // 共享目录是否所有人可见
- read only = yes // 是否只读
- browseable = yes // 网络发现是否可见
- systemctl restart smb // 重启 samba 服务
用户验证的共享
案例: 创建一个共享目录 / var/yonghu/, 只有 zhangsan 和 lisi 可以访问共享, 只有 zhangsan 有可以写入的权限
注意: 创建共享用户前需要有对应的系统用户
创建共享用户 zhangsan,lisi, 创建共享的目录
修改 smb 配置文件, 设置共享目录
- Useradd zhangsan // 创建系统用户 zhangsan
- Useradd lisi // 创建系统用户 lisi
- Pdbedit -a -u zhangsan // 创建共享用户 zhangsan,-a 添加 - u 指定用户
- Pdbedit -a -u lisi // 创建共享用户 lisi,-a 添加 - u 指定用户
- Mkdir /var/yonghu // 创建共享目录
- VIM /etc/samba/smb.conf // 编辑 samba 主配置文件
------------------ 添加或修改红色部分参数 -------------------
- [global]
- workgroup = MYGROUP
- security = user
- passdb backend = tdbsam
- map to guest = bad user // 匿名访问必加, 否则需要密码
- [public]
- comment = public
- path = /var/public
- guest ok = yes
- [yonghu] // 共享目录名称
- comment = yonghu // 描述
- path = /var/yonghu // 共享目录路径
- public = no // 是否所有人可见
- read only = yes // 是否只读
- valid users = zhangsan,lisi // 哪些用户可以访问
- write list = zhangsan // 哪些用户可以写入, 组加 "@组名"
- directory mask = 0755 // 用户上传目录权限为 755
- create mask = 0644 // 用户上传文件权限为 644
3. 给予共享目录 777 权限
Chmod -R 777 /var/yonghu // 更改共享目录的权限为 777
4. 重启 smb 服务验证权限
systemctl restart smb // 重启 samba 服务
Windows 清除 smb 的连接会话
- net use // 查看连接会话
- net use */del // 清除连接会话
用户映射的共享(安全性高)
正常情况下, 一个共享账号都有一个同名的系统账号很不安全, 可以使用映射的方式, 将一个共享用户映射为多个不同的名称 (别名), 只需要通过共享用户的别名和密码就能访问资源了, 而不需要知道真正的共享用户(系统用户) 名称
默认的共享账号映射文件位于:/etc/samba/smbusers
启用映射功能, 需要修改主配置文件, 在全局配置加入:
username map=/etc/samba/smbusers
重启服务即可生效
访问地址限制
在 global 或者配置里面添加 hosts allow 或者 hosts deny 即可
- Hosts allow = 192.168.2. 172.16. // 允许 192.168.2.0,172.16.0.0 网段访问
- Hosts deny = 192.168.3. 172.14. // 拒绝 192.168.3.0,172.14.0.0 网段访问
使用 smbclient 访问共享
查询共享资源列表
smbclient -L 192.168.2.162 -U administrator
匿名访问共享文件夹
smbclient //192.168.2.223/public
使用用户名, 别名访问共享
smbclient -U ls //192.168.2.223/zhangsan
挂载共享目录
Linux 下挂载 samba 共享目录
1. 使用 yum 安装 cifs-utils 工具
yum install -y cifs-utils //yum 安装 cifs-utils 工具
2. 使用 smbclient 工具查询共享目录
smbclient -L 192.168.2.224 // 查询 2.224 的共享目录
匿名挂载方法
- mount.cifs //192.168.2.223/public /ceshi
- // 将 public 目录挂载到本地 ceshi 目录
指定用户挂载
- mount.cifs //192.168.2.223/yonghu /ceshi/ -o username=zhangsan,password=aaa
- // 将 yonghu 目录挂载到本地 ceshi 目录, 指定用户名 zhangsan
Linux 下挂载 windos 共享目录
1. 使用 smbclient 工具查询共享目录
smbclient -L 192.168.2.224 // 查询 2.224 的共享目录
2. 挂载 windos 共享目录
- mount -t cifs -o username=administrator,password=123 //192.168.2.162/d /ceshi/ // 将 d 盘挂载到本地的 ceshi 目录
- mount -t cifs -o username=administrator,password=666,vers=2.0 //192.168.9.1/test /media/Windows
smb 常见故障
注意: 如果 Windows 无法访问, 先使用其他客户端或者 Linux 测试是否能访问, 然后在排除故障
1.win7 访问 Linux Samba 的共享目录提示 "登录失败: 用户名或密码错误" 解决方法:
单击 "开始"-"运行", 输入 secpol.msc, 打开 "本地安全策略", 在本地安全策略窗口中依次打开 "本地策略"-->"安全选项", 然后再右侧的列表中找到 "网络安全: LAN 管理器身份验证级别", 把这个选项的值改为 "发送 LM 和 NTLM - 如果已协商, 则使用 NTLMv2 会话安全", 最后应用确定, 然后重新连接测试
来源: http://www.bubuko.com/infodetail-2927267.html