注:文中截图来自鸟哥linux私房菜

 

一、SAMBA简介

NFS用于在Linux系统主机之间共享文件,CIFS用于在windows系统主机之间共享文件,而SAMBA则实现了Linux系统主机与windows系统主机之间的文件共享。

  就像NFS是基于RPC协议一样,SAMBA是基于NetBIOS(Network Basic Input/Output System)协议上开发的。NetBIOS是用于局域网少数计算机进行网络连接的一个通讯协议,无法跨越路由,SAMBA使用NetBIOS over TCP/IP实现跨路由通讯。

  NetBIOS使用NetBIOS name识别不同的主机,在同一个群组中,每个主机的NetBIOS name必须是唯一的。所以SAMBA提供的文件共享服务主要分为两个步骤:

 1. 通过NetBIOS name定位主机;

 2. 根据权限控制资源读写。

  SAMBA通过两个服务进程支持这两个步骤,分别是:

 1. nmb:管理工作组,负责NetBIOS name解析。主要使用UDP协议,开启137,138端口来负责NetBIOS name解析的任务。

 2. smb:管理SAMBA分享的目录、文件等。主要使用TCP协议,开启139,445端口进行数据传输。(445端口非必要)

  SAMBA有两种联机模式:

 1. peer/peer(Workgroup model,对等模式):各个主机地位平等,都可独立运作。不会出现一部计算机关闭,其他计算机就无法工作的情况。主机之间可同时互为client与server,但用户需要记住所有主机的账号与密码,很麻烦,适合小型网域。

 2. domain model(主控模式):主控计算机(Primary Domain Controller,PDC)统一管理当前网域所有主机与用户的账号与密码。无论登录哪一个主机都需要先到PDC进行账号密码判断与授权。

 

二、SAMBA服务器

1. 安装

yum install samba samba-client samba-common

samba:主要提供了SAMBA服务器所需的各项服务程序,如:smb,nmb等。

samba-client:主要提供了SAMBA客户端所需的工具指令,如:mount.cifs、smbtree等。

samba-common:提供SAMBA服务器与SAMBA客户端公用的数据,如:smb.conf、testparm等。

2. 配置

(1)配置文件

SAMBA的主要配置文件:/etc/samba/smb.conf

主要包含两部分配置:

[global]:全局整体参数配置。

[分享资源名称]:各个共享资源的参数配置。

(2)配置示例

不需要密码的分享配置:

samba技术架构 samba详解_服务器

需要密码的分享配置:

samba技术架构 samba详解_x系统_02

(3)检验配置语法正确性

testparm

samba包含了很多默认设置(不在smb.conf文件中),可使用“-v“项查看全部设置:

testparm -v

3. 启动

systemctl start smb
systemctl start nmb

其中smb使用了端口139和445,但445不是必须的,可在smb.conf配置进行关闭:

smb ports=139

4. SAMBA用户账号与密码管理

  通过SAMBA访问Linux系统上的资源,需要先取得Linux系统上的UID与GID,所以SAMBA的账号应该是Linux系统用户账号的其中一个,但由于Linux系统与SAMBA的密码验证方式及编码格式不同,SAMBA与Linux系统的密码文件并不相同。

(1)添加Linux系统用户账号并设置密码

useradd -G users smb1
passwd smb1

(2)添加samba用户账号

pdbedit -a -u smb1

(3)查看所有samba账号

pdbedit -L

(4)修改samba账号密码

smbpassword smb1

(5)删除samba账号

pdbedit -x -u smb1

注:管理 TDB 数据库格式建议使用 pdbedit 这个新的玩意儿来处理,smbpasswd 仅剩下修改密码的功能需记忆即可!

5. 查看SAMBA的状态

smbstatus

6. 安全

(1)SELinux

SELinux默认关闭了很多SAMBA联机的功能,可使用相应命令进行查看与开启。

#查看samba相关的SELinux规则
getsebool -a | grep samba
#开启samba_enable_home_dirs
setsebool -P samba_enable_home_dirs=1

(2)防火墙

使用iptables进行管理:

samba技术架构 samba详解_samba技术架构_03

由于smb及nmb并不支持TCP Wrappers ,所以也只能通过iptables来控制了。

通过smb.conf设置开放网域:

samba技术架构 samba详解_服务器_04

(3)文件

利用Quota限制用户磁盘使用。

 

三、SAMBA客户端

1. 安装


yum install samba samba-client samba-common

2. 查询SAMBA服务器分享的资源信息

samba技术架构 samba详解_客户端_05

3. 挂载SAMBA服务器分享目录

samba技术架构 samba详解_samba技术架构_06

4. 查看各个SAMBA服务器的所有分享资源

samba技术架构 samba详解_服务器_07

 

四、建议与问题排查

1. 建议(SAMBA服务器)

(1)在规划Linux时,/home最好独立出一个partition,而且硬盘空间最好能够大一些。

(2)/home独立出来的partition可用独立运行quota作业,规范用户的最大磁盘使用量。

2. 问题排查

(1)SAMBA服务器遇到问题,查看用户登录日志

log file=/var/log/samba/log.%m

%m:客户端主机的NetBIOS name

若客户端主机没有NetBIOS name,则登录信息会被记录到/var/log/samba/下的log.smbd或log.nmbd。

(2)权限问题,检查:SAMBA配置的权限、Linux文件系统的权限、SELinux规则。

(3)修改SAMBA密码的时候同步更新对应Linux用户的密码

samba技术架构 samba详解_samba技术架构_08

 

 

参考:

http://cn.linux.vbird.org/linux_server/0370samba.php