一.什么是SAMBA
1.SMB协议
SMB(Server Message Block)协议实现文件共享,也称为CIFS(Common Internet File System ),是Windows和类Unix系统之间共享文件的一种协议。
SMB协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层和表示层以及小部分应用层的协议。
windows的网络邻居就是使用smb协议进行文件的共享。
2.SAMBA软件
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。主要用于windows和Linux下的文件共享、打印共享。
客户端主要是Windows;支持多节点同时挂载以及并发写入。
3.SAMBA基本信息
- 服务启动脚本:smb.serivice
- 主配置目录:/etc/samba
- 主配置文件:/etc/samba/smb.conf
- 安全上下文:samba_share_t
- 端口:139 445
- 安装包:samba samba-common
4.SAMBA主要进程
- smbd进程:控制发布共享目录与权限、负责文件传输 TCP 139 445
- nmbd进程:用于名称解析netbios UDP 137 138 ; 基于NETBIOS协议获得计算机名称——>解析为相应IP地址,实现信息通讯
NetBIOS是Network Basic Input/Output System的简称,一般指用于局域网通信的一套API。
二.SAMBA的实现
0.环境准备
client(192.168.1.8):安装samba-client (samba客户端主要都是windows)
server(192.168.1.9):安装samba (samba主服务),samba-common(samba配置文件的安装包)
关闭selinux和防火墙
1.SAMBA的安装和启用
# server端:
yum install samba-common samba samba-client -y
systemctl enable --now smb
# 如果firewalld开启,需要把samba服务添加进去
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
# 测试(直接在server端):
smbclient -L //192.168.1.9
# 默认以server端的root用户登陆,需要输入root用户密码
2.SAMBA用户管理
pdbedit -L #查看所有SAMBA用户
smbpasswd -a student #添加student用户(必须是存在的本地用户)
pdbedit -x student #删除student用户
# 测试:
smbclient //192.168.1.9/student -U student #访问student家目录
# 或在windows中输入"\\192.168.1.9\student" 然后输入刚才的用户和密码
问题:smbpasswd和pdbedit的区别
3.SAMBA共享目录
#在server端:
mkdir /sambadir
vim /etc/samba/smb.conf
[sambadir]
comment = sambadir
path = /sambadir
systemctl restart smb.service
测试:
#在client端
smbclient -L //192.168.1.9 -U student
#也可以直接挂载使用
mount //192.168.1.9/sambadir /mnt/ -o username=student,password=123
#自动挂载在client端
vim /etc/fstab
//192.168.1.9/sambadir /mnt cifs defaults,username=student,password=123 0 0 mount -a
4.SAMBA访问控制
#在server端
vim /etc/samba/smb.conf
[sambadir]
comment = sambadir
path = /sambadir
writable = yes #写权限
readonly = yes #只读权限
write list = student #仅student用户可以使用写权限
write list = @student #仅student用户组成员可以写
read list = student
browseable = no #隐藏该sambadir共享目录
valid users = student #仅student用户可以登陆
valid users = @student #仅student用户组的成员可登陆
hosts allow = 192.168.1.8 #只允许单个IP访问
hosts deny = ALL #拒绝所有
#注意:deny和allow同时存在,allow优先
chmod 777 /sambadir/
systemctl restart smb.service
5.SAMBA文件下的超级用户身份
vim /etc/samba/smb.conf
[sambadir]
admin users = student
# 加上这个配置参数
systemctl restart smb.service
#测试:
在client端:
umount /mnt
mount -o username=student,password=123 //192.168.1.9/sambadir /mnt
touch /mnt/studentfile
umount /mnt
mount -o username=laowang,password=123 //192.168.1.9/sambadir /mnt
touch /mnt/laowangfile
#在server端:
ls -l /sambadir/
#可以看到studentfile的用户是root
6.匿名用户登陆设置
vim /etc/samba/smb.conf
[global]
map to guest = bad user #必须写在全局设定中
[sambadir]
guest ok = yes #允许匿名用户访问
systemctl restart smb.service
#测试:
在client端:
smbclient //192.168.1.9/sambadir/ #可以匿名登陆
7.SAMBA多用户挂载
问题:在客户端中root用户挂载的共享,切换普通用户仍可以访问并使用
#在client端:
yum install cifs-utils #安装多用户挂载工具
vim /root/smbauth #建立认证文件在root家目录下
username=student
password=123
chmod 600 smbauth
mount -o credentials=/root/smbauth,sec=ntlmssp,multiuser //192.168.1.9/sambadir /mnt/ #挂载认证文件
# 在client端切换到用户laowang,对共享目录进行挂载挂载失败。
# 接下来要做的就是使laowang用户通过认证:
cifscreds add -u student 192.168.1.9
# 使laowang用户以samba服务端用户student身份通过认证,如果报错,尝试cifscreds cleanall后再次认证。
三.autofs + samba
mount是用来挂载文件系统的,可以在系统启动的时候挂载也可以在系统启动后挂载。对于本地固定设备,如硬盘可以使用mount挂载;而光盘、软盘、NFS、SMB等文件系统具有动态性,即需要的时候才有必要挂载。光驱和软盘我们一般知道什么时候需要挂载,但NFS和SMB共享等就不一定知道了,而autofs服务就提供这种功能,好像windows中的光驱自动打开功能,能够及时挂载动态加载的文件系统。
# 在client端
yum install autofs -y
mkdir /mnt/samba # 建立挂载点
# 可以在/etc/autofs.conf文件中设置更新时间
vim /etc/auto.master
/mnt/samba /etc/auto.samba
vim /etc/auto.samba
samba -fstype=cifs,username=student,password=123 ://192.168.1.9/sambadir
systemctl restart autofs