Samba共享

说明

Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。
  Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而 Samba较多的用在了Linux与windows之间的数据共享上面。
  SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可以通过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也可以访问网络中 其它windows系统或者Linux系统共享出来的文件。
Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。
  组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。

Samba部署

准备环境

两台主机:

  • Windows 7系统
  • CentOS 7.2
    CentOS 7.2共享的目录是/data
    CentOS 7.2的环境:
[root@centos7 ~]# cat /etc/redhat-release                             # 查看系统版本
CentOS Linux release 7.2.1511 (Core)             
[root@centos7 ~]# uname -r                                               # 查看系统内核版本
3.10.0-327.el7.x86_64
[root@centos7 ~]# getenforce                                            # 查看SELinux是否关闭
Disabled
[root@centos7 ~]# systemctl status firewalld.service             # 查看防火墙是否关闭
● firewalld.service - firewalld - dynamic firewall daemon
  Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
  Active: inactive (dead)

安装Samba

  • 使用yum安装Samba
    [root@centos7 ~]# yum -y install samba
  • 查看安装情况
    [root@centos7 ~]# rpm -qa | grep samba
    samba-common-libs-4.6.2-11.el7_4.x86_64
    samba-common-4.6.2-11.el7_4.noarch
    samba-client-libs-4.6.2-11.el7_4.x86_64
    samba-common-tools-4.6.2-11.el7_4.x86_64
    samba-4.6.2-11.el7_4.x86_64
    samba-libs-4.6.2-11.el7_4.x86_64
  • 启动并查看smb服务
[root@centos7 ~]# systemctl start smb
[root@centos7 ~]# systemctl status smb
● smb.service - Samba SMB Daemon
  Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
  Active: active (running) since Sat 2017-11-11 19:07:55 CST; 2s ago
Main PID: 1661 (smbd)
  Status: "smbd: ready to serve connections..."
  CGroup: /system.slice/smb.service
          ├─1661 /usr/sbin/smbd
          ├─1662 /usr/sbin/smbd
          ├─1663 /usr/sbin/smbd
          └─1664 /usr/sbin/smbd

Nov 11 19:07:55 centos7 systemd[1]: Starting Samba SMB Daemon...
Nov 11 19:07:55 centos7 smbd[1661]: [2017/11/11 19:07:55.299475,  0] ../lib/util/...y)
Nov 11 19:07:55 centos7 smbd[1661]:  STATUS=daemon 'smbd' finished starting up a...ns
Nov 11 19:07:55 centos7 systemd[1]: Started Samba SMB Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

配置Samba

Samba的主配置文件为/etc/samba/smb.conf
主配置文件由两部分构成:

  • [global]
    该部分都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
  • 其他
    该部分设置针对的是共享目录个别的设置,只针对当前的共享资源起作用
[root@centos7 ~]# cat /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
    workgroup = SAMBA                      
说明:设定 Samba Server 所要加入的工作组或者域。

    security = user                            
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式
 * share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低
 * user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账    号和密码要在本Samba Server中建立
 * server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证
 * domain:域安全级别,使用主域控制器(PDC)来完成认证

    passdb backend = tdbsam
说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
 * smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
 * tdbsam: 该方式则是使用一个数据库文件来建立用户数据库
 * ldapsam:该方式则是基于LDAP的账户管理方式来验证用户

    printing = cups
说明:设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx

    printcap name = cups
说明:设置共享打印机的配置文件

    load printers = yes
说明:设置是否在启动Samba时就共享打印机

    cups options = raw

[homes]
    comment = Home Directories
    valid users = %S, %D%w%S
    browseable = No
    read only = No
    inherit acls = Yes

[printers]
    comment = All Printers
    path = /var/tmp
    printable = Yes
    create mask = 0600
    browseable = No

[print$]
    comment = Printer Drivers
    path = /var/lib/samba/drivers
    write list = root
    create mask = 0664
    directory mask = i0775

共享参数

[共享名称]
comment = 任意字符串
说明:对该共享的描述

path = 共享路径
说明:指定共享目录的路径

browseable = yes/no
说明:该共享是否可以浏览

writable = yes/no
说明:该共享是否可写

available = yes/no
说明:该共享资源是否可用

admin user = 该共享管理者
说明:指定该共享的管理用户

valid users = 允许访问该共享的用户
说明:多个用户之间用逗号隔开,用户组用@组名

write list = 允许写入该共享的用户
说明:类似上面

public = yes/no
说明:public用来指定该共享目录是否允许guest账户访问

guest ok = yes/no
说明:同public

匿名访问

  • 创建共享目录及修改权限
[root@centos7 ~]# mkdir -p /data
[root@centos7 ~]# touch /data/txt
[root@centos7 ~]# chown -R nobody.nobody /data/
说明:因为要所有用户都有权限访问,所以给予nobody权限
  • 修改配置文件
[root@centos7 ~]# cp /etc/samba/smb.conf{,.bak}
[root@centos7 ~]# egrep -v "^#|^$" /etc/samba/smb.conf
[global]
    workgroup = WORKGROUP
    security = user
    map to guest = Bad User                    #说明:共享级别,不需要用户名和密码
[data]
    comment = this is data
    path = /data
    public = yes
    browseable = yes
  • 检查配置文件
[root@centos7 ~]# testparm 
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[data]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
    map to guest = Bad User
    security = USER
    idmap config * : backend = tdb

[data]
    comment = this is data
    path = /data
    guest ok = Yes
  • 启动Samba
[root@centos7 ~]# systemctl start smb
[root@centos7 ~]# systemctl status smb
● smb.service - Samba SMB Daemon
  Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
  Active: active (running) since Sun 2017-11-12 05:16:33 CST; 27min ago
Main PID: 1680 (smbd)
  Status: "smbd: ready to serve connections..."
  CGroup: /system.slice/smb.service
          ├─1680 /usr/sbin/smbd
          ├─1681 /usr/sbin/smbd
          ├─1682 /usr/sbin/smbd
          └─1683 /usr/sbin/smbd

Nov 12 05:16:32 centos7 systemd[1]: Starting Samba SMB Daemon...
Nov 12 05:16:33 centos7 smbd[1680]: [2017/11/12 05:16:33.072669,  0] ../lib/util/...y)
Nov 12 05:16:33 centos7 smbd[1680]:  STATUS=daemon 'smbd' finished starting up a...ns
Nov 12 05:16:33 centos7 systemd[1]: Started Samba SMB Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
  • 测试
    Linux测试
    需要安装samba-client
[root@centos7 ~]# smbclient //10.0.0.200/data
Enter WORKGROUP\root's password: 
OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
  .                                  D        0  Sun Nov 12 05:03:42 2017
  ..                                DR        0  Sun Nov 12 05:03:35 2017
  txt                                N        0  Sun Nov 12 05:03:42 2017

        102706180 blocks of size 1024. 101218464 blocks available
smb: \> 

Windows测试
按win+r弹出运行界面

Samba共享_第1张图片
Samba共享_第2张图片

用户及密码访问

  • 创建用户
[root@centos7 ~]# groupadd samba
[root@centos7 ~]# useradd user -g samba
[root@centos7 ~]# smbpasswd -a user
New SMB password:
Retype new SMB password:
Added user user.
  • 修改配置文件
[root@centos7 ~]# egrep -v "^#|^$" /etc/samba/smb.conf
[global]
    workgroup = WORKGROUP
    security = user
[data]
    comment = this is data
    path = /data
    public = yes
    browseable = yes
    admin user = user
    valid users = @samba
  • 检查配置文件
[root@centos7 ~]# testparm 
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[data]"
Unknown parameter encountered: "admin user"
Ignoring unknown parameter "admin user"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
    security = USER
    idmap config * : backend = tdb

[data]
    comment = this is data
    path = /data
    guest ok = Yes
    valid users = @samba
  • 重启samba
[root@centos7 ~]# systemctl restart smb
  • 测试
    Linux测试

    [root@centos7 ~]# smbclient //10.0.0.200/data -U user
    Enter WORKGROUP\user's password: 
    Domain=[CENTOS7] OS=[Windows 6.1] Server=[Samba 4.6.2]
    smb: \> ls
    .                                  D        0  Sun Nov 12 05:03:42 2017
    ..                                DR        0  Sun Nov 12 05:03:35 2017
    txt                                N        0  Sun Nov 12 05:03:42 2017
    
        102706180 blocks of size 1024. 101218400 blocks available
    smb: \> 

    Windows测试
    win+r弹出运行界面

Samba共享_第3张图片

Samba共享_第4张图片
Samba共享_第5张图片