SAMBA是一个实现不同操作系统之间文件共享和打印机共享的一种SMB协议的免费软件
SMB(Server Message block)协议是window下所使用的文件共享协议,我们在linux系统或者其类unix系统当中可以通过samba服务来实现SMB功能。
SMB协议又称为CIFS(Common Internet File System)协议
SAMBA服务是SMB的一个开源实现,而smb的一些主要功能如下:
1. 在网络上共享目录,决定访问权限。
2. 在网络上共享打印机,决定访问权限。
3. 加入一个windows域环境
4. 通过windows域环境进行认证操作。这个相比于NFS是安全的。NFS缺乏认证机制,在局域网当中没有得到更安全的保障。
从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:
* share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。我在Linux7版本中配置此模式,系统一直报错。
* user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
* server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。
samba拥有两个主服务(相关服务),对于一般使用的服务他只有一个主服务:
1、smbd (提供samba核心功能也是使用最多的一种功能) 提供文件及打印共享服务功能,使用 139、445端口
2、nmbd 提供Netbios(解析协议慢慢的被淘汰)支持,使用137、138端口,而对于这种协议使用较少,现在都是dns进行解析
一般作为文件共享使用samba,则只需要smbd服务
标注:samab服务开启之前需要关闭两个服务,iptables防火墙,selinux服务。
这是为了放行smb的端口。(samba服务需要占用TCP端口139,445 UDP端口 137,138)
/etc/samba/smb.conf #samba服务的主要配置文件
/etc/samba/lmhosts #samba服务的域名设定,主要设置IP地址对应的域名,类似linux系统的/etc/hosts
/var/log/samba #samab服务存放日志文件
/var/lib/samba/private/{passdb.tdb,secrets.tdb} #存放samba的用户账号和密码数据库文档
step1、首先客户端发送一个SMB请求数据报,并列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。如果没有可以使用的协议则返回0XFFFFH,结束通信。
step2、协议确定后,客户端进程向服务器发起一个用户或共享的认证 ,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX应答数据报来允许或拒绝本次连接。
step3、当客户和服务器完成了协商和认证后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应答数据报以表示此次连接是否被接受或拒绝。
step4、连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,read SMB读取一个文件,write SMB写入文件,close SMB关闭文件。
Samba的配置文件为/etc/samba/smb.conf
配置文件分为三个部分:
[global] 定义全局性配置(配置samba服务的相关参数)
[homes] 定义对用户家目录的共享配置(其实在默认情况下不做任何设置,直接启用服务我们就可以通过smb协议访问所有用户的家目录)
[printers] 定义打印机共享配置
1、简单实现public目录的直接访问,无需用户名和口令,类似于share安全等级。但是在Linux version 3.10.0-327.el7.x86_64版本下是无法直接启用share等级的
[root@localhost ~]# vim /etc/samba/smb.conf
123 security = user //此版本share等级会一直提示SMB.daemon启动失败。
124 passdb backend = tdbsam //使用TDB数据库模式
125 map to guest = Bad User
255 load printers = no //关闭分享打印功能
322 [public] //共享的资源名
323 comment = Public Stuff
324 path = /samba //实际Linux上的目录
325 public = yes
326 writable = yes
:wq
[root@localhost ~]# testparm
[root@localhost ~]# chcon -t samba_share_t /samba/ //共享服务器端/samba目录,设置目录上下文
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl restart nmb
本地文件访问 \\192.168.11.128
清除本地连接访问记录 C:\Users\xizai>net use * /del
用户控制:
public = 匿名用户访问,需要下面的指令配合
map to guest = Bad User 匿名访问
browseable = 可浏览
valid users = 有效用户
writable = yes 可写,还要看目录权限
writable list = maomao,@GROUPNAME,+GROUPNAME
readonly = yes 只读设置
create mask = 0744 客户机创建文件权限
directory mask = 0744 客户机创建目录的权限
访问控制
max connections = 最大连接数目
deadtime = 断掉连接时间(分钟,0为不限制
hosts allow = 允许主机
hosts deny = 拒绝主机
要求:
1、通过samba实现公司的文件交换服务器。
2、实现/public 目录让所有人访问,所有人都可以写入文件
[root@localhost ~]# cat /etc/passwd
diven:x:1002:1002::/home/haha:/bin/bash
tom:x:1003:1003::/home/tom:/bin/bash
[root@localhost ~]# smbpasswd -a diven
New SMB password:
Retype new SMB password:
Added user diven.
[root@localhost ~]# smbpasswd -a tom
New SMB password:
Retype new SMB password:
Added user tom.
[root@localhost ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
[root@localhost ~]# vim /etc/samba/smb.conf
[root@localhost ~]# cat /etc/samba/smb.conf
[global]
workgroup = workgroup
security = user
[public]
path=/public
comment =shshaskjhssf
writable = yes
public = yes
[root@localhost ~]# touch /public/toh1
[root@localhost ~]# touch /public/toh2
[root@localhost ~]# chmod o+w /public //给其他用户添加写权限
[root@localhost ~]# systemctl restart smb.service
[root@localhost ~]# systemctl restart nmb.service
1、通过samba提供一个公共文件服务器,所有人都可以访问并写入,但是不可以删除和修改他人的文件。
2、技术部需要一个文件服务器,用于存放常用的软件工具,所有人都可以访问,但是只有技术部可以写入
3、每个人都可以进入自己的独立家目录,别人不可以访问。
[root@localhost ~]# cat /etc/samba/smb.conf
[global]
workgroup = workgroup
security = user
[share]
path = /share
public = yes
comment = file
writable = yes
[soft]
path = /soft
public = no
comment = soft
write list = @Tech
[public]
path = /public
public = yes
comment = file
writable = yes
[home]
browsable = no
writable = yes
[root@localhost share]# mkdir /share
[root@localhost share]# mkdir /soft
条件一:
[root@localhost share]# touch uuu ha1 ha2 xi1 xi2
[root@localhost share]# chown haha:haha ha1
[root@localhost share]# chown haha:haha ha2
[root@localhost share]# chown xixi:xixi xi1
[root@localhost share]# chown xixi:xixi xi2
[root@localhost share]# ll
总用量 0
-rw-r--r--. 1 haha haha 0 8月 17 17:34 ha1
-rw-r--r--. 1 haha haha 0 8月 17 17:34 ha2
-rw-r--r--. 1 root root 0 8月 17 17:34 uuu
-rw-r--r--. 1 xixi xixi 0 8月 17 17:34 xi1
-rw-r--r--. 1 xixi xixi 0 8月 17 17:34 xi2
[root@localhost share]# ll -d
drwxr-xr-x. 2 root root 56 8月 17 17:34 .
[root@localhost share]# chmod o+w . //为满足条件一权限问题:w与t权限成对出现
[root@localhost share]# chmod o+t .
[root@localhost share]# ll -d
drwxr-xrwt. 2 root root 56 8月 17 17:34
在完成条件一之后进行条件二的操作。
条件二:
[root@localhost ~]# cd /soft/
[root@localhost soft]# ll
总用量 0
[root@localhost soft]# touch 1 2 3 4
[root@localhost soft]# ll
总用量 0
-rw-r--r--. 1 root root 0 8月 17 19:07 1
-rw-r--r--. 1 root root 0 8月 17 19:07 2
-rw-r--r--. 1 root root 0 8月 17 19:07 3
-rw-r--r--. 1 root root 0 8月 17 19:07 4
[root@localhost soft]# groupadd Tech
[root@localhost soft]# gpasswd -a haha Tech
正在将用户“haha”加入到“Tech”组中
[root@localhost soft]# chmod 464 *
[root@localhost soft]# ll
总用量 0
-r--rw-r--. 1 root root 0 8月 17 19:07 1
-r--rw-r--. 1 root root 0 8月 17 19:07 2
-r--rw-r--. 1 root root 0 8月 17 19:07 3
-r--rw-r--. 1 root root 0 8月 17 19:07 4
[root@localhost soft]# chown .Tech -R . //修改所属组并递归所有
[root@localhost soft]# ll
总用量 0
-r--rw-r--. 1 root Tech 0 8月 17 19:07 1
-r--rw-r--. 1 root Tech 0 8月 17 19:07 2
-r--rw-r--. 1 root Tech 0 8月 17 19:07 3
-r--rw-r--. 1 root Tech 0 8月 17 19:07 4
[root@localhost soft]# systemctl restart smb
[root@localhost soft]# systemctl restart nmb
[root@localhost soft]# su - haha
上一次登录:五 8月 17 16:29:32 CST 2018pts/2 上
[haha@localhost ~]$ echo fhqiufw > /soft/1
[haha@localhost ~]$ exit
登出
[root@localhost soft]# cat 1
fhqiufw
[root@localhost soft]# su - xixi
[xixi@localhost ~]$ echo fkjwefh > /soft/1
-bash: /soft/1: 权限不够
[xixi@localhost ~]$ exit
登出
linux客户端访问
1.安装软件包,samba-client
[root@localhost soft]# smbclient -L //192.168.11.128 -U haha //列出该用户可以访问的资源
Enter haha's password:
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
Sharename Type Comment
--------- ---- -------
share Disk file
soft Disk soft
public Disk file
IPC$ IPC IPC Service (Samba 4.2.3)
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
Server Comment
--------- -------
LOCALHOST Samba 4.2.3
Workgroup Master
--------- -------
WORKGROUP LOCALHOST
登入samba
[root@localhost soft]# smbclient //192.168.11.128/soft -U haha
Enter haha's password:
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3]
smb: \> ls
. D 0 Fri Aug 17 19:07:31 2018
.. DR 0 Fri Aug 17 15:30:45 2018
1 R 8 Fri Aug 17 19:16:34 2018
2 R 0 Fri Aug 17 19:07:31 2018
3 R 0 Fri Aug 17 19:07:31 2018
4 R 0 Fri Aug 17 19:07:31 2018
20469760 blocks of size 1024. 16745616 blocks available
#挂载使用资源
mount //192.168.171.143/share /share -o username=xixi,password=xixi
#自动挂载
//192.168.142.128/ruanjian /pub cifs defaults,username=xixi,password=xixi 0 0 (通用互联网文件系统)