samba简介
Samba 是一个能让 Linux 系统应用 Microsoft 网络通讯协议的软件,而 SMB 是 Server Message Block 的缩写,即为服务器消息块,SMB 主要是作为Microsoft 的网络通讯协议,后来 Samba 将 SMB 通信协议应用到了 Linux 系统上,就形成了现在的 Samba 软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。
Samba 最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而 Samba较多的用在了Linux与windows之间的数据共享上面。
使用samba和windows共享文件时候,请确保windows的NetBIOS(就是网上邻居功能)开启了。
Samba组成
一个samba服务器实际上包含了两个服务器程序:smbd和nmbd。
- Smbd是samba的核心。它负责建立对话进程、验证用户身份、提供对文件系统和打印机的访问机制,只有smb服务启动,才能实现文件的共享。【TCP 445】。
- Nmbd实现了“Network Brower”(网络浏览服务器)的功能,实现NETBIOS(本地名称解析)功能【UDP137/138TCP 139】,如果该服务没有启动,则客户端不能通过Linux系统共享的工作组名称访问共享文件,而只能通过IP地址来访问共享的文件。
Samba还包含了一些实用工具。Smbclient是一个SMB客户工具,有shell-based用户界面并同FTP有些类似。应用它可以复制其它的SMB服务器资源,还可以访问其它SMB服务器提供的打印机资源。
SAMBA软件安装(服务器搭建)
代码语言:javascript复制yum -y install samba -y
查看相关软件包
代码语言:javascript复制[root@samba ~]# rpm -qa | grep ^samba
samba-common-libs-4.10.16-19.el7_9.x86_64
samba-common-tools-4.10.16-19.el7_9.x86_64
samba-common-4.10.16-19.el7_9.noarch
samba-client-libs-4.10.16-19.el7_9.x86_64
samba-libs-4.10.16-19.el7_9.x86_64
samba-4.10.16-19.el7_9.x86_64
[root@samba ~]#
smb配置文件
通过命令:vim /etc/samba/smb.conf
查看配置文件
[global] #全局选项
workgroup = SAMBA #定义samba服务器所在的工作组
security = user #认证模式:share匿名|user用户密码|server外部服务器用户密码
passdb backend = tdbsam #密码格式
load printers = yes #加载打印机
cups options = raw #打印机选项
[homes] #局部选项(共享名称)
comment = Home Directories #描述
valid users = %S, %D%w%S #有效用户
browseable = No #隐藏共享名称
read only = No #是否只读
inherit acls = Yes #继承ACL
writable = yes #可读可写
[printers] #共享名称
comment = All Printers #描述
path = /var/tmp #本地的共享目录
printable = Yes #可打印
guest ok = no ——>(等价于) public = no #需要帐号和密码访问
writable = no ——>(等价于) read only =yes #不可写
browseable = No #隐藏
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
SAMBA使用案例
搭建一个SAMBA服务,共享一个目录/samba/share,客户端使用user01/123通过windows或者Linux可以在该目录里创建文件删除文件。
环境准备
配置静态ip
代码语言:javascript复制vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=192.168.44.170
NETMASK=255.255.255.0
GATEWAY=192.168.44.2
DNS1=8.8.8.8
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
关闭防火墙和SELinux
关闭防火墙
代码语言:javascript复制systemctl stop firewalld
#开机不自启
systemctl disable firewalld
关闭SELinux:
代码语言:javascript复制setenforce 0
#开机不自启
vim /etc/selinux/config`
SELINUX=disabled
在服务端创建一个共享目录并创建文件
代码语言:javascript复制mkdir -p /samba/share
[root@samba share]# touch /samba/share/test.txt
[root@samba share]# echo "hello word" >> test.txt
[root@samba share]# ll
total 4
-rw-r--r--. 1 root root 11 Jul 18 16:18 test.txt
[root@samba share]#
修改配置文件
代码语言:javascript复制vim /etc/samba/smb.conf
[samba_share] 共享名称
comment = samba service 描述
path = /samba/share 本地的共享目录
guest ok = no 需要帐号和密码访问
writable = yes 可读可写
或者可以修改成:因为 guest ok = no 等价于 public = no。
代码语言:javascript复制[samba_share]
path = /samba/share
public = no
writable = yes
配置文件选项说明
代码语言:javascript复制workgroup = WORKGROUP
#设定 SambaServer 所要加入的工作组或者域。
server string = Samba Server Version %v
#设定 SambaServer 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
netbios name = smbserver
#设置SambaServer的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
#设置SambaServer监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
hosts allow = 127. 192.168.1. 192.168.10.1
#表示允许连接到SambaServer的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。例如:hostsallow=172.17.2.EXCEPT172.17.2.50表示容许来自172.17.2.*的主机连接,但排除172.17.2.50。hosts allow=172.17.2.0/255.255.0.0表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接。hosts allow=M1,M2表示容许来自M1和M2两台计算机连接。hosts allow=@pega表示容许来自pega网域的所有计算机连接。
max connections = 0
#maxconnections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
deadtime = 0
#deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。
time server = yes/no
#timeserver用来设置让nmdb成为windows客户端的时间服务器。
log file = /var/log/samba/log.%m
#设置SambaServer日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
max log size = 50
#设置SambaServer日志文件的最大容量,单位为kB,0代表不限制。
代码语言:javascript复制security = user
#设置用户访问SambaServer的验证方式,一共有四种验证方式。
- share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
- user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
- server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
- domain:域安全级别,使用主域控制器(PDC)来完成认证。
passdb backend = tdbsam
#passdbbackend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
- smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
- tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。
pdbedit命令的参数很多,我们列出几个主要的。
代码语言:javascript复制pdbedit –a 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用户的账号。
- ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”。
encrypt passwords = yes/no
#是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
smb passwd file = /etc/samba/smbpasswd
#用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。
username map = /etc/samba/smbusers
#用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆SambaServer,更贴近windows用户的习惯。
guest account = nobody
#用来设置guest用户名。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。
domain master = yes/no
#设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。
local master = yes/no
#localmaster用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。
preferred master = yes/no
#设置SambaServer一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。如果同一个区域内有多台SambaServer,将上面三个参数设定在一台即可。
os level = 200
#设置samba服务器的os level。该参数决定SambaServer是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。
domain logons = yes/no
#设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。
logon script = %u.bat
#当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在[netlogon]的path设置的目录路径下。
wins support = yes/no
#设置samba服务器是否提供wins服务。
wins server = wins服务器IP地址
#设置SambaServer是否使用别的wins服务器提供wins服务。
wins proxy = yes/no
#设置SambaServer是否开启wins代理服务。
dns proxy = yes/no
#设置SambaServer是否开启dns代理服务。
load printers = yes/no
#设置是否在启动Samba时就共享打印机。
printcap name = cups
#设置共享打印机的配置文件。
printing = cups
#设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
创建用户
创建一个test用户,然后添加到samba认证中,设置密码为123456
代码语言:javascript复制[root@samba ~]# useradd test
[root@samba ~]# smbpasswd -a test
New SMB password:
Retype new SMB password:
Added user test.
[root@samba ~]#
启动nmb和smb服务
代码语言:javascript复制systemctl start nmb
systemctl start smb
测试基于Windows实现文件共享
打开控制面板:
点击程序
进入计算机
192.168.44.170(主机ip)samba_share(SAMBA配置文件的标签名)。输入刚创建并加入到SAMBA数据库中的用户名和密密码 。
最后看到之前创建的共享目录里的文件
解决挂载后目录不可写
问题:主要原因在于/samba/share目录没有写入权限。
解决方案:给用户添加写权限,或者用ACL单独给刚刚创建的test用户添加权限。
代码语言:javascript复制setfacl -m u:test:rwx /samba/share
基于Linux或Linux实现文件共享
注意:samb_share
参数是配置文件里标签名,现在LInux上安装SAMBA客户端 。
yum -y install samba-client
smbclient -L 192.168.44.170 -U test
代码语言:javascript复制[root@samba ~]# smbclient -L 192.168.44.170 -U test
Enter SAMBAtest's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
samba_share Disk samba service
IPC$ IPC IPC Service (Samba 4.10.16)
test Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
SAMBA Samba 4.10.16
Workgroup Master
--------- -------
SAMBA SAMBA
[root@samba ~]#
使用smbclient查看目录信息,命令:smbclient //192.168.44.170/samba_share -U test
。
通过help
命令查看命令使用和NFS类似。
smb: > help
? allinfo altname archive backup
blocksize cancel case_sensitive cd chmod
chown close del deltree dir
du echo exit get getfacl
geteas hardlink help history iosize
lcd link lock lowercase ls
l mask md mget mkdir
more mput newer notify open
posix posix_encrypt posix_open posix_mkdir posix_rmdir
posix_unlink posix_whoami print prompt put
pwd q queue quit readlink
rd recurse reget rename reput
rm rmdir showacls setea setmode
scopy stat symlink tar tarmode
timeout translate unlock volume vuid
wdel logon listconnect showconnect tcon
tdis tid utimes logoff ..
!
smb: >
把SAMBA挂载到Linux系统(类似NFS)
先创建一个目录用来挂载:mkdir /temp
,安装cifs:
yum install cifs-utils -y
挂载命令
代码语言:javascript复制mount.cifs -o user=test,pass=123456 //192.168.44.170/samba_share /temp
访问权限
代码语言:javascript复制#控制读写权限
writable = yes/no
readonly = yes/no
#如果资源可写,但只允许某些用户可写,其他都是只读
write list = admin, root, @staff(用户组)
read list = mary, @students
#控制访问对象
valid users = tom,mary,@itcast
invalid users = tom
注意:以上两个选项只能存在其中一个
#网络访问控制
hosts deny = 192.168.0. 拒绝某个网段
hosts allow = 192.168.0.254 允许某个IP
hosts deny = all 拒绝所有
hosts allow = 192.168.0. EXCEPT 192.168.0.254 允许某个网段,但拒绝某个单个IP
注意:deny和allow同时存在,allow优先
FTP、NFS、SAMBA的区别
- ftp 局域网和外网都可以。
- nfs 局域网 挂载方式访问 mount.nfs 侧重于Linux与Linux之间。
- samba 局域网 直接访问(smbclinet)挂载的方式mount.cifs 侧重于Windows与Linux之间。
参考链接:https://blog.csdn.net/qq_33442153/ article/details/125517829 https://blog.csdn.net/ weixin_53946852/article/details/125851113