Samba部署和优化

1. 介绍

Samba服务也是用来实现文件共享的。它类似于Windows上的共享功能,可以实现Windows和Linux的文件共享。Windows上访问,当然在Linux上也可以访问到,

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。


2. 安装和配置

2.1. 安装

安装系统的时候大多会默认安装Samba,如果没有安装,在CentOS上只需要执行下面的命令安装即可:

1
# yum install -y samba samba-client

2.2. 配置

Samba的配置文件为/etc/samba/smb.conf,通过修改这个配置文件来完成我们的各种需求。

打开这个文件,你会发现很多内容都用#;注释掉了。我们先来看一下未被注释掉的部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

配置文件的说明:

主要有以上三个部分:[global]、[homes]、[printers]

[global]定义全局的配置:

  • workgroup 用来定义工作组。一般情况下,需要我们把这里的MYGROUP改成WORKGROUP(即Windows默认的工作组名字)。
  • security = user 这里指定samba的安全等级。关于安全等级有四种:
    • share : 用户不需要账户及密码即可登陆Samba服务器
    • user : 由服务器的Samba服务器负责检查账户及密码(默认)
    • server : 检查账户及密码的工作由另一台Windows或Samba服务器负责
    • domain : 指定Windows域控制服务器来验证用户的账户及密码
  • passdb backend = tdbsam 用户后台,Samba有三种用户后台:
    • smbpasswd : 该方式是使用smb工具smbpasswd给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用此密码访问Samba资源。smbpasswd在/etc/samba中,有时需要手工创建该文件。
    • 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用户账号
    • ldapsam : 基于LDAP账户管理方式验证用户。首先要简历LDAP服务,设置passdb backend = ldapsam:ladp://LDAP Server
  • load printerscups options两个参数用来设置打印机相关。

除了这些参数外,还有几个参数需要了解:

  • netbios name = MYSERVER 设置出现在网上邻居中的主机名
  • hosts allow = 127. 192.168.12. 192.168.13. 用来设置允许的主机,如果在前面加;则表示允许所有主机。
  • log file = /var/log/samba/%m.log 定义Samba的日志,这里的%m是上面的netbios name.
  • max log size = 50 用来切割日志用的,指定日志的最大容量,单位是K。

[homes]这部分内容共享用户自己的家目录,也就是说,当用户登陆到Samba服务器上时实际上是进入到了该用户的家目录,用户登录后,共享名不是homes而是用户自己的标识符,对于的单纯的文件共享的环境来说,这部分可以注释掉。

[printers]这部分内容设置打印机共享。


3. Samba实践

Samba服务可以实现Linux和Windows机器互相共享文件,这对我们来说是非常实用的。下面将介绍几个实践应用,来帮助你熟悉Samba。

注意:在实验之前,先检测SELinux是否关闭,否则可能会实验不成功。

3.1. Samba实践1

需求:共享一个目录,任何人都可以访问,即不用输入密码即可访问,要求只读。

打开Samba的配置文件/etc/samba/smb.conf在[global]部分:

  • MYGROUP改成WORKGROUP
  • security = user改成security = share
  • 然后在文件的最末尾处加入一下内容:

    1
    2
    3
    4
    5
    6
    [share]
    comment = share all
    path = /tmp/samba #<==分享的目录
    browseable = yes #<==是否可被浏览
    public = yes
    writable = yes #<==是否可写
  • 创建测试目录:

    1
    2
    3
    4
    # mkdir /tmp/samba
    # chmod 777 /tmp/samba
    # touch /tmp/samba/sharefiles
    # echo "11111" > /tmp/samba/sharefiles
  • 启动Samba服务:/etc/init.d/smb start

下面来测试一下是否能实现我们的需求,。首先测试一下配置的smb.conf是否正确,用这个命令:testparm

你应该会看到一个警告信息,不过影响不大,先不用管它。如果没有错误,则在你的Windows机器上的浏览器中输入:

1
file://IP/share

看是否能够访问到sharefiles

3.2. Samba实践2

需求:共享一个目录,使用用户名和密码登陆后才可以访问,要求可以读写。

打开Samba的配置文件/etc/samba/smb.conf:

  • [global]部分的内容如下:

    1
    2
    3
    4
    5
    6
    7
    [global]
    workgroup = WORKGROUP
    server string = Samba Server Version %v
    security = user
    passdb backend = tdbsam
    load printers = yes
    cups options = raw
  • 还需要加入以下内容:

    1
    2
    3
    4
    5
    6
    [myshare]
    comment = share for users
    path = /samba
    browseable = yes
    writable = yes
    public = no
  • 保存配置文件,创建目录:

    1
    2
    3
    4
    # mkdir /samba
    # chmod 777 /samba
    # touch /samba/hello
    # echo "OK" > /samba/hello
  • 然后添加用户,因为在[global]passdb backend = tdbsam,所以要使用pdbedit来增加用户。注意添加的用户必须在系统中存在,所以需要先创建系统账号:

    1
    2
    3
    4
    5
    # useradd user1
    # useradd user2
    #<==然后再添加user1和user2为samba账号
    # pdbedit -a user1
    # pdbedit -a user2
  • 我们可以列出Samba所有账号:

    1
    2
    3
    # pdbedit -L
    user1:500:
    user2:501:
  • 重启Samba服务:service smb restart

  • 测试:在Windows按Win+R组合键,呼出运行菜单,输入\\IP回车后输入用户名和密码即可访问Samba的共享目录和文件。

3.3 Samba实践3

需求:使用Linux访问Samba服务器。

方法1

Samba服务在Linux下同样可以访问。前提是你的Linux安装了samba-client软件包。
安装完后就可以使用smbclient命令了:

  • smbclient命令的具体语法为:smbclient //IP/共享名 -U 用户名。如:
    1
    2
    3
    4
    ]# smbclient //127.0.0.1/myshare -U user1
    Enter user1's password:
    Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-46el6_9]
    smb: \>

出现如上所示的界面,可以打一个?列出所有可以使用的命令。常用的命令有cd、ls、rm、pwd、tar、mkdir、chown、get、put等等。使用help 命令可以打印该命令如何使用。其中,get是下载,put是上传。

方法2

另外的方式就是通过mount挂载了,如下:

1
2
3
4
5
# mount -t cifs //127.0.0.1/myshare /mnt -o username=user1,password=123456
# ll /mnt/
总用量 4
-rwxr--r-- 1 user1 user1 0 3月 8 00:03 1111.txt
-rw-r--r-- 1 root root 3 3月 7 23:24 hello

格式就是这样:mount -t cifs //IP/共享名 本地挂载点 -o username=用户名,password=密码

挂载完后就可以像使用本地的目录一样使用共享的目录了,注意共享名后面不能有斜杠。


4. 同时使用匿名和用户登陆

关于同时使用匿名和用户登陆,有一个模板配置文件(已经验证成功),可以参考一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
map to guest = bad user
guest account = nobody
encrypt password = yes
smb passwd file = /etc/samba/ambpasswd
[public]
comment = public
path = /data/pub/public
browseable = yes
guest ok = yes
writable = yes
printable = no
create mask = 0644
directory mask = 0755
[project]
comment = project
path = /data/pub/project
browseable = yes
public = no
guest ok = no
writable = yes
force user = root
printable = no
create mask = 0644
directory mask = 0755

注意:需要我们手动创建/data/pub/public/data/pub/project目录。为了顺利测试,需要提前修改其权限为777。另外,还需要手动创建用户:

  • useradd testuser
  • pdbedit -a testuser
0%