环境

Windows11、VMware Workstation 16.2.2

系统

Red hat7.0

说明

samba是什么?能干什么?什么场合需要用到它?

  • samba 是基于SMB协议(ServerMessage Block,信息服务块)的开源软件,samba也可以是SMB协议的商标。SMB是一种Linux、UNIX系统上可用于共享文件和打印机等资源的协议,这种协议是基于Client\Server型的协议,Client端可以通过SMB访问到Server(服务器)上的共享资源。当Windows是 Client,CentOS是服务器时,通过Samba就可以实现window访问Linux的资源,实现两个系统间的数据交互。
  • Linux对于开发来说是一个非常好的系统,但是人机友好不如windows,我就通常在windows上用sourceinsight编辑代码,然后在Linux端编译运行,而且经常需要把音视频从Linux和windows端互相拷贝,这时候Samba就显得很方便了。

部署

执行yum源安装

[root@jw2031-122 ~]# yum install samba -y

检查是否安装成功

[root@jw2031-122 ~]# rpm -qa |grep samba
samba-libs-4.6.2-8.el7.x86_64
samba-common-4.6.2-8.el7.noarch
samba-client-libs-4.6.2-8.el7.x86_64
samba-common-libs-4.6.2-8.el7.x86_64
samba-4.6.2-8.el7.x86_64
samba-common-tools-4.6.2-8.el7.x86_64

配置文件:

/etc/samba/smb.conf

常用配置文件结构说明:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

【自定义共享目录】
comment #共享目录描述信息
path #共享目录路径
browseable # 共享目录在网络中是否可见
public #是否允许匿名用户访问共享文件或打印机资源
guest ok #共享目录是否允许所有人访问
invalid user #禁止访问该共享的用户
valid users = 用户名 #设置访问用户
valid users = @组名
readonly = yes #只读 #设置目录只读还是可读写
readonly = no #读写
writable = yes #读写 #指定共享目录有读写权还是只读权
writable = no #只读
write list = 用户名 #设置对共享目录具有可读写权限的用户名或组名,多个用户名或组名以空格分隔
write list = @组名 #若writeable=no,则不在write list列表中的用户将具有只读权限
create mask = 文件权限值 #设置用户在共享目录下创建文件默认访问权限。
directory mask = 子目录权限值 #设置用户在共享目录下创建子目录的默认访问权限

匿名访问共享目录

实例:某学校办公室通过samba服务器发布公共共享目录“/usr/share/public”共享名为public_doc,允许除192.168.22.222以外的192.168.22.0网段中所有客户端访问,可以写入文件,但是不可以删除或修改其他用户文件。

[root@Jw2031-122 ~]# mkdir /usr/share/public
[root@Jw2031-122 ~]# touch /usr/share/public/file01.md
[root@Jw2031-122 ~]# chmod 1777 /usr/share/public //所有用户可写入但不能删他人文件

[root@Jw2031-122 ~]# vi /etc/samba/smb.conf

[global] //全局参数
workgroup = SAMBA //设置samba服务所在的工作组
security = user //设置身份验证方式
map to guest = Bad User //开启匿名访问
hosts allow = 192.168.22. except 192.168.22.222 //默认允许所有IP访问,允许访问与不允许访问ip地址

[public_doc]
comment = public
path = /usr/share/public
guest ok = yes //允许匿名访问
browseable = yes //共享目录是否可见
writeable = yes //共享目录可以读写
printable = no //用户不可以打印

测试:略🦵

用户认证访问共享目录

实例1:在samba服务器上按部门建立相应目录,要求教务处和学生处只可以被校长和本部门员工访问,禁止非本部门员工访问。

  • 办公室

目录:/usr/share/public 共享名:public_doc 目录访问权限:匿名用户均可读写执行

  • 教务处

目录:/usr/share/jwc 共享名:jwc_doc 部门组账号名:gjwc 部门中用户:rector(读写执行)、zhang3(读取)

  • 学生处

目录:/usr/share/xsc 共享名:xsc_doc 部门组账号名:gxsc 部门中用户:rector(读写执行)、li4(读取)


步骤1:按部门创建组账号归属相关部门

[root@Jw2031-122 ~]# groupadd -r gjwc //创建ID号小于等于1000的系统组账号
[root@Jw2031-122 ~]# groupadd -r gxsc
[root@Jw2031-122 ~]# useradd -M -G gjwc -s /sbin/nologin zhang3 //-M 不创建家目录
[root@Jw2031-122 ~]# useradd -M -G gxsc -s /sbin/nologin li4 //-G 指定所属附加组
[root@Jw2031-122 ~]# useradd -M -G gjwc,gxsc -s /sbin/nologin rector //-S 指定用户登录使用的Shell

步骤2:使用pdbedit命令创建与linux系统用户同名的samba用户。

[root@Jw2031-122 ~]# pdbedit -a zhang3

[root@Jw2031-122 ~]# pdbedit -a li4

[root@Jw2031-122 ~]# pdbedit -a rector

步骤3:创建各部门相应的共享目录和访问权限

[root@Jw2031-122 ~]# mkdir -p /usr/share/public
[root@Jw2031-122 ~]# mkdir -p /usr/share/jwc /usr/share/xsc
[root@Jw2031-122 ~]# touch /usr/share/jwc/file1.tar /usr/share/xsc/file2.tar
[root@Jw2031-122 ~]# chown rector.gjwc /usr/share/jwc //修改目录的属主及属组
[root@Jw2031-122 ~]# chown rector.gxsc /usr/share/xsc
[root@Jw2031-122 ~]# ll -d /usr/share/jwc /usr/share/xsc
drwxr-xr-x. 2 rector gjwc 23 5月 1 18:23 /usr/share/jwc
drwxr-xr-x. 2 rector gxsc 23 5月 1 18:23 /usr/share/xsc
[root@Jw2031-122 ~]# chmod 750 /usr/share/jwc //修改目录的访问权限
[root@Jw2031-122 ~]# chmod 750 /usr/share/xsc
步骤4:修改Samba主配置文件smb.conf

[root@Jw2031-122 samba]# vi smb.conf

[global]
security = user //设置Samba服务器对客户端进行身份验证的方式
idmap config * : backend = tdb

[jwc_doc]
comment = jwc data
path = /usr/share/jwc
create mask = 770
directory mask = 770
valid users = rector @gjwc
write list = rector @gjwc

[xsc_doc]
comment = xsc data
path = /usr/share/xsc
browseable = No
create mask = 770
directory mask = 770
valid users = rector @gxsc
write list = rector @gxsc

测试

windows 测试略~

断开连接小命令

1
2
在Windows系统下删除远程连接:
net use * /delete

linux客户端挂载✍

install⤵️

samba-client
samba-common
cifs-utils

/dyzx_share为客户端共享名并非目录

[root@zs jwc]# mount -o username=Anonymous //192.168.22.150/dyzx_share /share ##匿名挂载

[root@zs zs]# mount -o username=rector //192.168.22.150/dyzx_jwc /jwc ##用户挂载