用Samba搭建企业文件共享服务

前言

为了tomcat集群部署的时,上传的文件不需要其他操作就可以集中管理,我们通过网络共享硬盘的方式来做,技术有NFS、Samba。用samba是考虑到可以和Windows系统进行文件共享、还有自身提供了安全认证方式。网络共享硬盘适合20-200台机器的小型项目用。

简介

Samba 是 SMB/CIFS 网络协议的重新实现, 它作为 NFS 的补充使得在 Linux 和 Windows 系统中进行文件共享、打印机共享更容易实现。

环境准备

序号 系统 ip 备注
A Centos 6.4 192.168.1.100 Samba服务器
B Centos 6.4 192.168.1.101 挂载机器
C Windows 10 192.168.1.102 挂载机器

安装

在A服务器上安装Samba,安装方式有rpm、源码包、yum,此处采用yum方式安装

1
# yum install samba

配置

服务启动
1
# service smb start
设置开机启动项
1
# chkconfig smb on
配置Samba

Smb服务的配置文件为/etc/samba/smb.conf,首先备份此配置文件,然后开始修改配置

网络相关配置
1
2
3
4
5
workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = TEST_SMB_SERVER
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
hosts allow = 127. 192.168.1.

workgroup = Samba Server 所要加入的工作组或者域
server string = Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号
netbios name = Samba Server的NetBIOS名称
interfaces = Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址
hosts allow = 表示允许连接到Samba Server的客户端,多个参数以空格隔开

日志配置
1
2
3
4
log file = /var/log/samba/log.%m
# max 50KB per log file, then rotate
max log size = 50

log file = 日志文件位置,在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。

maxlog size = 设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。

安全配置
1
2
security = user
passdb backend = tdbsam

security = 设置用户访问Samba Server的验证方式,一共有四种验证方式。

  1. share:用户访问SambaServer不需要提供用户名和口令, 安全性能较低。
  2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
  3. server:依靠其他WindowsNT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
  4. domain:域安全级别,使用主域控制器(PDC)来完成认证。

passdbbackend = passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。

  1. smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实
    用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
  2. tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
    pdbedit –a username:新建Samba账户。
    pdbedit –x username:删除Samba账户。
    pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
    pdbedit –Lv:列出Samba用户列表的详细信息。
    pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
    pdbedit –c “[]” –u username:恢复该Samba用户的账号。
  3. ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
共享设置
1
2
3
4
5
6
[test]
comment = test share files
path = /opt/lar/files
browseable = no
writable = yes
valid users = @root

comment = comment是对该共享的描述,可以是任意字符串。
path = 共享目录路径
browseable = browseable用来指定该共享是否(yes/no)可以浏览。
writable = 用来指定该共享路径是否(yes/no)可写。
valid users = 用来指定允许访问该共享资源的用户。

例如:valid users = bobyuan,@bob,@tech (多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)

配置文件正确性检查
1
# testparm -v
重启服务
1
2
# service smb restart

测试

先在C服务上测试

  1. 在File Explorer 中输入\192.168.1.100\test 回车
  2. 输入共享文件服务的用户名密码,即可看到是否成功

B服务器上测试

  1. 首先要安装Smbclient

    1
    2
    # yum install samba-client

  2. 访问文件服务器

    1
    2
    3
    # smbclient //192.168.1.100/test -U root 
    Password:
    smb: \>

输入密码后出现最后一行说明成功了

挂载

C服务器挂载

  1. 打开This pc -> Computer -> Map Network Drive
  2. 输入\192.168.1.100\test 点击确定
  3. 输入用户名密码

B服务器挂载

  1. 安装cifs-utils

    1
    # yum install cifs-utils
  2. 直接手动挂载

    1
    # mount -t cifs -o username=<username>,password=<password> //192.168.1.100/test /mnt/dir
  3. 写到/etc/fstab文件自动挂载

    1
    //192.168.1.100/test /mnt/dir cifs defaults,credentials=/etc/samba/pwd 0 0

/mnt/dir 为挂载点

/etc/samba/pwd 文件里面保存的是用户名和密码,并授予400权限,格式如下

1
2
username=root
password=123456

执行

1
# mount -a
  1. 测试是否成功
    查看/mut/dir 文件夹是否有文件
配置SELinux

如果selinux开启的话,注意配置,出现的情况是可以访问但无法操作的情况

 #getsebool -a|grep samba
 #setsebool -P samba_export_all_rw on

参考

Samba (简体中文)
Samba环境搭建
linux下挂载