Samba服务
Samba是著名的开源软件项目之一,它在Linux/UNIX系统中实现了微软的SMB/CIFS网络协议,从而使得跨平台的文件共享变得更加容易。在部署Windows、Linux/UNIX混合平台的企业环境时,选用Samba可以很好地解决不同系统之间的文件互访问题。
SMB协议(Server Message Block 服务消息块协议),它能被用于Web连接和客户端与服务器之间的信息沟通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。
CIFS协议(Common Internet File System 通用互联网文件系统协议),CIFS是SMB的另一种实现;CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。
在Samba项目出现之前,Windows并不能直接与Linux/UNIX系统进行文件系统共享;Linux中Samba服务使用NetBIOS(网络的基本输入输出系统),来提供浏览服务显示网络上的共享资源列表的功能。
Samba服务器提供smbd、nmbd两个服务程序,分别完成不同的功能。
smbd:其主要功能就是用来管理Samba服务器上的共享目录、打印机等,主要是针对网络上的共享资源进行管理的服务。当要访问服务器时,要查找共享文件,这时我们就要依靠smbd这个进程来管理数据传输。
nmbd:其功能是进行NetBIOS名解析,并提供浏览服务显示网络上的共享资源列表。
进程 | 对应协议 |
---|---|
smbd | 对应smb/cifs协议 |
nmbd | 对应netbios协议 |
winbindd+ldap | 对应Windows AD活动目录 |
TCP | UDP |
---|---|
139 | 137 |
445 | 138 |
smbd服务程序负责监听TCP协议的139端口(SMB协议)、445端口(CIFS协议);
nmbd服务程序负责监听UDP协议的137、138端口(NetBIOS协议)。
Samba服务的配置文件位于/etc/samba/目录,其中smb.conf是主配置文件。
samba三大组成 | 作用 |
---|---|
[global] | 全局配置,此处的设置项对整个samba服务器都有效 |
[homes] | 宿主目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。 当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中 |
[printers] | 打印机共享设置 |
若需要在smb.conf文件中设置新的共享目录,只需要增加一段如“[myshare]”添加共享设置即可,其中“myshare”为用户自定义的共享名。新的共享文件夹设置可以参考“[homes]”和“[printers]”部分的内容。
参数 | 作用 |
---|---|
workgroup | 表示设置工作组名称 |
server string | 表示描述samba服务器 |
comment | 表示设置对应共享目录的注释,说明信息,即文件共享名 |
path | 表示共享目录的路径 |
security | 表示设置安全级别,其值可为share、user、server、domain |
passdb backend | 表示设置共享帐户文件的类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(用户名密码,兼容旧版本samba密码文件) |
browseable | 表示是否允许用户看到此共享 |
public | 表示设置是否允许匿名用户访问 |
guest ok | 表示设置是否所有人均可访问共享目录 |
valid users | 设置可以访问的用户和组,例如 valid users = root,@root |
hosts deny | 设置拒绝哪台主机访问,例如 hosts deny = 192.168.72.1 |
hosts allow | 设置允许哪台主机访问,例如 hosts allow = 192.168.72.2 |
read only | 表示设置目录只读 |
writable | 表示设置目录是否可写 |
write list | 表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root |
printable | 表示设置是否为打印机 |
samba服务在使用时需要配置用户名和密码来进行认证,认证的用户可使用系统中的用户也就是/etc/passwd中的用户,为了安全起见并不会使用系统中用户的密码作为认证密码;Samba服务自有密码文件通过smbpasswd -a USERNAME命令设置.
//smbpasswd命令:
-a Sys_User //添加系统中的用户为samba用户并为其设置密码
-d //禁用samba用户
-e //启用samba用户
-x //删除samba用户
[root@server ~]# yum -y install samba //安装samba之后才会有smbpasswd命令
[root@server ~]# useradd yf
[root@servert ~]# smbpasswd -a yf
New SMB password:
Retype new SMB password:
Added user yf.
环境说明:
服务器IP & 操作系统 | 客户机IP & 操作系统 |
---|---|
192.168.92.130 Centos8 |
192.168.92.135 Centos8 |
//关闭防火墙,关闭selinux,永久关闭selinux则修改/etc/selinux/config配置文件
[root@samba-server ~]# systemctl stop firewalld
[root@samba-server ~]# systemctl disable firewalld
[root@samba-server ~]# setenforce 0
//安装Samba服务
[root@samba-server ~]# dnf -y install samba
//开启Samba服务并设置开机自启
[root@samba-server ~]# systemctl start smb.service nmb.service
[root@samba-server ~]# systemctl enable smb.service nmb.service
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nmb.service → /usr/lib/systemd/system/nmb.service.
//创建名为yf的目录
[root@samba-server ~]# mkdir /yf
//编辑smb.conf配置文件实现/yf目录共享
[root@samba-server ~]# vim /etc/samba/smb.conf
[yf]
comment = yf
path = /yf
security = user
passdb backend = smbpasswd
browseable = yes
guest ok = no
valid users = yf
writable = no
write list = yf
//配置结束后用testparm命令测试配置文件是否有语法错误
[root@samba-server ~]# testparm
Load smb config files from /etc/samba/smb.conf
Global parameter security found in service section!
Global parameter passdb backend found in service section!
Loaded services file OK.
Weak crypto is allowed
.......................
.......................
//创建yf用户,添加至samba共享用户
[root@samba-server ~]# useradd yf
[root@samba-server ~]# smbpasswd -a yf
New SMB password:
Retype new SMB password:
Added user yf.
//给共享目录设置权限。设置文件访问控制列表或修改属主属组,二选一。
[root@samba-server ~]# setfacl -m u:yf:rwx /yf/
//重启Samba服务
[root@samba-server ~]# systemctl restart smb.service nmb.service
//交互式数据访问
smbclient -L HOST -U USERNAME //查看samba服务端的共享资源
smbclient //SERVER/shared_name -U USERNAME //交互式访问共享资源
//安装Samba客户端
[root@samba-client ~]# dnf -y install samba-client
查看samba服务端有哪些共享资源
[root@samba-client ~]# smbclient -L 192.168.92.130 -U yf
Enter SAMBA\yf's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
yf Disk yf
IPC$ IPC IPC Service (Samba 4.14.5)
SMB1 disabled -- no workgroup available
//交互式访问共享资源
[root@samba-client ~]# smbclient //192.168.92.130/yf -U yf
Enter SAMBA\yf's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Aug 26 11:43:00 2022
.. D 0 Fri Aug 26 11:43:00 2022
73364480 blocks of size 1024. 70620856 blocks available
smb: \> quit //退出交互界面
//基于挂载的方式访问
语法:
mount -t cifs //SERVER/shared_name /挂载到本地的什么目录 -o username=USERNAME,password=PASSWORD
//安装cifs
[root@samba-client ~]# dnf -y install cifs-utils
//创建挂载点,临时挂载到本地
[root@samba-client ~]# mkdir /mnt/yf
[root@samba-client ~]# mount -t cifs //192.168.92.130/yf /mnt/yf/ -o username=yf,password=123456
//挂载之后,查看效果
[root@samba-client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 877M 0 877M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 8.7M 887M 1% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl-root 70G 2.5G 68G 4% /
/dev/mapper/cl-home 127G 939M 126G 1% /home
/dev/sr0 11G 11G 0 100% /mnt/cdrom
/dev/sda1 1014M 214M 801M 22% /boot
tmpfs 179M 0 179M 0% /run/user/0
//192.168.92.130/yf 70G 2.7G 68G 4% /mnt/yf
//永久挂载
[root@samba-client ~]# vim /etc/fstab
//192.168.92.130/yf /mnt/yf cifs multiuser,username=yf,password=123456,sec=ntlmssp,_netdev 0 0
[root@samba-client ~]# mount -a
//挂载之后查看
[root@samba-client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 877M 0 877M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 8.7M 887M 1% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl-root 70G 2.5G 68G 4% /
/dev/mapper/cl-home 127G 939M 126G 1% /home
/dev/sr0 11G 11G 0 100% /mnt/cdrom
/dev/sda1 1014M 214M 801M 22% /boot
tmpfs 179M 0 179M 0% /run/user/0
//192.168.92.130/yf 70G 2.7G 68G 4% /mnt/yf
//客户端
[root@samba-client ~]# cd /mnt/yf/
[root@samba-client yf]# touch test.txt
[root@samba-client yf]# mkdir abc
[root@samba-client yf]# ls
abc test.txt
//服务端
[root@samba-server ~]# ls /yf
abc test.txt
//安装samba服务
[root@samba-server ~]# dnf -y install samba
//创建一个共享目录名为yefeng
[root@samba-server ~]# mkdir /opt/yefeng
[root@samba-server ~]# chmod 777 /opt/yefeng
[root@samba-server ~]# ll -d /opt/yefeng
drwxrwxrwx 2 root root 6 Aug 26 14:54 /opt/yefeng
//修改Samba的主配置文件
[root@samba-server ~]# vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
map to guest = Bad User //添加此行内容
//添加以下的内容
[yefeng]
comment = yefeng
path = /opt/yefeng
browseable = yes
guest ok = yes
writable = yes
public = yes
//重启服务,生效配置
[root@samba-server ~]# systemctl restart smb.service
//在客户端查看samba服务器有哪些共享资源
[root@samba-client ~]# smbclient -L 192.168.92.130 -U 'Bad User'
Enter SAMBA\Bad User's password: //这里直接敲回车键即可,匿名共享不需要密码
Sharename Type Comment
--------- ---- -------
print$ Disk yf
yefeng Disk yefeng
IPC$ IPC IPC Service (Samba 4.14.5)
SMB1 disabled -- no workgroup available
//交互式访问共享资源。注意!服务端IP地址后面直接跟上共享的目录名即可,不要写上绝对路径。
[root@samba-client ~]# smbclient //192.168.92.130/yefeng -U 'Bad User'
Enter SAMBA\Bad User's password: //这里直接敲回车键即可,匿名共享不需要密码
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Aug 26 14:54:40 2022
.. D 0 Fri Aug 26 14:54:40 2022
73364480 blocks of size 1024. 70619956 blocks available
smb: \> quit
//创建挂载点,临时挂载到本地
[root@samba-client ~]# mkdir /opt/samba
[root@samba-client ~]# mount -t cifs //192.168.92.130/yefeng /opt/samba -o username='Bad User'
Password for Bad User@//192.168.92.130/yefeng:
//挂载之后,查看效果
[root@samba-client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 877M 0 877M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 8.7M 887M 1% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl-root 70G 2.5G 68G 4% /
/dev/mapper/cl-home 127G 939M 126G 1% /home
/dev/sr0 11G 11G 0 100% /mnt/cdrom
/dev/sda1 1014M 214M 801M 22% /boot
tmpfs 179M 0 179M 0% /run/user/0
//192.168.92.130/yefeng 70G 2.7G 68G 4% /opt/samba
//客户端
[root@samba-client ~]# cd /opt/samba/
[root@samba-client samba]# touch abc.txt
[root@samba-client samba]# mkdir 123
[root@samba-client samba]# ll
total 0
drwxr-xr-x 2 root root 0 Aug 26 15:26 123
-rwxr-xr-x 1 root root 0 Aug 26 15:26 abc.txt
//服务端
[root@samba-server ~]# ll /opt/yefeng/
total 0
drwxr-xr-x 2 nobody nobody 6 Aug 26 15:26 123
-rwxr--r-- 1 nobody nobody 0 Aug 26 15:26 abc.txt
服务端的配置看5.1或6.1的步骤即可。下面演示Windows访问Linux服务端
1.首先打开【启动或关闭Windows功能】,选择安装【SMB1.0/CIFS文件共享支持】,安装后重启系统生效。
2.在安装完成并重启过后。
win+r打开运行界面,输入//192.168.92.130(服务端IP地址)
第一次登录需要输入用户名与密码。输入服务端的共享用户和密码即可。如果是匿名共享就无需密码了。
3.点击进入该目录,可以看到里面的内容,也可以进行创建文件目录或删除文件目录等操作。(前提是服务端授权了)