Linux如何详细搭建samba服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux如何详细搭建samba服务相关的知识,希望对你有一定的参考价值。

1.samba简介
samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,有服务器及客户端程序构成
进过我们了解了NFS服务后,其实NFS和samba一样的,就是在网络中实现文件共享的一种实现,但二者有着略微不同,NFS服务其不支持windows平台,而本章介绍的是samba服务是能够在任何SMB协议的主机之间共享文件的一种实现,当然包括windows。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBios over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。


2.samba监听端口有:

TCP UDP
139 137
445 138

TCP端口相对应的服务是samba服务,其作用是提供对服务器中文件、打印资源的共享访问。
UDP端口相对应的服务是nmbad服务,其作用是提供基于NetBIOS主机名称的解析


3.samba进程:

进程 对应的协议
nmbd 对应netbios协议
smbd 对应cifs协议
winbindd + ldap 对应Windows AD 活动目录

4.samba用户:

账号 密码
都是系统用户 samba服务自有密码文件
/etc/passwd 通过smbpasswd -a USERNAME命令设置

5.samba安全级别
samba服务器的安全级别有三个,分别是user, server, domain

安全级别 作用
user 基于本地的验证
server 由另一台指定的服务器对用户身份进行认证
domain 由域控进行身份验证

以前的samba版本支持的安全级别有四个,分别是share,user,server,domain
share是用来设置匿名访问的,但现在的版本已经不支持share了,但是还是可以实现匿名访问的,只是配置方式变了。


6.samba 配置文件
/etc/samba/smb.conf (主配置文件)

samba三大组成 作用
【global】 全局配置,此处的设置项对整个samba服务器都有效
【homes】 宿主目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中
【printers】 打印机共享设置

常用配置文件参数:

参数 作用
workgroup 表示设置工作组名称
server string 表示描述samba服务器
security 表示设置安全级别,其值可为share、user、server、domain
passdbackend 表示设置共享账户文件的类型,其值可为tdbsam (tbd数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本samba密码文件)
comment 表示设置对应共享目录的注释,说明信息,即文件共享名
browseable 表示设置共享是否可见
writable 表示设置目录是否可写
path 表示共享目录的路径
guest ok 表示设置是否所有人均可访问共享目录
public 表示设置是否允许匿名用户访问
write list 表示设置允许写的用户和组,组要用@表示,例如 write = root,@root
valid users 设置可以访问的用户和组,例如 valid users = root,@root
hosts deny 设置拒绝哪台主机访问,例如 hosts deny = 192.168.209.12
hosts allow 设置允许哪台主机访问,例如 hosts deny = 192.168.209.13
printable 表示设置是否为打印机

//测试配置文件是否有语法错误,以及显示最终生效的配置:使用testparm命令

[[email protected] ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[lan]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

7.samba访问
环境说明:

服务器IP 客户机IP
192.168.209.12 192.168.209.13

//交互式数据访问 (有两种访问模式),查看samba服务器有哪些共享资源

smbclient  -L  HOST  -U   USERNAME
            例如:[[email protected] ~]# smbclient -L 192.168.209.12 -U lan
Enter SAMBAlan‘s password: 
Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        lan             Disk      lan
        IPC$            IPC       IPC Service (Samba 4.6.2)
Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------  

smbclient    //SERVER/share_name   -U  USARENAME
            例如:[[email protected] ~]# smbclient //192.168.209.12/lan  -U lan
Enter SAMBAlan‘s password: 
Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: > ls
  .                                   D        0  Mon Aug  6 16:10:26 2018
  ..                                  D        0  Mon Aug  6 15:53:39 2018
  9999                                D        0  Mon Aug  6 16:10:22 2018
  8888                                D        0  Mon Aug  6 16:10:26 2018

                17811456 blocks of size 1024. 8041628 blocks available
smb: > quit     //quit退出
-----

8.实例 (配置用户认证共享,就是指定用户登入密码才能访问共享资源)
       前提是在服务器端和客户端在关闭防火墙的情况下才能实现共享目录。服务器端IP:192.168.209.12      客户端IP:192.168.209.13

    在服务器端做以下操作:
//使用yum命令安装samba-*
    [[email protected] ~]# yum install -y samba-* 
    //映射共享目录
    //创建用lan
    [[email protected] ~]# useradd -M lan 

    //为lan用户创建smb共享密码:
    [[email protected] ~]# smbpasswd -a lan
    New SMB password:           //设置密码
Retype new SMB password:
    ```
    //假设这里映射lan 用户为share 用户,那么就要在/etc/samba/smbusers文件中添加如下内容:
    ```
    [[email protected] ~]# echo ‘lan = share‘ > /etc/samba/smbusers

    //在全局配置中添加如下内容:
        [[email protected] ~]# vim /etc/samba/smb.conf 
        [global]
    workgroup = SAMBA
    security = user
    username map = /etc/samba/smbusers      //添加此行内容
    passdb backend = tdbsam

      //创建一个共享目录lanzhiyong
    [[email protected] ~]# mkdir /opt/lanzhiyong
    [[email protected] ~]# chown -R lan.lan /opt/lanzhiyong/
      [[email protected] ~]# ls -ld /opt/lanzhiyong/
    drwxr-xr-x. 4 lan lan 30 8月   6 16:10 /opt/lanzhiyong/
    ```
        //配置共享
            ```
   [[email protected] ~]# cat >> /etc/samba/smb.conf <<EOF
     [lan]
   comment = lan
   path = /opt/lanzhiyong
   browseable = yes
   guest ok = yes
   writable = yes
   write list = share
   public = yes

   [[email protected] ~]# tail -8 /etc/samba/smb.conf  
       [lan]
   comment = lan
   path = /opt/lanzhiyong
   browseable = yes
   guest ok = yes
   writable = yes
   write list = share
   public = yes
    ```
    ```
  //启动smb服务
    [[email protected] ~]# systemctl start smb 

    //重启smb服务
    [[email protected] ~]# systemctl restart smb   

    //重新加载smb服务
    [[email protected] ~]# systemctl reload smb

  //设置smb服务随系统启动而启动
    [[email protected] ~]# systemctl enable smbc 
    ```

    ***     //在客户端先安装samba-smbclient
    [[email protected] ~]# yum install -y samba-client 

    //在客户端查看samba服务器有哪些共享资源
  [[email protected] ~]# smbclient -L 192.168.209.12 -U share
 Enter SAMBAshare‘s password: 
     ```
 Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    lan             Disk      lan
    IPC$            IPC       IPC Service (Samba 4.6.2)
   Domain=[LANZHIYONG] OS=[Windows 6.1] Server=[Samba 4.6.2]

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------

//创建需要在客户端挂载到哪个目录下          
[[email protected] ~]# mkdir /opt/smb

//将samba服务器的共享资源lan挂载到客户机本地
[[email protected] ~]# mount -t cifs //192.168.209.12/lan /opt/smb/ -o         username=share,password=redhat
[[email protected] ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
    /dev/mapper/centos-root   17G  9.4G  7.7G   55% /
    devtmpfs                 478M     0  478M    0% /dev
    tmpfs                    489M     0  489M    0% /dev/shm
    tmpfs                    489M  6.8M  482M    2% /run
    tmpfs                    489M     0  489M    0% /sys/fs/cgroup
    /dev/sda1               1014M  125M  890M   13% /boot
    tmpfs                     98M     0   98M    0% /run/user/0
 //192.168.209.12/lan      17G  9.4G  7.7G   55% /opt/smb

   //在客户机上进行共享目录创建新文件
   [[email protected] ~]# cd /opt/smb/
   [[email protected] smb]# touch 8888
   [[email protected] smb]# mkdir 9999
   [[email protected] smb]# ls
   8888  9999

    //最后到服务器端上验证:
      [[email protected] lan]# cd /opt/lanzhiyong/
      [[email protected] lanzhiyong]# ls
      8888  9999 

9.实例 (配置匿名共享,就是不需要密码都可以访问共享资源)
前提是在服务器端和客户端在关闭防火墙的情况下才能实现共享目录。服务器端IP:192.168.209.12 客户端IP:192.168.209.13
先在服务器端:

    //使用yum命令安装samba服务器
    [[email protected] ~]# yum install -y samba-* 

    //在全局配置中添加如下内容:
    [[email protected] ~]# vim /etc/samba/smb.conf 
    [global]
    workgroup = SAMBA
    security = user
    map to guest =  Bad User      //添加此行内容

    //创建一个共享目录lanzhiyong
     [[email protected] ~]# mkdir /opt/lanzhiyong
     [[email protected] ~]# chmod -R 777 /opt/lanzhiyong/ 
     [[email protected] ~]# ll -ld /opt/lanzhiyong/      
    drwxrwxrwx. 4 lan lan 30 8月   6 16:10 /opt/lanzhiyong/

    //配置共享
  [[email protected] ~]# cat >> /etc/samba/smb.conf <<EOF
  [lanzhiyong]
  comment = lanzhiyong
  path = /opt/lanzhiyong
  browseable = yes
  guest ok = yes
  writable = yes
  public = yes
  EOF
  [[email protected] ~]# tail -7 /etc/samba/smb.conf
  [lanzhiyong]
  comment = lanzhiyong
  path = /opt/lanzhiyong
  browseable = yes
  guest ok = yes
  writable = yes
  public = yes

//启动smb服务
  [[email protected] ~]# systemctl start smb 

    在客户端做以下操作:
    //在客户端先安装samba-smbclient
     [[email protected] ~]#yum install -y samba-client 

    //在客户端查看samba服务器有哪些共享资源
    [[email protected] ~]#smbclient -L 192.168.209.12 -U ‘Bad User‘
     Enter SAMBABad User‘s password: 
     Anonymous login successful
    OS=[Windows 6.1] Server=[Samba 4.6.2]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    lan             Disk      lan
    IPC$            IPC       IPC Service (Samba 4.6.2)
    Anonymous login successful
   OS=[Windows 6.1] Server=[Samba 4.6.2]

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------

//将samba服务器的共享资源lan挂载到客户机本地

[[email protected] ~]# mount -t cifs //192.168.209.12/lanzhiyong /opt/smb/ -o username=share,password=redhat
[[email protected] ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G  9.4G  7.7G   55% /
devtmpfs                 478M     0  478M    0% /dev
tmpfs                    489M     0  489M    0% /dev/shm
tmpfs                    489M  6.8M  482M    2% /run
tmpfs                    489M     0  489M    0% /sys/fs/cgroup
/dev/sda1               1014M  125M  890M   13% /boot
tmpfs                     98M     0   98M    0% /run/user/0
//192.168.209.12/lanzhiyong     17G  9.4G  7.7G   55% /opt/smb

    //在客户机上进行共享目录创建新文件
    [[email protected] ~]# cd /opt/smb/
    [[email protected] smb]# touch 123
    [[email protected] smb]# mkdir 123123123
    [[email protected] smb]# ls
    123  123123123

    //到服务器端上验证:
   [[email protected] ~]# cd /opt/lanzhiyong/
   [[email protected] lanzhiyong]# ls
   123  123123123

以上是关于Linux如何详细搭建samba服务的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建与Windows客户机结合使用的Samba文件服务器

SAMBA 服务的搭建

SAMBA 服务的搭建

如何开启linux samba服务

一文教你如何在Linux系统上搭建samba文件共享服务器

linux访问windows的samba配置,如何配置?详细教程