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服务器实际上包含了两个服务器程序:smbd和nmbd。
Samba还包含了一些实用工具。Smbclient是一个SMB客户工具,有shell-based用户界面并同FTP有些类似。应用它可以复制其它的SMB服务器资源,还可以访问其它SMB服务器提供的打印机资源。
yum -y install samba -y
查看相关软件包
[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 ~]#
通过命令: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/share,客户端使用user01/123通过windows或者Linux可以在该目录里创建文件删除文件。
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"
关闭防火墙
systemctl stop firewalld
#开机不自启
systemctl disable firewalld
关闭SELinux:
setenforce 0
#开机不自启
vim /etc/selinux/config`
SELINUX=disabled
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]#
vim /etc/samba/smb.conf
[samba_share] 共享名称
comment = samba service 描述
path = /samba/share 本地的共享目录
guest ok = no 需要帐号和密码访问
writable = yes 可读可写
或者可以修改成:因为 guest ok = no 等价于 public = no。
[samba_share]
path = /samba/share
public = no
writable = yes
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代表不限制。
security = user
#设置用户访问SambaServer的验证方式,一共有四种验证方式。
passdb backend = tdbsam
#passdbbackend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
pdbedit命令的参数很多,我们列出几个主要的。
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用户的账号。
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
[root@samba ~]# useradd test
[root@samba ~]# smbpasswd -a test
New SMB password:
Retype new SMB password:
Added user test.
[root@samba ~]#
systemctl start nmb
systemctl start smb
打开控制面板:
点击程序
进入计算机
192.168.44.170(主机ip)samba_share(SAMBA配置文件的标签名)。输入刚创建并加入到SAMBA数据库中的用户名和密密码 。
最后看到之前创建的共享目录里的文件
问题:主要原因在于/samba/share目录没有写入权限。
解决方案:给用户添加写权限,或者用ACL单独给刚刚创建的test用户添加权限。
setfacl -m u:test:rwx /samba/share
注意:samb_share
参数是配置文件里标签名,现在LInux上安装SAMBA客户端 。
yum -y install samba-client
smbclient -L 192.168.44.170 -U test
[root@samba ~]# smbclient -L 192.168.44.170 -U test
Enter SAMBA\test'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: \>
先创建一个目录用来挂载:mkdir /temp
,安装cifs:
yum install cifs-utils -y
挂载命令
mount.cifs -o user=test,pass=123456 //192.168.44.170/samba_share /temp
访问权限
#控制读写权限
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优先
参考链接:https://blog.csdn.net/qq_33442153/ article/details/125517829 https://blog.csdn.net/ weixin_53946852/article/details/125851113