Linux菜鸟成长日记 (Linux 下 Samba 文件共享服务的部署)

Linux 下 Samba 文件共享服务的部署

首先介绍一下 samba 文件共享服务的基本信息

  • SMB(Server Messages Block,服务器消息块)
    1987 年,微软公司和英特尔公司共同制定了 SMB(Server Messages Block,服务器消息协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单
  • Samba
    1991 年,当时还在读大学的 Tridgwell 为了解决 Linux 系统与 Windows 系统之间的文件共享问题,基于 SMB 协议开发出了 SMBServer 服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现 Linux 系统与 Windows 系统之间的文件共享工作。
  • CIFS(common internet file system)通用网络文件系统 件系统
    CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。

1. 服务安装以及用户添加

1.1 首先安装服务

在samba 服务器端安装:
samba.x86_64 与Windows机器互操作的服务器和客户端软件
samba-client.x86_64 Samba客户程序(客户端,服务端都得有)
samba-common.x86_64 Samba服务器和客户端都使用的文件

 [root@server ~]#  yum install samba.x86_64 -y
 [root@server ~]#  yum install samba.-client.x86_64  -y
 [root@server ~]#  yum install samba-common.x86_64 -y
 启动 smb 服务
 [root@server ~]# systemctl start smb
 [root@server ~]# systemctl enable smb
 关闭防火墙
 [root@server ~]# systemctl stop firewalld  

在客户端

 进行samba 客户端安装安装
 [root@client ~]# yum install samba-client.x86_64 -y
 安装完成,通过 smbclient 对 samba 客户端管理命令来进行查看
 [root@client ~]# smbclient -L //172.25.151.150
  #以匿名用户身份对 samba 服务器上可用的共享服务进行查看

执行如下:
这里写图片描述

在服务端为 samba 服务添加用户(必须为服务器系统中已存在的用户)

 使用 smbpasswd 命令为系统用户设置 Samba 服务程序的密码
 [root@server ~]# smbpasswd -a smbuser   #将系统用户 smbuser 添加为 smb 用户
 New SMB password:                       #设定用户密
 Retype new SMB password:                #再次输入密码
 Added user smbuser.                     #添加成功

执行如下:
这里写图片描述

 可以通过 pdbedit 来管理 Samba 用户数据库
 [root@server ~]# pdbedit 
                -L 列出账户列表
                -Lv 列出账户详细信息的列表

 在客户端执行:
 [root@client ~]# smbclient -L //172.25.151.150 -U smbuser
                # 以用户 smbuser 身份对 samba 服务器上可用的共享服务进行查看

执行如下:
在服务端列出 smb 用户信息
这里写图片描述
在客户端进行查看
这里写图片描述

2. smb的访问管理

2.1 通过samba客户端进行共享

 [root@client ~]# smbclient //172.25.151.150/smbuser -U smbuser
 访问 samba 用户默认访问目录

执行如下:
这里写图片描述
如上显示, 此时可以访问,但无法进行查看,执行 ls 发现不被允许
这是因为服务端 SELinux 的问题
在服务端进行对该服务的允许

 [root@server ~]# getsebool -a | grep samba
                #查看该服务的sebool值
 [root@server ~]# setsebool -P samba_enable_home_dirs on
                #让selinux 允许
 后在smb客户端进行查看访问

执行如下:
在服务端修改 sebool 值
查看 samba 服务的sebool 值
这里写图片描述
修改 samba 服务的 sebool 值
这里写图片描述
在客户端进行查看
这里写图片描述

2.2 通过挂载进行共享

登陆后,可以进行上传下载命令,但不同能进行删除,创建等命令
登陆后上传时,不能切换目录,只能上传登录前客户端所在目录的文件,下载也同样只能下载到当前目录局限性太大,可以通过挂载对共享目录进行使用
登录成功后进行上传命令:
这里写图片描述
无法进行编辑操作:
这里写图片描述

在客户端执行 smbclient -L //172.25.151.150 -U smbuser
可看到smaba 共享目录类型为 disk ,类型为硬盘
可对其进行挂载应用
执行如下:
这里写图片描述

 在客户端执行
 [root@client ~]# mount //172.25.151.150/smbuser /mnt/ -o username=smbuser,password=redhat
 将默认服务端共享目录 smbuser 挂载到客户端 /mnt/ 下
 然后对其进行操作新建文件,删除等操作

 想要开机自动挂载
 可以编写/etc/fstab 文件(必须保证 samba 服务端的服务开启,否则将会无法开机)
 [root@client ~]# vim /etc/fstab
 内容如下:
//172.25.151.150/smbuser   /mnt   cifs   defaults,username=smbuser,password=redhat 0  0
 执行开机自动挂载

 重启后成功

执行如下:
进行挂载操作
这里写图片描述
编辑 /etc/fstab 内容
这里写图片描述

2.3 用户访问限制

可以在 samba 服务端编辑配置文件,限定访问 samba 服务的用户

 编辑/etc/samba/smb.conf
 [root@server ~]# vim /etc/samba/smb.conf
 内容如下
 第 89 行 workgroup = Server #将工作组改为 Server98 行添加用户访问黑/白名单
 98         hosts allow = 172.25.151.50
            #允许172.25.254.139 主机进行访问,其他主机不被允许
 #98        hosts deny = 172.25.151.50
            #拒绝172.25.254.139 主机进行访问,其余主机可以访问
 ~
 编辑完成重启服务

执行如下:
编辑配置文件
这里写图片描述
在 ip 为172.25.151.50 的主机进行测试,可以访问
这里写图片描述
在 ip 为172.25.151.250 的主机进行测试,无法访问
这里写图片描述
黑白名单的限制包括通过用户访问,以及限制用户对共享目录进行挂载使用

2.4 指定Samba共享目录

2.4.1 新建目录

 [root@server ~]# mkdir /smbshare     #作为smb 的共享目录
 并编辑主配置文件/etc/samba/smb.conf
 在最后添加如下:
 322         [DIR]                    #指定共享目录
 323         comment = smbsharedir    #注释
 324         path = /smbshare         #路径
 重启服务
 通过在客户端执行
 [root@client ~]# smbclient -L //172.25.151.150
 可以查看到共享的目录
 此时 /smbshare 可以被访问,但无法被查看,需要修改selinux安全上下文
 [root@server ~]# semanage fcontext -a -t samba_share_t '/smbshare(/.*)?'
                # 将/smbshare 的安全上下文修改为 samba_share_t
 [root@server ~]# restorecon  -Fvvr /smbshare/  #更新目录安全上下文
 此时就可对目录进行访问

执行如下:
在服务端
编辑配置文件
这里写图片描述
在客户端
通过 smbclient 查看共享信息,可看到 共享文件名, DIR
这里写图片描述
执行 smbclient //172.25.151.150/DIR -U smbuser 通过 smbuser 用户进行访问,由于 selinux无法进行访问
这里写图片描述
挂载后也无法进行操作:
这里写图片描述
修改自定义共享目录 /smbshare/ 的安全上下文
这里写图片描述
再进行访问,或是挂载
这里写图片描述
挂载进行使用
这里写图片描述

2.4.2 共享系统目录

 将 /mnt 目录 作为smb 共享目录
 编辑主配置文件 /etc/samba/smb.conf
 编辑内容如下:
 326         [mnt]                 #指定共享目录
 327         comment = mntdir      #注释
 328         path = /mnt           #路径
 修改完成重启服务

 通过在客户端执行
 [root@client ~]# smbclient -L //172.25.254.239
 可以查看到共享的目录
 此时 /mnt 可以被访问,但无法被查看,不能像自建目录一样进行安全上下文的修改,
 因为,系统目录会被多个程序访问使用,修改安全上下文,则只能被 samba 服务访问,显然
 是合适的。此时需要修改 sebool 值

 [root@server ~]# setsebool -P samba_export_all_ro on
 此时smb服务的输出仅可以读,若想对其可写,可修改 sebool 值 samba_export_all_rw
 此时就可以对其进行查看

执行如下:
在服务端
修改配置文件
这里写图片描述
在客户端
通过 smbclient 进行查看共享信息
这里写图片描述
在服务端修改 sebool 值
这里写图片描述
在客户端进行访问
这里写图片描述

2.4.3 对目录进行权限设置

对上述分享后,是无法对目录进行写操作的,因为在配置文件中,服务没有赋予权限

 通过编辑配置文件,对目录进行权限设置:
 [root@server ~]# vim /etc/samba/smb.conf
 内容如下:
 322         [DIR]                   #指定共享目录
 323         comment = smbsharedir   #注释
 324         path = /smbshare        #路径
 325         browseable = yes        #是否允许浏览#此权限若为no 则无法看到 DIR
 326         writeable = yes         #是否可写(前提是对DIR有写的权限)
 327 #       write list = smbuser    #允许写的用户名单
             #允许指定用户或用户组可写(前提是该用户或者用户组对DIR有写的权限)
             #后直接跟用户名称,若名称前有 +(@) 表示用户组
 328         admin users = student   #指定 smb 服务的访问管理用户
 修改完毕后重启服务
通过 setfacl 对共享目录进行附加权限的设置
[root@server ~]# setfacl -Rm  d:u:Sambauser:7 /smbshare
对/smbshare 目录 指定Sambuser 用户可读可写可执行

执行如下:
在服务端编辑配置文件:
这里写图片描述
对共享目录设定附加权限:
这里写图片描述
在客户端进行挂载使用:
这里写图片描述

2.5 多用户管理

以客户端 root 用户身份直接执行
mount -o /172.25.254.239/Samber /mnt/ username=Sambauser,password=redhat
smb服务的挂载点,在切换为普通用户的情况下,是可以被看到的
执行如下:
这里写图片描述

这样不够安全
所以进行多用户挂载

 在客户端安装:cifs-utils  用于安装和管理 CIFS 挂载的实用程序
 [root@client mnt]# yum install cifs-utils.x86_64 -y
 建立smb用户文件 /root/smbusers
 内容如下:输入已知smb用户的用户名以及密码
  1 username=smbuser
  2 password=redhat

  通过如下方式进行挂载:
 [root@client ~]# mount -o credentials=/root/smbusers,sec=ntlmssp,multiuser //172.25.151.150/DIR /mnt
 其中:
     # credentials=filename
     指定包含用户名和/或密码以及可选工作组名称的文件。该文件的格式为:
          username=value   #用户名
          password=value   #密码
          domain=value     #域名
     这比在共享文件(如/etc/fstab)中使用明文密码要好。确保正确地保护任何凭证文件。
     # sec=ntlmssp
     安全模式设置为 ntlmssp ,此模式选择看版本,
     在v3.8之前,主线内核版本的默认值是sec=ntlm。在v3.8中,默认设置sec=ntlmssp。
     # multiuser  多用户模式

 此后切换用户后,无法对smb进行查看,需要进行认证,通过 cifscreds 进行访问
 cifscreds 在内核密钥环中管理NTLM凭据
 在另一用用户下执行:
 [student@client mnt]$ cifscreds add -u smbuser 172.25.151.150
       # cifscreds add [-u 用户名]  samba主机IP
 然后输入密码进行验证就可以

执行如下:
在客户端将 cifs-utils 服务安装完成后,编辑smbusers文件
这里写图片描述
在客户端以 root 用户进行多用户加密模式进行挂载
这里写图片描述
切换用户进行查看,访问被拒绝
这里写图片描述
执行cifscreds add -u smbuser 172.25.151.150 键入密码后进行访问
这里写图片描述

3. windows 下的访问

既然 samba 是用来执行 linux 与 windows 之间的文件共享,当然少如何进行 windows 端的操作

主机名 操作系统 IP
Samba 共享服务器 RHEL 7.0 172.25.151.150
Windows 客户端 Windows 7 172.15.151.39

3.1 windows 匿名用户进行访问

windows 下的匿名用户为 guest

 在 linux 服务端进行操作
 编辑配置文件/etc/samba/smb.conf 
 内容如下:
 第 123 行左右
 124         security = user
 125         passdb backend = tdbsam
 126         map to guest = bad user
             #对 guest 进行映射,
             #即让系统识别 guest 用户身份,为匿名用户

 322         [DIR]
 323         comment = smbsharedir
 324         path = /smbshare
 325         browseable = yes
 326         writeable = yes
 327 #       write list = smbuser
 328         admin users = student
 329         guest ok = yes       #匿名用户允许登陆
 编辑完成重启服务

执行如下:
在 linux 服务端
编辑配置文件
这里写图片描述
这里写图片描述
在共享目录下建立 txt 文档进行测试
这里写图片描述
编辑内容如下
这里写图片描述
在 windows 客户端
要在 Windows 系统中访问共享资源,只需在 Windows 的“运行”命令框中输入两个反斜
杠,然后再加服务器的 IP 地址即可
这里写图片描述
进入共享目录
这里写图片描述
对文件进行编辑
这里写图片描述

3.2 windows 以samba 用户身份进行访问

在 linux 服务端编辑配置文件

 [root@server ~]# vim /etc/samba/smb.conf 
 322         [DIR]
 323         comment = smbsharedir
 324         path = /smbshare
 325         browseable = yes
 326         writeable = yes
 327 #       write list = smbuser
 328         admin users = student
 去掉对虚拟用户允许的编辑即可
 编辑完成重启服务

执行如下:
在 linux 服务端
编辑配置文件,并重启服务
这里写图片描述
在 windows 客户端
在 Windows 的“运行”命令框中输入两个反斜杠,然后再加服务器的 IP 后,进行共享目录。需要进行验证
这里写图片描述
输入 smbuser 用户名及密码
这里写图片描述
验证成功,进行操作
 这里写图片描述
注:由于 Windows 系统缓存的原因,有可在第二次登录时提供了正确的账户和密码,依然会报错,这时只需要重新启动一下 Windows 客户端就没问题了

猜你喜欢

转载自blog.csdn.net/Buster_ZR/article/details/80576313