SAMBA

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

1、SAMAB基本概念

一、SMB的基本功能

  • 共享文件和打印,实如今线编辑ios

  • 实现登陆SMB用户的身份认证数据库

  • 能够进行NetBIOS名称解析编程

  • 外围设备共享vim

二、SAMAB服务基于协议

(1)、NetBIOS协议

NETBIOS(Network Basic Input/Output System)协议是由IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,做用是为了给局域网提供网络以及其余特殊功能。系统能够利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议得到计算机名称——解析为相应IP地址,实现信息通信,因此在局域网内部使用NetBIOS协议能够方便地实现消息通讯及资源的共享。windows

NetBIOS特色

  • 占用系统资源少服务器

  • 传输效率高网络

(2)CIFS协议

CIFS 是一个新提出的协议,它使程序能够访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器得到请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议在局域网上用于服务器文件访问和打印的协议。像SMB协议同样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS能够看作是应用程序协议如文件传输协议和超文本传输协议的一个实现。架构

CIFS协议功能

  • 访问服务器本地文件并读写这些文件app

  • 与其余用户一块儿共享一些文件

  • 在短线时自动回复与网络的链接

  • 使用统一码文件名

(3)smb协议

SMB(全称是Server Message Block)是一个协议名,它能被用于Web链接和客户端与服务器之间的信息沟通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操做系统中的本地文件接口“中断13”改造为网络文件系统。

三、SAMBA服务文件介绍

(1)samba相关包介绍

samba 提供smb服务
samba-client 提供客户端工具
samba-common 通用软件
cifs-utils smb客户端工具
samba-winbind 和AD相关的包

(2)主配置文件/etc/samba/smb.conf

sbm.conf继承了.ini(initialization)文件格式,用[]分红不一样的部分。

配置文件分为类

  • [global]:服务器经过或全局设置的部分

  • [homes]:用户的家目录共享

  • [printers]:定义打印机资源和服务

  • [SHARENAME]:自定义共享目录配置

配置文件宏定义

%m 客户端主机的NetBIOS名
%M 客户端的FQDN
%H 当前用户家目录路径
%U 当前用户用户名
%g 当前用户所属组
%h samba服务器的主机名
%L samba服务器的NetBIOS
%I 客户端主机的IP
%T 当前日期和时间
%S 可登陆的用户名

配置文件选项

workgroup 指定工做组名称
server string 主机注释信息
netbios name 指定NetBIOS名
interface 指定服务监听的接口和IP
host allow 指定容许指定主机访问,如多个主机能够网段,离散可使用“,”、空格或tab分离;或使用主机名;默容许全部主机访问。示例192.168.4.
config file=/PAHT/TO/SOMEFIEL/%U 用户独立的配置文件
log file=/var/log/samba/log.%m 不一样主机采用不一样日志
max log size 日志文件大小,单位为KB
log level 设置日志级别
comment 注释信息
path 所共享的目录路径
public = {yes或no} 可否被guest访问的共享,默认为no
guest ok = {yes或no} 是否容许来宾帐号访问
writable = {yes或no} 是否可读写
read only = {yes或no} 是否只读,若是与writeable设置冲突,放在后面的设置生效
write list 指定多个用户是否可写,格式:@GROUP_NAME、+GROUP_NAME或使用“,”分隔,如设置writable = no 列表中的用户或组可读写,不在列表中的用户只读
vaild users 特定用户才能访问此共享,若是设置为空,将容许全部用户;用户名之间使用空格分隔
browsable = {yes或no} 是否容许全部用户列浏览此共享,默认为yes
create mask 修改上传权限


注意:若是是某个用户对目录有权限,此用户必须有目录权限和共享权限的交集。

服务脚本: /etc/rc.d/init.d/nmb /etc/rc.d/init.d/smb

四、管理命令

(1)testparm:检查smb.conf文件是否正确

格式:

testparm [-s] {config filename} [hostname hostIP]

(2)smbclient 链接SMB/CIFS资源的命令

-I 指定服务器的IP地址;
-L 显示服务器端所分享出来的全部资源;
-n 指定用户端所要使用的NetBIOS名称;
-N 不用询问密码;
-p 指定服务器端TCP链接端口编号;
-T 备份服务器端分享的所有文件,并打包成tar格式的文件;
-U<用户名称> 指定用户名称;
-w<工做群组> 指定工做群组名称。

(3)mount.cifs依赖于 cifs-utils包;挂载工具

(4)smbpasswd 设置smb用户密码

-a 向smbpasswd文件中添加用户;
-c 指定samba的配置文件;
-x 从smbpasswd文件中删除用户;
-d 在smbpasswd文件中禁用指定的用户;
-e 在smbpasswd文件中激活指定的用户;
-n 将指定的用户的密码置空。

密码文件存在在/var/lib/samba/private/passdb.tdb

(5)pdbedit

-a username 新建Samba帐户。
-x username 删除Samba帐户。
-L 列出Samba用户列表,读取`/var/lib/samba/private/passdb.tdb数据库文件。
-Lv 列出Samba用户列表的详细信息。
-c “[D]” –u username 暂停该Samba用户的帐号。
-c “[]” –u username 恢复该Samba用户的帐号。

(6)cifscreds 管理NTLM在内核密钥环中

add:把指定用户的用户名和密码加入内核密钥环

2、实现共享

(1)实现linux为客户端,windows为服务器端共享

在windows系统上建立一个共享目录

选中目录-->右击点属性-->共享

2017-10-18_104753.jpg

点击图中的用户能够设置权限

在linux客户端查看

[root@localhost ~]# smbclient -L 192.168.4.1 -U joah%PASSWORD

2017-10-18_105307.jpg

[root@localhost ~]# smbclient //192.168.4.1/linuxclient -U joah

2017-10-18_105624.jpg

挂载此目录

[root@localhost ~]# mount //192.168.4.1/linuxclient -o username=joah,password=PASSWORD /mnt/samba/

(2)实现linux做服务器端,windows做客户端共享文件

建立smb帐号

[root@localhost ~]# useradd -r smb1[root@localhost ~]# useradd -r smb2[root@localhost ~]# useradd -r smb2

设置smb帐号密码

[root@localhost ~]# smbpasswd -a smb1[root@localhost ~]# smbpasswd -a smb2[root@localhost ~]# smbpasswd -a smb3

使用命令查看

[root@localhost ~]# pdbedit -L

smb1:496:
smb3:494:
smb2:495:

建立共享目录

[root@localhost ~]# vim /etc/samba/smb.conf

[sharewin]
        comment = linux share
        path = /app/smbshare

2017-10-18_112436.jpg

弹出对话框输入上述帐户和密码便可登陆

(3)linux中实现不一样用户权限访问共享目录

建立共享目录

[root@localhost ~]# mkdir /app/share{1,2,3}[root@localhost ~]# chmod 777 /app/share{1,2,3}并设置目录权限

编辑配置文件

[root@localhost ~]# vim /etc/samba/smb.conf在所有设置下添加以下一行内容

    config file = /etc/samba/conf.d/%U

建立每一个用户的配置文件

[root@localhost ~]# mkdir /etc/samba/conf.d#建立指定配置文件存放位置

[root@localhost conf.d]# vim smb1

[share]
comment = share1
path = /app/share1
writeable = yes

[root@localhost conf.d]# vim smb2

[share]
comment = share2
path = /app/share2

[root@localhost conf.d]# vim smb3

[share]
comment = share3
path = /app/share3

重启服务测试

[root@localhost conf.d]# service nmb restart ;service smb restart

在另外一外linux主机上测试

[root@localhost ~]# smbclient -L //192.168.4.55 -U smb1%123456

[root@localhost ~]# smbclient //192.168.4.55/share -U smb1%magedu

挂载共享目录在本地

[root@localhost smb]# mount //192.168.4.55/share /mnt/smb/ -o username=smb1,password=123456

实现开机自动挂载

[root@localhost smb]# vim /etc/fstab

//192.168.4.55/share    /mnt/smb                cifs    username=smb1,password=magedu   0 0

若是咱们这样挂载的话,密码直接暴露出来,显然不安装,咱们能够将用户和密码写到一个配置文件中

[root@localhost smb]# vim /etc/samba/userpasswd

username=smb1
password=123456

[root@localhost ~]# chmod 600 /etc/samba/userpasswd#修改文件权限

[root@localhost ~]# vim /etc/fstab

//192.168.4.55/share    /mnt/smb                cifs    credentials=/etc/samba/userpasswd       0 0

[root@localhost ~]# mount -a#使挂载生效

[root@localhost ~]# df

Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/sda2             50264772 1632864  46071908   4% /
tmpfs                   502056       0    502056   0% /dev/shm
/dev/sda3             50264772   89224  47615548   1% /app
/dev/sda1               487652   35604    426448   8% /boot
/dev/sr0               3878870 3878870         0 100% /media/cdrom
//192.168.4.55/share  50264772   53092  47651680   1% /mnt/smb  #挂载成功

(4)实现多用户挂载(CentOS 7中能够启用这种方法)

修改配置文件

[root@localhost ~]# vim /etc/samba/smb.conf

[share]
        comment = sharedirectory
        path = /app/sharedir
        write list = smb1   #设置只有smb1用户具备写权限

建立共享目录并赋予权限

[root@localhost ~]# mkdir /app/sharedir[root@localhost ~]# chmod 777 /app/sharedir

在客户端建立与服务器端相同的帐号

注意:客户端与服务器端必须有相同的用户。

[root@localhost ~]# useradd smb1

[root@localhost ~]# useradd smb2

[root@localhost ~]# useradd smb3

使用smb3用户挂载目录

[root@localhost ~]# vim /etc/samba/userpasswd

username=smb3
password=123456

修改/etc/fstab文件

[root@localhost ~]# vim /etc/fstab

//192.168.4.55/share    /mnt/smb                cifs    multiuser,credentials=/etc/samba/userpasswd     0 0
//192.168.4.55/share    /mnt/smb                cifs    credentials=/etc/samba/userpasswd,multiuser     0 0
credentials:用于指定包含挂载用户信息文件
multiuser:用于指定使用多用户挂载

[root@localhost ~]# mount -a#使挂载生效

测试是否能够切换到smb1有写权限

[root@localhost/mnt/smb]#su - smb1[smb1@localhost~]$cifscreds add 192.168.4.55

Password:

[smb1@localhost~]$ls /mnt/smb/

anaconda-ks.cfg  xx

至此就实现了多用户挂载smb文件。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息