Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,基于C/S架构。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
一、SAMAB基本概念
1、SMB的基本功能
共享文件和打印,实现在线编辑
实现登录SMB用户的身份认证
可以进行NetBIOS名称解析
外围设备共享
2、SAMAB服务基于协议
(1)、NetBIOS协议
NETBIOS(Network Basic Input/Output System)协议是由IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议获得计算机名称——解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享。
NetBIOS特点
占用系统资源少
传输效率高
(2)CIFS协议
CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议在局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
CIFS协议功能
访问服务器本地文件并读写这些文件
与其他用户一起共享一些文件
在短线时自动回复与网络的连接
使用统一码文件名
(3)smb协议
SMB(全称是Server Message Block)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。
3、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
4、管理命令
(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:把指定用户的用户名和密码加入内核密钥环
二、实现共享
(1)实现linux为客户端,windows为服务器端共享
在windows系统上创建一个共享目录
选中目录-->右击点属性-->共享
点击图中的用户可以设置权限
在linux客户端查看
[root@localhost ~]# smbclient -L 192.168.4.1 -U joah%PASSWORD
[root@localhost ~]# smbclient //192.168.4.1/linuxclient -U joah
挂载此目录
[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
弹出对话框输入上述账户和密码即可登录
(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文件。
转载于:https://blog.51cto.com/merit/1973784