简单快速部署文件共享服务Samba(最后有企业实战案例)

科技   2024-10-11 18:00   广东  

码字不易,戳下方名片,关注+星标


1 Samba服务基本概念

1.1 什么是Samba服务

Samba是一个用于在Linux/Unix系统上实现与Microsoft Windows系统之间文件和打印共享的开源软件

Samba由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

1.2 Samba的工作原理

Samba的工作基于客户端-服务器模型,当客户端请求访问共享资源时,服务器会经历以下步骤:

请求接收:客户端通过网络发送访问请求至Samba服务器。

配置解析:服务器读取smb.conf配置文件,确定共享设置及权限。

日志记录:所有交互过程均被详细记录,便于故障排查与审计。

权限验证:根据配置执行用户认证,决定是否授予访问权限。

数据交换:一旦验证通过,开始数据的读写操作,仅传输变更部分以提高效率。

1.3 Samba的主要进程

(1)smbd进程

控制发布共享目录与权限、负责文件传输

端口:139/tcp 445/tcp

(2)nmbd进程主要负责提供NetBIOS的域名解析和浏览共享资源的服务

端口:137/udp 138/udp

2 部署和管理Samba服务

2.1 安装Samba服务

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

# 检查是否安装成功
[root@localhost ~]rpm -qa samba
samba-4.19.4-105.el9_4.x86_64

2.2 配置文件详解

Samba的配置文件是在/etc/samba/smb.conf,/etc/samba目录下还有一个配置详细描述文件smb.conf.example。如果不知道某个选项如何配置,可以查看该文件的选项说明。

[root@localhost ~]cat /etc/samba/smb.conf
[global]    # 全局选项
 workgroup = MYGROUP     # 定义samba服务器所在的工作组
 server string = Samba Server Version %v   # 服务的描述
 log file = /var/log/samba/log.%m      # 日志文件存放位置
 max log size = 50     # 日志的最大大小,单位为KB,会自动回滚  
 security = user      # 认证模式有3种:share匿名,user用户密码,server外部服务器用户密码
 passdb backend = tdbsam     # 密码格式:tdbsam 或 ldapsam
 load printers = yes      # 加载打印机
 cups options = raw     # 打印机选项
[homes]               #   局部选项(共享名称)
 comment = Home Directories  # 共享描述
 browseable = no     # 隐藏共享名称
 writable = yes    #  可读写
[printers]      共享名称
 comment = All Printers   # 共享描述
 path = /var/spool/samba  本地的共享目录
 browseable = no  # 隐藏,如果是yes为显示
 guest ok = no ——>   需要帐号和密码访问
 writable = no  ——>  # 设置只读
 printable = yes     # 打印选项
[print$]
 comment = Printer Drivers
 path = /var/lib/samba/drivers 
 write list = @printadmin root     # 可读写的用户列表
 force group = @printadmin   
 create mask = 0664     # 创建文件的mask值
 directory mask = 0775   # 创建目录的mask值

2.3 配置文件共享实例

2.3.1 匿名访问

一般生产环境禁止使用匿名访问,不展开讲解。

2.3.2 通过身份认证登录

场景设置:

有两个用户:user1和user2,要求user1可以对共享目录进行读写操作,user2只能查看,不能修改。

(1)修改配置文件

# 修改前备份
[root@localhost ~]#cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
[root@localhost ~]# vi /etc/samba/smb.conf
[global]
 workgroup = SAMBA
 security = user

 passdb backend = tdbsam

 printing = cups
 printcap name = cups
 load printers = yes
 cups options = raw

[sharedir]
        path = /data/share   # 共享文件目录
        browseable = yes
        writable = yes
        create mask = 0644
        directory mask = 0755
        valid users=user1,user2   ##允许user1,user2访问
        write list=user1      ##允许user1读写

(2)创建用户

# 添加用户
useradd user1
useradd user2


# 创建smb用户并设置密码
[root@localhost ~]smbpasswd -a user1
New SMB password:   # 输入密码
Retype new SMB password:     # 再次输入密码
Added user user1.
[root@localhost ~]smbpasswd -a user2

# 列出smb用户列表
[root@localhost ~]pdbedit -L
user1:1001:
user2:1002:

(3)创建共享目录

# 创建共享目录
mkdir /data/share
# 设置权限

chmod 777 /data/share 

(4)配置防火墙

# 关闭防火墙
systemctl disable --now firewalld

# 或者是放通smb的端口:445和139
firewall-cmd --add-port=139/tcp --per
firewall-cmd --add-port=145/tcp --per
firewall-cmd --reload

(5)启动Samba服务器

# 启动并设置开机自启动
systemctl enable --now smb
# 查看smb状态
systemctl status smb

(5)访问测试

测试一:user1用户——可读写

在window系统上,打开运行界面或直接在目录导航处输入Samba服务器IP地址

回车,输入samba用户和密码,可以进入到共享目录

进入共享目录可以创建目录或文件

测试二:user2用户——只可访问,不可写

换一个系统用户登录,然后登录user2用户,我切换了Administrator用户测试。

根据测试,user2只能查看文件,不能修改文件,符合预设目标


补充说明:

在局域网访问共享文件夹时,由于windows操作系统为了方便用户访问共享,提供了用户信息和共享会话记忆功能,导致输入一次账号密码访问之后,后续其他用户也能自动访问共享文件夹。

通过删除以前的共享会话,重新验证访问共享问价的用户名和密码。


将凭证也删除


3 生产环境综合案例

3.1 需求描述

某运维部门为了更好让每个小组将相关文件上传到共享服务器上,让小李建立Samba文件共享服务器,实现各小组之间的文件共享,确保文件的安全性和权限控制。

3.2 角色和权限定义

角色用户用户组权限
应用运维yy_user01app可读写应用运维资料,可访问公共资料
应用运维yy_user02app可读写应用运维资料,可访问公共资料
服务器运维fwq_userserver可读写应用运维资料,可访问公共资料
网络运维wl_usernetwork可读写网络运维资料,可访问公共资料
桌面运维zm_userzhuomian可读写桌面运维资料,可访问公共资料
部门助理zl_userpublic可读写公共资料
部门经理leaderguanli可读写每个岗位的资料

共享目录有:公共资料,应用运维资料,服务器运维资料,网络运维资料,桌面运维资料

公共目录由部门助理来维护,主要是一些通用的资料,供各小组访问查看。

【温馨提示】用户权限可以根据公司的实际情况来分配,尽量进行角色划分

3.3 配置过程

(1)安装samba服务

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

(2)创建共享目录

生产环境的共享目录一定要足够大,尽量避免放置是根目录下。

# 创建共享目录
[root@localhost ~]mkdir /data/{公共资料,应用运维资料,服务器运维资料,网络运维资料,桌面运维资料}
# 赋予权限
[root@localhost ~]chmod -R 777 /data/{公共资料,应用运维资料,服务器运维资料,网络运维资料,桌面运维资料}
# 查看一下
[root@localhost ~]ll /data
总用量 4
drwxrwxrwx  2 root root    6 10月 11 11:30 服务器运维资料
drwxrwxrwx  2 root root    6 10月 11 11:30 公共资料
drwxrwxrwx  2 root root    6 10月 11 11:30 网络运维资料
drwxrwxrwx  2 root root    6 10月 11 11:30 应用运维资料
drwxrwxrwx  2 root root    6 10月 11 11:30 桌面运维资料

(3)创建共享账户

密码都使用123456

# 创建用户组
groupadd app
groupadd server
groupadd network
groupadd zhuomian
groupadd public
groupadd guanli


# 创建用户,根据权限将不同的人员放置在不同的附属组
useradd -G app,public yy_user01
useradd -G app,public yy_user02
useradd -G server,public fwq_user
useradd -G network,public wl_user
useradd -G zhuomian,public zm_user
useradd -G public zl_user
useradd -G app,server,network,zhuomian,public leader


# 创建smb用户并设置密码,都设置为123456
[root@localhost ~]smbpasswd -a yy_user01
New SMB password:
Retype new SMB password:
Added user yy_user01.
[root@localhost ~]smbpasswd -a  yy_user02
New SMB password:
Retype new SMB password:
Added user yy_user02.
[root@localhost ~]smbpasswd -a fwq_user
New SMB password:
Retype new SMB password:
Added user fwq_user.
[root@localhost ~]smbpasswd -a wl_user
New SMB password:
Retype new SMB password:
Added user wl_user.
[root@localhost ~]smbpasswd -a zm_user
New SMB password:
Retype new SMB password:
Added user zm_user.
[root@localhost ~]smbpasswd -a zl_user
New SMB password:
Retype new SMB password:
Added user zl_user.
[root@localhost ~]smbpasswd -a leader
New SMB password:
Retype new SMB password:
Added user leader.

(4)修改配置文件

打开主配置文件/etc/samba/smb.conf,在文件末尾添加各共享目录的配置。

[公共资料]
        path=/data/公共资料
        public=yes
        browseable=yes
        create mask=0664
        directory mask=0775
        valid users=@public
        write list=zhuli,leader
[应用运维资料]
        path=/data/应用运维资料
        public=yes
        browseable=yes
        create mask=0664
        directory mask=0775
        valid users=@app,leader
        write list=@app,leader
[服务器运维资料]
        path=/data/服务器运维资料
        public=yes
        browseable=yes
        create mask=0664
        directory mask=0775
        valid users=@server,leader
        write list=@server,leader
[网络运维资料]
        path=/data/网络运维资料
        public=yes
        browseable=yes
        create mask=0664
        directory mask=0775
        valid users=@network,leader
        write list=@network,leader
[桌面运维资料]
        path=/data/桌面运维资料
        public=yes
        browseable=yes
        create mask=0664
        directory mask=0775
        valid users=@zhuomian,leader
        write list=@zhuomian,leader

(5)重启smb服务

systemctl restart smb

(6)测试访问

以不同身份登录,测试读写权限。过程省略。可以参考2.3的测试方式


总结:

samba常用于中小型公司的文件共享,大型公司也有使用,但大型公司一般会使用商用的NAS存储,比开源软件的安全性更好。如果合适你们公司需要,可以赶紧用起来了。如果有疑问,可以留言给我,我会竭尽所能来解答!


欢迎转发点亮下方“在看”图标让更多的人看到


如果不想错过精彩内容,记得在公众号页面右上角设为星标,这样每次新文章推送才会第一时间出现在你的订阅列表中。感谢支持!!



往期精彩文章


局域网内构建统一可访问的YUM源(基础运维必备技能)


Linux正则表达式详解(进阶技能)


Linux文件处理三剑客详解(运维高手必备)


Tomcat常用配置和调优(生产环境必备技巧)


Nginx配置文件详解及常用功能配置(实用率90%)


NTP时钟同步服务chrony详解(理论+实操、值得收藏)

firewalld防火墙的详细讲解(实用率99%)


运维李哥不背锅
专注于各种运维技术、,分享Linux基础知识,服务器,数据库,云原生和网络安全等相关技术,各种进阶知识等着你,助你成为技术达人!
 最新文章