文档目的

实现在局域网内的LinuxWindows操作系统之间共享文件

基础知识

 

Samba 当中预设会启动多个端口口,这包括数据传输的 TCP 端口口 (139,445),以及进行 NetBIOS 名称解析之类工作的 UDP 埠口 (137, 138)

常用命令

    

   

 

     

     

   

testparm

语法验证

testparm -v

端口观察

netstat -tlunp | grep mbd

查看与smb有关的端口

smbclient  -L  //127.0.0.1

 

本地验证samba服务

mount -t  cifs  //172.16.34.69/temp  /mnt

挂载共享文件

smbtree

网上邻居显示模式

smbstatus

SAMBA状态查询

nmblookup

NetBIOS名字查询

setsebool -P samba_enable_home_dirs on

允许SELinux对于SMB用户共享家目录的布尔值

semanage fcontext -a -t samba_share_t /data

设置共享目录的SELinux安全上下文

restorecon -Rv /database

使新的安全上下文立即生效

 

涉及软件

smb (服务器端)

cifs-utils (客户端)

配置文件

/etc/samba/smb.conf

这是 Samba 的主要配置文件,基本上,咱们的Samba 就仅有这个配置文件而已,且这个配置文件本身就是很详细的说明文件了,请用 vim 去查阅它吧!主要的设定项目分为服务器的相关设定 (global),如工作组、NetBIOS 名称与密码等级等, 以及分享的目录等相关设定,如实际目录、分享资源名称与权限等等两大部分。

 

/etc/samba/lmhosts

早期的 NetBIOS name 需额外设定,因此需要这个lmhosts NetBIOS name 对应的 IP 檔。 事实上它有点像是 /etc/hosts 的功能!只不过这个 lmhosts 对应的主机名是 NetBIOS name 喔!不要跟/etc/hosts 搞混了!目前 Samba 预设会去使用你的本机名称 (hostname) 作为你的 NetBIOS name,因此这个档案不设定也无所谓。

 

/etc/sysconfig/samba

提供启动 smbd, nmbd 时,你还想要加入的相关服务参数。

 

/etc/samba/smbusers

由于 Windows Linux 在管理员与访客的账号名称不一致,例如: administrator (windows) root(linux), 为了对应这两者之间的账号关系,可使用这个档案来设定

 

/var/lib/samba/private/{passdb.tdb,secrets.tdb}

管理 Samba 的用户账号/密码时,会用到的数据库档案;

 

/usr/share/doc/samba-<版本>

这个目录包含了 SAMBA 的所有相关的技术手册喔!也就是说,当你安装好了 SAMBA 之后,你的系统里面就已经含有相当丰富而完整的 SAMBA 使用手册了!值得高兴吧! ^_^,所以,赶紧自行参考喔!至于常用的脚本文件案方面,若分为服务器与客户端功能,则主要有底下这几个数据:

 

/usr/sbin/{smbd,nmbd}

服务器功能,就是最重要的权限管理 (smbd) 以及 NetBIOS name 查询 (nmbd) 两个重要的服务程序;

 

/usr/bin/{tdbdump,tdbtool}

服务器功能,在 Samba 3.0 以后的版本中,用户的账号与密码参数已经转为使用数据库了!Samba 使用的数据库名称为 TDB(Trivial DataBase)。 既然是使用数据库,当然要使用数据库的控制指令来处理啰。tdbdump 可以察看数据库的内容,tdbtool 则可以进入数据库操作接口直接手动修改帐密参数。不过,你得要安装 tdb-tools 这个软件才行;

 

/usr/bin/smbstatus

服务器功能,可以列出目前 Samba 的联机状况, 包括每一条 Samba 联机的 PID, 分享的资源,使用的用户来源等等,让你轻松管理 Samba 啦;

 

/usr/bin/{smbpasswd,pdbedit}

服务器功能,在管理 Samba 的用户账号密码时, 早期是使用 smbpasswd 这个指令,不过因为后来使用 TDB 数据库了,因此建议使用新的 pdbedit 指令来管理用户数据;

 

/usr/bin/testparm

服务器功能,这个指令主要在检验配置文件 smb.conf的语法正确与否,当你编辑过 smb.conf 时,请务必使用这个指令来检查一次,避免因为打字错误引起的困扰啊!

 

 

/sbin/mount.cifs

客户端功能,在 Windows 上面我们可以设定『网络驱动器机』来连接到自己的主机上面。在 Linux 上面,我们则是透过 mount(mount.cifs) 来将远程主机分享的档案与目录挂载到自己的 Linux 主机上面哪!

 

/usr/bin/smbclient

客户端功能,当你的 Linux 主机想要藉由『网络上的芳邻』的功能来查看别台计算机所分享出来的目录与装置时,就可以使用smbclient 来查看啦!这个指令也可以使用在自己的 SAMBA 主机上面,用来查看是否设定成功哩!

 

/usr/bin/nmblookup

客户端功能,有点类似 nslookup 啦!重点在查出NetBIOS name 就是了。

 

/usr/bin/smbtree

客户端功能,这玩意就有点像 Windows 系统的网络上的芳邻显示的结果,可以显示类似『靠近我的计算机』之类的数据, 能够查到工作组与计算机名称的树状目录分布图!

系统环境

samba服务器Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) )

 

Linux客户端:Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) )

 

Windows客户端Windows Server 2012 R2 Standard

 

 

 

操作步骤

1. 安装服务程序

yum install samba

 

 

2. 创建共享文件

首先先创建或指定一个共享文件

mkdir  /database

 

然后修改配置文件,在文件最后添加共享文件信息

vim  /etc/samba/smb.conf

 

[database]

comment = This is a shared file created by me

path = /database

public = no

writable = yes

 

wKiom1gLZLyAcI4HAAAMUcZgTlg523.png

注:在该配置文件(/etc/samba/smb.conf)中需要验证是否为user验证模式


wKioL1gLZPCB8f_oAAAGDc-NIjk966.png


3. 创建用户

创建SMB服务独立的账号

useradd smbuser

 

由于SMB服务配置文件中的密码数据库后台类型为“tdbsam”,所以这个账户需要用pdbedit命令来创建SMB密码

 

pdbedit -a -u smbuser

 

4.防火墙与SELinux设置

 

 

为了使客户机能正常访问,需要关闭samba服务使用的端口的防火墙(否则无法访问samba服务器),并修改SELinux规则(否则无法访问共享的文件夹)

 

需要关闭的端口号是139/tcp,445/tcp, 执行以下语句:

firewall-cmd --zone=public --add-port=139/tcp --permanent

firewall-cmd --zone=public --add-port=445/tcp --permanent

firewall-cmd --reload

 

允许SELinux规则,执行以下语句:

chown -Rf smbuser:smbuser /database

 

允许SELinux对于SMB用户共享家目录的布尔值

setsebool -P samba_enable_home_dirs on      

 

设置共享目录的SELinux安全上下文

semanage fcontext -a -t samba_share_t /database

注:若semanage找不到命令,请安装SELinux管理工具 yum -y install policycoreutils-python

 

让安全上下文立即生效

restorecon -Rv /database

 

5.开启SAMBA服务

systemctl start smb

 

 

6.客户端登入

Linux

 

安装客户端软件包

yum  install -y cifs-utils

wKiom1gLZX2jIS7MAAAJh-HPew8961.png


创建挂载目录

mkdir /database


wKiom1gLZZ7BjMeoAAAEjWJkM5I027.png


root家目录下创建认证文件

cd /root

vim auth.smb

 

username=smbuser

password=*******

domain=MYGROUP


wKiom1gLZbqT9KPVAABfO4Szwn0467.png


这个文件很重要,权限应该小一点:

 

chmod -Rf 600 /root/auth.smb


wKioL1gLZeiwirTTAAAF1qL4xF8736.png


配置挂载信息(语法依次为远程共享信息、本地挂载目录、文件系统类型、认证文件以及开机自检选项)

 

vim /etc/fstab

 

//172.16.34.69/database  /database  cifs  credentials=/root/auth.smb  0  0

 


wKiom1gLZgPB0XjzAAA1In51UVE762.png


挂载fstab中定义的文件信息

 

mount -a

 

成功挂载,验证结果


wKioL1gLZhzi-MROAAAgcGKmk5M114.png


常见问题

问题一:Windows无法访问\\172.16.34.69\database

解决方法:得到以上错误,原因基本上来自防火墙和SELinux,上文第4步中有详细的防火墙与SELinux设置。

 

参考文献

http://www.linuxprobe.com/chapter-12.html