文件服务器之二:SAMBA服务器

07-17 1196阅读

文章目录

  • 什么是SAMBA
    • SAMBA的发展历史与名称的由来
    • SAMBA常见的应用
    • SAMBA服务器基础配置
      • 配置共享资源
      • Windows挂载共享
      • Linux挂载共享

        什么是SAMBA

        下图来自百度百科

        文件服务器之二:SAMBA服务器

        SAMBA的发展历史与名称的由来

        Samba是一款开源的文件共享软件,它基于SMB(Server Message Block,服务器消息块)协议,并且让Linux系统能够与Windows系统进行文件共享。Samba的开发始于1991年,由当时还在读大学的Tidgwell为了解决Linux与Windows系统之间文件共享的问题而创建。他开发了SMBServer服务程序,通过简单的配置,使得Linux与Windows系统之间的文件共享变得简单而便捷。然而,当他想要将该软件命名为"SMBServer"并注册商标时,商标局以"SMB是没有意义的字符"为由拒绝了申请。后来,Tidgwell查看词典时偶然发现了“Samba”这个拉丁舞蹈的名字,而且它恰好包含了“SMB”。因此,Samba成为了这款软件的新名字,并且沿用至今。

        SAMBA常见的应用

        主要功能

        • 共享文件与打印机服务
        • 可以提供用户登陆SAMBA主机时的身份认证,以提供不同身份用户的个别数据
        • 可以进行Windows网络上的主机名解析
        • 可以进行设备的共享

          SAMBA服务器的应用

          • 利用软件直接编辑WWW主机上面的网页数据
          • 做成可直接连接的文件服务器
          • 打印机服务器

            SAMBA服务器基础配置

            安装

            [root@localhost ~]# yum install -y samba samba-client
            

            配置文件/etc/samba/smb.conf

            [root@localhost ~]# cat /etc/samba/smb.conf
            [global]
                    workgroup = SAMBA
                    security = user
                    passdb backend = tdbsam
                    printing = cups
                    printcap name = cups
                    load printers = yes
                    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 = @printadmin root
                    force group = @printadmin
                    create mask = 0664
                    directory mask = 0775
            
            参数作用
            [global]Samba配置文件的全局设置
            workgroup = SAMBA设置Samba服务器所在的工作组名称
            security = userSamba服务器的安全性模式,共4种
            passdb backend = tdbsam用于存储用户账号信息的后端数据库
            printing = cups打印服务协议
            printcap name = cups打印服务名称
            load printers = yes是否加载打印机
            cups options = raw打印机的选项
            [homes]配置个人用户的家目录的访问权限和选项
            comment = Home Directories描述信息
            valid users = %S, %D%w%S指定允许访问该共享目录的用户列表
            browseable = No共享信息是否在"网上邻居"中可见
            read only = No共享目录是否只读
            inherit acls = Yes是否继承文件的访问控制列表(ACL)
            [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 = @printadmin root指定允许写入该共享目录的用户列表
            force group = @printadmin强制所创建文件的所属组为指定的组
            create mask = 0664指定创建文件时的权限掩码
            directory mask = 0775指定创建目录时的权限掩码

            security 参数代表用户登陆Samba服务时采用的验证方式。四种

            • share:代表主机无须验证密码。相当于vsftpd服务的匿名公开访问模式,安全性差
            • user:代表登陆Samba服务时需要使用账号密码进行验证,通过才能获取到文件,默认的验证方式
            • domain:代表通过域控制器进行身份验证,用来限制用户的来源域
            • server:代表使用独立主机验证来访问用户提供的密码。这相当于集中管理账号,不常用

              配置共享资源

              第一步:创建用于访问共享资源的账户信息

              pdbedit 命令用于管理 Samba 服务程序的账户信息数据库,格式为【pdbedit [选项]账户】。在第一次把账户信息写人到数据库时需要使用【-a】参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了

              Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误

              参数作用
              -a 用户名建立Samba用户
              -x 用户名删除Samba用户
              -L列出用户列表
              -Lv列出用户详细信息的列表
              [root@localhost ~]# id csq
              用户id=1001(csq) 组id=1001(csq) 组=1001(csq)
              [root@localhost ~]# pdbedit -a -u csq
              new password:         # 输入该账户在Samba服务数据库种的密码
              retype new password:  # 再次输入密码进行确认
              Unix username:        csq   # Samba账号的用户名
              NT username:                # Samba账号的Windows用户名为空
              Account Flags:        [U          ]   # 账号标志为"U",表示账号可用
              User SID:             S-1-5-21-1005164572-3626894132-1712046424-1000 # Samba账号的SID标识
              Primary Group SID:    S-1-5-21-1005164572-3626894132-1712046424-513  # 账号的主组的SID标识
              Full Name:            
              Home Directory:       \\LOCALHOST\csq       # 账号的主目录路径
              HomeDir Drive:        
              Logon Script:         
              Profile Path:         \\LOCALHOST\csq\profile  # 账号的配置文件路径
              Domain:               LOCALHOST               # 账号所属的域名
              Account desc:         
              Workstations:         
              Munged dial:          
              Logon time:           0
              Logoff time:          三, 06 2月 2036 10:06:39 EST
              Kickoff time:         三, 06 2月 2036 10:06:39 EST
              Password last set:    一, 01 4月 2024 09:43:46 EDT
              Password can change:  一, 01 4月 2024 09:43:46 EDT
              Password must change: never # 账号密码的过期时间设置为"never",即永不过期
              Last bad password   : 0
              Bad password count  : 0
              Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
              # 登录小时的位图,其中所有位都是1,表示没有限制登录时间
              

              第二步、创建用于共享资源的文件目录

              创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,而且由于home 目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的 SELimnux 安全上下文所带来的限制。在 Samba 的帮助手册中显示,正确的文件上下文值应该是 samba_share,所以只需要修改完毕后执行restorecon 命令,就能让应用于目录的新 SELinux 安全上下文立即生效。

              [root@localhost ~]# mkdir /home/database
              [root@localhost ~]# chown -R csq:csq /home/database/
              [root@localhost ~]# semanage fcontext -a -t samba_share_t /home/database
              [root@localhost ~]# restorecon -Rv /home/database/
              Relabeled /home/database from unconfined_u:object_r:user_home_dir_t:s0 to unconfined_u:object_r:samba_share_t:s0
              

              第三步、设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录

              执行 getsebool命令,筛选出所有与 Samba 服务程序相关的 SELinux 域策略,根据策略的名称(和经验)选择出正确的策略条目进行开启即可

              [root@localhost ~]# getsebool -a |grep samba
              samba_create_home_dirs --> off
              samba_domain_controller --> off
              samba_enable_home_dirs --> off # 修改这一条
              samba_export_all_ro --> off
              samba_export_all_rw --> off
              samba_load_libgfapi --> off
              samba_portmapper --> off
              samba_run_unconfined --> off
              samba_share_fusefs --> off
              samba_share_nfs --> off
              sanlock_use_samba --> off
              tmpreaper_use_samba --> off
              use_samba_home_dirs --> off
              virt_use_samba --> off
              [root@localhost ~]# setsebool -P samba_enable_home_dirs on
              

              第四步、在Samba服务程序的主配置文件种,根据下表下入共享信息

              Samba的主配置文件(通常是/etc/samba/smb.conf)可以设置全局配置参数和区域配置参数。全局配置参数适用于整个Samba服务器环境,对所有共享资源都有效。区域配置参数用于设置单独的共享资源,并且只对该资源有效。

              创建一个共享资源非常简单,只需将相关参数添加到Samba服务程序的主配置文件中,并重新启动该服务即可生效。

              参数作用
              [database]共享名称为database
              comment = Do not arbitrarily modify the database file警告用户不要随意修改数据库
              path = /home/database共享目录为/home/database
              public = no关闭 “所有人可见”
              writable = yes允许写入操作
              [root@localhost ~]# vim /etc/samba/smb.conf
              # 将使用不到的行注释掉
              [global]
                      workgroup = SAMBA
                      security = user
                      passdb backend = tdbsam
              #        printing = cups
              #        printcap name = cups
              #        load printers = yes
              #        cups options = raw
              [database]
                      comment = Do not arbitrarily modify the database file
                      path = /home/database
                      public = no
                      writable = yes
              # 
              # [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 = @printadmin root
              #         force group = @printadmin
              #         create mask = 0664
              #         directory mask = 0775
              

              第五步、Samba服务程序的配置工作基本完毕

              重启生效修改的配置文件

              [root@localhost ~]# systemctl restart smb
              [root@localhost ~]# systemctl enable smb
              [root@localhost ~]# systemctl status smb # 查看是否启动成功
              [root@localhost ~]# firewall-cmd --add-service=samba --permanent
              success
              [root@localhost ~]# firewall-cmd --reload
              success
              

              第六步、查看Samba服务都共享了哪些目录,使用smbclient来查看共享详情

              [root@localhost ~]# smbclient -U csq -L 192.168.200.10
              # -U:指定了用户名称
              # -L:列出共享清单
              Password for [SAMBA\csq]:
                      Sharename       Type      Comment
                      ---------       ----      -------
                      database        Disk      Do not arbitrarily modify the database file
                      # Sharename:共享名称
                      # Type:共享类型,指示该共享是一个磁盘(Disk)
                      #Comment:对共享的描述或备注信息
                      IPC$            IPC       IPC Service (Samba 4.17.5)
              SMB1 disabled -- no workgroup available # 这个报错可以不用管
              

              Windows挂载共享

              要在Windows系统访问共享资源,只需要单机 Windows系统的开始,输入两个反斜杠,如何再添加服务器的IP地址即可

              然后就可以看到Samba共享服务的登陆界面了

              输入对应的账号名称密码即可访问

              创建文件写入信息

              文件服务器之二:SAMBA服务器

              [root@localhost ~]# ls /home/database/
              hello.txt
              [root@localhost ~]# smbclient  //192.168.200.10/database -U csq  # 在Linux端登陆查看
              Password for [SAMBA\csq]:
              Try "help" to get a list of possible commands.
              smb: \> ls
                .                                   D        0  Mon Apr  1 10:41:58 2024
                ..                                  D        0  Mon Apr  1 10:40:17 2024
                hello.txt                           A        9  Mon Apr  1 10:41:51 2024
                              17197056 blocks of size 1024. 12929692 blocks available
              

              Linux挂载共享

              Samba服务程序还可以实现Linux系统之间的文件共享

              [root@localhost ~]# yum install -y cifs-utils
              

              安装完成后,在Linux创建一个用于挂载Samba服务共享资源的目录。这个目录可以与服务器上的共享名称同名,以便于日后查找

              [root@localhost ~]# mkdir /database
              [root@localhost ~]# mount -t cifs -o username=csq,password=000000 //192.168.200.10/database /database/
              [root@localhost ~]# df -hT /database/
              文件系统                  类型  容量  已用  可用 已用% 挂载点
              //192.168.200.10/database cifs   17G  4.1G   13G   25% /database
              

              如果在每次重启电脑后都需要使用 mount 命令手动挂载远程共享目录,很麻烦,可以按照 Samba 服务的用户名、密码、共享域的顺序将相关信息写人一个认证文件中,然后让/etc/fstab文件和系统自动加载它。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root 管理员才能够读写:

              [root@localhost ~]# vim auth.smb
              username=csq
              password=000000
              domain=SAMBA
              [root@localhost ~]# chmod 600 auth.smb 
              [root@localhost ~]# vim /etc/fstab 
              # 添加如下信息
              //192.168.200.10/database   /database           cifs  credentials=/root/auth.smb 0 0 
              [root@localhost ~]# umount /database 
              [root@localhost ~]# mount -a         
              [root@localhost ~]# df -hT /database/     
              文件系统                  类型  容量  已用  可用 已用% 挂载点
              //192.168.200.10/database cifs   17G  4.1G   13G   25% /database
              [root@localhost ~]# ls /database/
              hello.txt
              
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]