Linux下samba服务器的搭建与配置

本文详细介绍了如何在Linux下搭建samba服务器,包括samba的概念、软件架构,以及服务的安装、配置和权限设置。在配置过程中,涉及到smb.conf文件的修改、SELinux安全上下文的调整、防火墙规则的添加,以及samba用户的管理。此外,还讲解了如何处理多用户挂载时的安全问题,确保只有授权用户才能访问共享资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、samba的相关概念

1、samba的定义

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

  • 目标:让Windows与Unix-LIke 这两个不同的操作系统平台相互共享数据的文件系统

2、SAMBA的软件架构

  • samba服务器端的应用程序,这个套件主要提供了SAM服务器所需的各项服务程序 (smbd及nmbd )、SAMBA的文件档 ( document )、以及其它与SAMBA 相关的logrotate 设定文件及开机默认选项档案等 。
  • samba-common:这个套件则主要提供了 SAMBA 的主要配置文件(smb.conf) 、 smb.conf 语法检验的测试程序( testparm )等等,samba的支持文件;
  • samba-client客户端的应用程序,这个套件则提供了当Linux做为SAMBAClient端时,所需要的工具指令,例如挂载SAMBA文件格式的mount.cifs、取得类似网上邻居相关树形图的smbtree等。如果Linux系统共享资源,没有Windows作为测试,可以用LInux自带的samb-client作为测试端!

二、搭建samba服务器

服务端ip=172.25.70.22

(1)yum search samba 寻找可以提供此服务的软件

在这里插入图片描述

(2)yum install samba-client samba samba-common 安装3个安装包

在这里插入图片描述
在这里插入图片描述

(3)rpm -qa samba 查看samba服务的版本

在这里插入图片描述

(4)rpm -ql samba-common 查看samba服务的主配置文件

  • /etc/samba/smbusers :samba服务设置samba虚拟用户的配置文件

在这里插入图片描述

(5)getenforce 查看一下selinux的状态,如不是enforcing,通过vim /etc/sysconfig/selinux改为enforcing

在这里插入图片描述
(6)vim /etc/samba/smb.conf 查看samba配置文件

  • 看到如果selinux开启,必须更改samba共享目录的安全上下文 samba_share_t
  • 如果共享的目录不只是SAMBA,还包括FTP或者其它服务,使用public_content_t大家都能读取的类型

在这里插入图片描述

(7)打开nmb服务,smb服务,且开机自启动
systemctl start nmb
systemctl start smb
systemctl enable smb

  • NMB(NetBIOS Message Block):可以通过主机名代替IP地址来访问局域网里的主机, 把这台Linux机器所共享的工作组及在此工作组下的netbios name解析出来,主机名与IP的映射。

在这里插入图片描述
在这里插入图片描述

(8)添加到防火墙中
firewall-cmd --permanent --add-service=samba
firewall-cmd --permanent --add-service=samba-client
firewall-cmd --reload

在这里插入图片描述

(9)netstat -antlupe | grep smb 查看smb服务的端口

通常使用445/tcp进行所有的连接;也可以使用TCP端口139,UDP端口137、138向后兼容!

在这里插入图片描述
(10)pdbedit -L 查看samba服务器的samba用户
(11)useradd westos 建立westos用户、ranran用户
(12)smbpasswd -a westos 将westos用户和ranran用户加入samba用户里面,并且设置密码123456

  • smbpasswd -a 添加用户(被添加用户必须是系统用户
  • smbpasswd -x 删除用户

在这里插入图片描述

在客户端 ip=172.25.70.122
(1)yum install samba-client -y 安装这个服务,这个客户端才可以使用smb服务端的资源

在这里插入图片描述

在这里插入图片描述

(2)smbclient -L //172.25.70.22 匿名用户登录(-L表示list列出)

在这里插入图片描述

(3)smbclient -L //172.25.70.22 -U westos samba用户登录,默认登录到此用户的家目录

在这里插入图片描述
在这里插入图片描述

(4)smbclient //172.25.70.22/westos -U westos 直接进入samba共享服务
在这里插入图片描述
(5)mount //172.25.70.22/westos /mnt -o username=westos,password=123456

  • 将samba服务器的目录挂载在本地目录/mnt下面,挂载的时候必须加上samba用户,cd /mnt进入挂载目录,实际上进入了samba服务器的共享目录
  • 没有挂载在本地的话只能ls查看,只有挂载在本地才可以进行上传下载等等操作

在这里插入图片描述

在这里插入图片描述

三、samba服务配置及权限的更改

1、基础配置修改

1.1 域名
 89 workgroup = WESTOS

在这里插入图片描述
在这里插入图片描述

1.2 黑白名单

(1)白名单

95  hosts allow = 172.25.70.122  只允许我的客户端登录

在这里插入图片描述

测试
客户端ip=172.25.70.122,可以登录

在这里插入图片描述

真机 ip=172.25.70.250,不可以登录

在这里插入图片描述

(2)黑名单

95 hosts deny = 172.25.70.122  不允许我的客户端登录,其余都可以登录

在这里插入图片描述

测试

客户端ip=172.25.70.122,不可以登录

在这里插入图片描述
真机 ip=172.25.70.250, 可以登录

在这里插入图片描述

2、权限

2.1 共享自定义目录

在**服务器端**
(1)mkdir /westos_smb 在samba服务器上面建立一个共享目录 /westos_smb
(2)vim /etc/samba/smb.conf 编辑配置文件,写入:

[WESTOS]                          samba服务器对外共享的总名称
comment = Share Directory  说明此目录为共享目录       
path = /westos_smb              服务器实际共享的目录 

但是 ,Selinux默认是禁止自定义的目录成为共享目录!

(3)semanage fcontext -a -t samba_share_t ‘/westos_smb(/.*)?’ 更改安全上下文
(4)restorecon -RvvF /westos_smb 加载使其生效
在这里插入图片描述

(5)在 测试端smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,会发现可以看,但是无法上传和删除文件。

在这里插入图片描述
服务端

(6) vim /etc/samba/smb.conf 写入

  [WESTOS]                          samba服务器对外共享的总名称
   comment = Share Directory  说明此目录为共享目录       
   path = /westos_smb              服务器实际共享的目录 
   writable = yes                      登陆进去是可以rm删除和put上传(不识别touch)

在这里插入图片描述
(7)chmod 777 /westos_smb 给此自定义共享目录/westos_smb 满权限
在这里插入图片描述
(8)在 测试端smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,此时可以上传,删除文件。

在这里插入图片描述

(9)若给此自定义共享目录/westos_smb 755 权限,chmod 755 /westos_smb

在这里插入图片描述

(10)在 测试端smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,此时会出现可以上传文件但是无法删除文件的现象。

在这里插入图片描述
(11)此时给samba用户设定可操作权限 setfacl -m u:westos:rwx /westos_smb
(12)在 测试端smbclient //172.25.70.22/WESTOS -U westos 登录samba服务器,此时就可以删除文件了。

在这里插入图片描述

2.2 共享系统目录

(1) vim /etc/samba/smb.conf 写入

  [MNT]                                                        samba服务器对外共享的总名称
   comment = Share System mnt  Directory  说明此目录为系统共享目录       
   path = /mnt                                            服务器实际共享的目录 
   writable = yes                                        登陆进去是可以rm删除和put上传(不识别touch)

在这里插入图片描述

(2)在 测试端smbclient //172.25.70.22/MNT -U westos 登录samba服务器,会发现可以看,但是无法上传和删除文件。

在这里插入图片描述
(3)由于selinux处于enforceing状态,故应在selinux中设置 setsebool -P samba_export_all_ro onsetsebool -P samba_export_all_rw on , 查看是否打开 getsebool -a | grep samba

在这里插入图片描述

若觉得降低了安全性,可以只打开只读,然后给指定用户读写权限

在这里插入图片描述

(4)在 测试端smbclient //172.25.70.22/MNT -U westos 登录samba服务器,此时就可以上传和删除文件了。

在这里插入图片描述

2.3 隐藏目录

服务端:
(1)vim /ect/samba/smb.conf 写入

 browseable=no   隐藏这个共享目录,使客户端-L看不见samba服务器对外共享的目录,但是实际上是存在的,可以进去

在这里插入图片描述

(2)systemctl restart smb

客户端测试:
(1)smbclient -L //172.25.70.22 (任何-L)看不到 WESTOS, 但是**smbclient //172.25.70.22/WESTOS -U westos** 可以进入WESTOS。
在这里插入图片描述
在这里插入图片描述

2.4 可登录用户

服务端:
(1)vim /ect/samba/smb.conf 写入

 valid users=westos   客户端可以用来登陆samba服务端的samba用户身份

在这里插入图片描述
(2)systemctl restart smb

客户端测试:

(1)smbclient //172.25.70.22/WESTOS -U westos 可以,因为配置文件只允许westos这个samba用户登录,smbclient //172.25.70.22/WESTOS -U ranran 不可以,因为配置文件没有允许ranran这个samba用户登录。在这里插入图片描述
若想让ranran用户在此条件上也可以登录,则
服务端:
(1)vim /ect/samba/smb.conf 写入

 valid users=@/+westos   属于westos组的用户才可以登陆samba服务器 

在这里插入图片描述
(2)systemctl restart smb
(3)usermod -G westos ranran 将ranran用户加入westos组
在这里插入图片描述
客户端测试: smbclient //172.25.70.22/WESTOS -U ranran 此时ranran用户就可以登录了。
在这里插入图片描述

2.4 可写用户列表

服务端:
(1)vim /ect/samba/smb.conf 写入

 write list =westos   可写用户的列表(和 writable=yes只能一个存在),服务允许只有westos用户才可以对samba目录写

在这里插入图片描述
(2)systemctl restart smb

客户端测试:
(1)此时 westos可写,ranran不可写。

smbclient //172.25.70.22/WESTOS -U westos
smbclient //172.25.70.22/WESTOS -U ranran

在这里插入图片描述

(2)因为文件系统不允许ranran操作samba目录,只允许了westos

在这里插入图片描述
(3)允许ranran操作samba目录,

在这里插入图片描述

(4)smbclient //172.25.70.22/WESTOS -U ranran 此时ranran也可写。
在这里插入图片描述

2.5 匿名用户登录

现在匿名用户不可以登录
在这里插入图片描述
服务端:
(1)vim /ect/samba/smb.conf 写入

guest ok =yes                      使匿名用户可以登陆
map to guest = bad user        使匿名用户可以挂载,使挂载进程识别samba匿名用户

在这里插入图片描述
在这里插入图片描述

(2)systemctl restart smb

(3) 客户端测试: ,此时可以登录

在这里插入图片描述

2.6 提升用户权限

服务端:
(1)vim /ect/samba/smb.conf 写入

admin users = studentadmin users = westos    指定 smb 服务的访问管理用户 

(2)systemctl restart smb

(3) 客户端测试:

在这里插入图片描述

四、smb的多用户挂载

现象:root挂载,但是su - kiosk, kiosk也可以访问,不安全!
要求:自己挂载的,只能自己看,别人要看需要通过验证!

在客户端

(1)yum install cifs-utils 在客户端安装可以实现多用户挂载的服务,客户端的每个用户只能看自己的
在这里插入图片描述
(2)vim /root/smbpasswd 编辑smb挂载用户身份的一个认证文件,之前挂载的时候用户是裸露在外面的,现在写在认证文件里面
(3)chmod 600 /root/smbpasswd 只有管理员可以看
(4)ls -l /root/smbpasswd

在这里插入图片描述

在这里插入图片描述
(5)mount //172.25.70.22/WESTOS /mnt -o credentials=/root/smbpasswd 以认证文件方式挂载,现在不裸露samba用户身份了,但是切换到student用户还是可以查看挂载目录内的内容,不验证。
在这里插入图片描述
(6)解挂
(7)mount //172.25.70.22/WESTOS /mnt -o credentials=/root/smbpasswd ,sec=ntlmssp,multiuser root用户挂载的时候不让别的本地用户看自己的操作,su - student切换到本地用户, 查看,被拒绝,现在安全了

  • sec=ntlmssp 认证方式
  • multiuser 多用户认证

在这里插入图片描述

(7)那么此普通用户student,想要查看此共享目录内的内容,就要通过验证:
cifscreds add -u ranran 172.25.70.22 给本地用户student一个samba用户的身份,此时他就可以通过验证了。

  • cifscreds clear -u ranran 172.25.70.22 取消samba用户身份

(8)cd /mnt 切换到挂载目录,touch ran 新建文件,发现 新建文件ran在客户端属于ha用户

在这里插入图片描述
(9)在**服务端** 查看新建文件ran,发现ran文件属于ranran用户。

在这里插入图片描述

  • 为什么文件不属于同一用户呢:在客户端ran文件的所属用户是ha(id=1002),是因为在客户端没有ranran用户,我们只是给本地用户student一个samba用户的身份,这个身份是ranran,让客户端的本地用户可以使用服务端的用户通过验证进入,而ranran这个用户在服务端是1002,客户端如果没有用户id为1002,则显示id1002,若有则显示客户端中1002对应的用户名。id一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值