SAMBA服务

SAMBA简介

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

简单来说就是实现了linux与windows机器之间的资源互享

SAMBA包简介

  • samba:提供samba服务
  • samba-client:客户端包
  • samba-common:提供samba配置文件等

samba提供了两个功能,一个是smb,也就是samba核心的服务功能,提供服务器端和客户端之间的对话。监听在139以及445端口上。 一个是nmb服务,提供netbios服务,主要用来名字解析功能。windows可以通过netbios将名字解析成ip地址。监听在137138端口上。如果netbios没有启动,将会通过ip地址定位机器

samba使用

安装samba包

服务端

[root@localhost ~]# yum install -y samba 

客户端

[root@localhost ~]# yum install -y samba-client

查看共享

[root@localhost ~]# smbclinet -L 192.168.1.142
bash: smbclinet: 未找到命令...
相似命令是: 'smbclient'
[root@localhost ~]# smbclient -L 192.168.1.142
Enter SAMBA\root's password: 

	Sharename       Type      Comment
	---------       ----      -------
	ADMIN$          Disk      远程管理
	C$              Disk      默认共享
	D$              Disk      默认共享
	E$              Disk      默认共享
	F$              Disk      默认共享
	IPC$            IPC       远程 IPC
	Users           Disk      
	截图          Disk      
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 192.168.1.142 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Failed to connect with SMB1 -- no workgroup available

# $号表示在windows端隐藏共享,不显示。

samba配置

samba的配置在etc下。常用设置如下

[root@localhost ~]# cat /etc/samba/smb.conf
[global]
	workgroup = SAMBA   # 工作组
	security = user    # samba认证方式,使用user即可,默认选项,使用smb用户
;       netbios name = MYSERVER   #如果需要用名字netbios功能,需要取消注释这项
;       interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24  #允许通过哪些地址访问
;       hosts allow = 127. 192.168.12. 192.168.13.  #允许哪些地址来访问
 	log file = /var/log/samba/log.%I        #定义日志文件位置
	log level = 2                           #日志记录级别。  两项同时设置才能穷用日志功能   
	max log size=50        #日志文件大小,到指定的大小之后覆盖写入
	passdb backend = tdbsam  #数据库格式

	printing = cups
	printcap name = cups
	load printers = yes
	cups options = raw


#共享配置
;       [public]
;       comment = Public Stuff   描述信息
;       path = /home/samba       共享目录
;       public = yes			是否被guest访问的共享,默认no,和guest ok 类似
;       writable = no           是否有写权限
;		read only=no     和writeable=yes一样的效果
;       printable = no
;       write list = +staff     拥有写权限的列表
;		valid users     特定用户才能访问


[homes] 用户的家目录共享  如果不想访问到用户的家目录,可以注释掉
[printers] 定义打印机资源和服务
[sharename] 自定义的共享目录配置

示例

1)服务器端创建文件共享

[root@localhost data]# cat /etc/samba/smb.conf
[ydong]
	comment = Ydong Share
	path = /data/ydong
	writeable = yes

2)如果想访问samba服务,需要samba自己创建的用户
samba用户必须是linux存在的用户。

[root@localhost ~]# getent passwd smb{1,2,3}
smb1:x:2003:2003::/home/smb1:/bin/bash
smb2:x:2004:2004::/home/smb2:/bin/bash
smb3:x:2005:2005::/home/smb3:/bin/bash

[root@localhost ~]# smbpasswd -a smb1
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
No builtin backend found, trying to load plugin
New SMB password:
Retype new SMB password:
Added user smb1.
添加三个用户,都使用smbpasswd

3)查看samba用户

[root@localhost ~]# pdbedit -L
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
No builtin backend found, trying to load plugin
smb2:2004:
smb1:2003:
smb3:2005:


删除的话使用smbpasswd  -x smb1

4)重新服务端服务,在windows上访问
默认访问用户家目录。
SAMBA服务_第1张图片

5)linux端访问共享

[root@localhost ~]# smbclient -L 192.168.43.166 -U smb1
Enter SAMBA\smb1's password: 

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	ydong           Disk      Ydong Share
	IPC$            IPC       IPC Service (Samba 4.9.1)
	smb1            Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

	Server               Comment
	---------            -------

	Workgroup            Master
	---------            -------

6)进入共享文件进行操作
如果要进行操作的话,需要对权限进行设置,默认的话其他用户没有写权限

[root@localhost ~]# ll -d /data/ydong
drwxr-xr-x 2 root root 24 3月  21 17:10 /data/ydong
[root@localhost ~]# ll -d /data/ydong
drwxrwxrwx 2 root root 24 3月  21 17:10 /data/ydong

linux端进行文件操作

[root@localhost ~]# smbclient //192.168.43.166/ydong -U smb1 
Enter SAMBA\smb1's password: 
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Mon Mar 23 02:59:04 2020
  ..                                  D        0  Sat Mar 21 17:10:33 2020
  ydong.home                          N       11  Sat Mar 21 17:10:54 2020
  f1.txt                              A        0  Mon Mar 23 02:59:02 2020

		20961280 blocks of size 1024. 20895480 blocks available
smb: \> put anaconda-ks.cfg 
putting file anaconda-ks.cfg as \anaconda-ks.cfg (33.6 kb/s) (average 33.6 kb/s)

SAMBA服务_第2张图片

7)基于用户访问控制

[root@localhost ~]# cat /etc/samba/smb.conf
	valid user = @staff	  # @,+都可以表示组内的用户可以访问
#	valid user = username #显式指定某个用户可以访问
	browseable = no  # 是否允许所有用户浏览,默认为yes

[root@localhost ~]# usermod -aG staff smb1
[root@localhost ~]# usermod -aG staff smb2

这样只能smb1和smb2访问

SAMBA服务_第3张图片

针对不同的用户共享不同的目录和权限

同FTP虚拟用户一样,可以单独的为每个用户设置不同的权限。samba也一样

1)在smb.conf中添加一个选项

config file = /etc/samba/conf.d/%U
# 指明放指令的地方,%U是当前用户的用户名,也就是同用户名一样的文件

2)在/etc/samba/conf.d/创建同用户名的文件

[root@localhost ~]# mkdir /etc/samba/conf.d

[root@localhost ~]# cat /etc/samba/conf.d/smb1
[smb1]
	comment = smb1 share
	path = /data/smb1
	writeable = no

[root@localhost ~]# cat /etc/samba/conf.d/smb2
[smb2]
	comment = smb2
	path = /data/smb2
	writeable = yes


[ydong]
	comment = Ydong Share
	path = /data/ydong
	writeable = yes

#smb1 smb2访问就只显示/data/smb1和/data/smb2  smb3访问ydong

3)测试
smb1
SAMBA服务_第4张图片
SAMBA服务_第5张图片

smb2
SAMBA服务_第6张图片
SAMBA服务_第7张图片

smb3
SAMBA服务_第8张图片
SAMBA服务_第9张图片

你可能感兴趣的:(老王视频之记录,linux)