samba是在linux和unix系统上实现smb协议的一个免费软件,基于c/s架构。smb(server messages block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。smb协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“netbios over tcp/ip”使得samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
一、samab基本概念
共享文件和打印,实现在线编辑
实现登录smb用户的身份认证
可以进行netbios名称解析
外围设备共享
netbios(network basic input/output system)协议是由ibm公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(api),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用wins服务、广播及lmhost文件等多种模式将netbios名-——特指基于netbios协议获得计算机名称——解析为相应ip地址,实现信息通讯,所以在局域网内部使用netbios协议可以方便地实现消息通信及资源的共享。
占用系统资源少
传输效率高
cifs 是一个新提出的协议,它使程序可以访问远程internet计算机上的文件并要求此计算机提供服务。cifs 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。cifs是公共的或开放的smb协议版本,并由microsoft使用。smb协议在局域网上用于服务器文件访问和打印的协议。像smb协议一样,cifs在高层运行,而不像tcp/ip协议那样运行在底层。cifs可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
访问服务器本地文件并读写这些文件
与其他用户一起共享一些文件
在短线时自动回复与网络的连接
使用统一码文件名
smb(全称是server message block)是一个协议名,它能被用于web连接和客户端与服务器之间的信息沟通。smb最初是ibm的贝瑞·费根鲍姆(barry feigenbaum)研制的,其目的是将dos操作系统中的本地文件接口“中断13”改造为网络文件系统。
samba
提供smb服务
samba-client
提供客户端工具
samba-common
通用软件
cifs-utils
smb客户端工具
samba-winbind
和ad相关的包
sbm.conf继承了.ini(initialization)文件格式,用[]分成不同的部分。
配置文件分为类
[global]:服务器通过或全局设置的部分
[homes]:用户的家目录共享
[printers]:定义打印机资源和服务
[sharename]:自定义共享目录配置
配置文件宏定义
%m
客户端主机的netbios名
客户端的fqdn
%h
当前用户家目录路径
%u
当前用户用户名
%g
当前用户所属组
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
格式:
-i
指定服务器的ip地址;
-l
显示服务器端所分享出来的所有资源;
-n
指定用户端所要使用的netbios名称;
不用询问密码;
-p
指定服务器端tcp连接端口编号;
-t
备份服务器端分享的全部文件,并打包成tar格式的文件;
-u<用户名称>
指定用户名称;
-w<工作群组>
指定工作群组名称。
-a
向smbpasswd文件中添加用户;
-c
指定samba的配置文件;
-x
从smbpasswd文件中删除用户;
-d
在smbpasswd文件中禁用指定的用户;
-e
在smbpasswd文件中激活指定的用户;
将指定的用户的密码置空。
密码文件存在在<code>/var/lib/samba/private/passdb.tdb</code>
-a username
新建samba账户。
-x username
删除samba账户。
列出samba用户列表,读取`/var/lib/samba/private/passdb.tdb数据库文件。
-lv
列出samba用户列表的详细信息。
-c “[d]” –u username
暂停该samba用户的账号。
-c “[]” –u username
恢复该samba用户的账号。
二、实现共享
在windows系统上创建一个共享目录
选中目录-->右击点属性-->共享
点击图中的用户可以设置权限
在linux客户端查看
<code>[root@localhost ~]# smbclient -l 192.168.4.1 -u joah%password</code>
<code>[root@localhost ~]# smbclient //192.168.4.1/linuxclient -u joah</code>
挂载此目录
[root@localhost ~]# mount //192.168.4.1/linuxclient -o username=joah,password=password /mnt/samba/
创建smb账号
<code>[root@localhost ~]# useradd -r smb1</code><code>[root@localhost ~]# useradd -r smb2</code><code>[root@localhost ~]# useradd -r smb2</code>
设置smb账号密码
<code>[root@localhost ~]# smbpasswd -a smb1</code><code>[root@localhost ~]# smbpasswd -a smb2</code><code>[root@localhost ~]# smbpasswd -a smb3</code>
使用命令查看
<code>[root@localhost ~]# pdbedit -l</code>
创建共享目录
<code>[root@localhost ~]# vim /etc/samba/smb.conf</code>
弹出对话框输入上述账户和密码即可登录
<code>[root@localhost ~]# mkdir /app/share{1,2,3}</code><code>[root@localhost ~]# chmod 777 /app/share{1,2,3}</code>并设置目录权限
<code>[root@localhost ~]# vim /etc/samba/smb.conf</code>在全部设置下添加如下一行内容
<code>[root@localhost ~]# mkdir /etc/samba/conf.d</code>#创建指定配置文件存放位置
<code>[root@localhost conf.d]# vim smb1</code>
<code>[root@localhost conf.d]# vim smb2</code>
<code>[root@localhost conf.d]# vim smb3</code>
<code>[root@localhost conf.d]# service nmb restart ;service smb restart</code>
在另一外linux主机上测试
<code>[root@localhost ~]# smbclient -l //192.168.4.55 -u smb1%123456</code>
<code>[root@localhost ~]# smbclient //192.168.4.55/share -u smb1%magedu</code>
<code>[root@localhost smb]# mount //192.168.4.55/share /mnt/smb/ -o username=smb1,password=123456</code>
<code>[root@localhost smb]# vim /etc/fstab</code>
如果我们这样挂载的话,密码直接暴露出来,显然不安装,我们可以将用户和密码写到一个配置文件中
<code>[root@localhost smb]# vim /etc/samba/userpasswd</code>
<code>[root@localhost ~]# chmod 600 /etc/samba/userpasswd</code>#修改文件权限
<code>[root@localhost ~]# vim /etc/fstab</code>
<code>[root@localhost ~]# mount -a</code>#使挂载生效
<code>[root@localhost ~]# df</code>
<code>[root@localhost ~]# mkdir /app/sharedir</code><code>[root@localhost ~]# chmod 777 /app/sharedir</code>
注意:客户端与服务器端必须有相同的用户。
<code>[root@localhost ~]# useradd smb1</code>
<code>[root@localhost ~]# useradd smb2</code>
<code>[root@localhost ~]# useradd smb3</code>
<code>[root@localhost ~]# vim /etc/samba/userpasswd</code>
<code>[root@localhost/mnt/smb]#su - smb1</code><code>[smb1@localhost~]$cifscreds add 192.168.4.55</code>
<code>[smb1@localhost~]$ls /mnt/smb/</code>
至此就实现了多用户挂载smb文件。