Linux-Samba服务
阅读原文时间:2023年07月09日阅读:3

Samba服务

1.Samba的起源

  • 对于windows的网上邻居来讲,共享文件的方式用的是SMB和CIFS协议以及NETBIOS协议Linux/Unix之间用的是NFS协议。

  • 但是Linux和Windows之间是不能共享的,所以澳大利亚国立大学的Andrew Tridgell,决定开发一款软件,这款软件就是为了实现不同的系统之间互相共享文件的,于是一款叫做SMB的软件横空出世了,但是这个名字不能被注册成商标,因为已经有SMB协议了,于是作者给名字上加了两个A,就成了我们即将使用的功能强的文件共享服务器: SAMBA。

2.什么是Samba

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

3.Samba的功能

Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而 Samba较多的用在了Linux与windows之间的数据共享上面。

4.Samba的工作协议

  • Samba服务功能强大,这与其通信基于SMB协议有关。SMB不仅提供目录和打印机共享,还支持认证、权限 设置。-

  • Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系 统下是否安装了NetBIOS协议 。

4.Samba的工作原理

  • 协议协商 客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba 服务器根据客户端的情况,选择优的SMB类型,并做出回应。

  • 建立连接 当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建 立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一 的UID,在客户端与其通信时使用。

  • 访问共享资源 客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如 果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源。

  • 断开连接 共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接 。

5.Samba使用的 damons

5.1NetBIOS 机器间的沟通
  • 取得对方主机的NetBIOS name 定位该主机所在:

  • 利用对方给予权限存取可用资源

5.2SAMBA 使用下面两个服务来控制上面两步骤,分别是:
  • nmbd

    • 这个daemon是用来管理工作组,NetBIOS name等等的解析。

    • 主要利用 UDP 协议开启 port 137 138 来负责名称解析的任务。

  • smbd

    • 这个daemon主要用来管理SAMBA主机分享的目录,档案与打印机等等。

    • 主要利用可靠的TCP协议来传输数据,开放端口为139.

所以SAMBA每次启动至少都需要有这个daemon,而当我启动了SAMBA之后,主机系统就会启动137,138 这两个UDP 及139这个TCP端口。

6.Samba联机模式介绍

两种最常见的局域网的联机模式

  • peer/peer(对等模式)

  • domain model(主控模式)

(1)peer/peer (workgroup model,对等模式)

使用 peer/peer 的架构的好处是每部计算机均可以独立运作,而不受他人的影响!不过, 缺点就是当整个网域内的所有人员都要进行数据分享时,光是知道所有计算机里面的账号与密码,就会很伤脑筋了! 所以, Peer/Peer 的架构是比较适合 :

  1. 小型的网域

  2. 没有需要常常进行档案数据分享的网络环境

  3. 每个使用者都独自拥有该计算机的拥有权

(2)domain model(主控模式)

将所有的账号与密码都放置在一部主控计算机 (Primary Domain Controller, PDC) 上面,在我的网域里面,任何人想要使用任何计算机时,都需要在屏幕前方输入账号与密码,然后通通藉由 PDC 服务器的辨识后,才给予适当的权限。也就是说,不同的身份还具有不一样的计算机资源权限。

7.Samba的常见应用

7.1Samba能做什么?
  • 分享档案与打印机服务

  • 可以提供用户登入Samba主机时的身份认证,以提供不同身份者的个别数据。

  • 可以进行windows网络上的主机名解析

  • 可以进行装置的分享

7.2Samba服务器的应用实例:
  • 利用软件直接编修WWW主机上面的网页数据

    • 用FTP修改,后上传;不方便,很有可能传上去旧版本的。

    • 在线修改比较能迅速看到结果。

  • 做成可直接联机的文件服务器

    • 因为每个人登陆的账户名不同,这样对目录的权限也不同,实现权限控制。

8.Samba服务器的搭建

服务端:
8.1安装Samba服务

[root@smaba-10.0.0.222 ~]# yum install -y samba

安装包说明:

  • samba-common //主要提供samba服务器的设置文件与设置文件语法检验程序testparm

  • samba-client //客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集

  • samba-swat //基于https协议的samba服务器web配置界面

  • samba

    //服务器端软件,主要提供samba服务器的守护程序,共享文档,日志的轮替,开机默认选项Samba服务器安装完毕,会生成配置文件目录/etc/samba和其它一些samba可执行命令工具,/etc/samba/smb.conf是samba的核心配置文件。

8.2Samba主配置文件及参数说明

[global]
workgroup = SHUAI #Samba Server 所要加入的工作组或者域
security = user #安装验证方式,总共有四种

    passdb backend = tdbsam            #定义用户后台类型,总共有三种

    printing = cups  
    printcap name = cups  
    load printers = yes                  #设置在Samba服务启动时是否共享打印机设备  
    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

Samba服务器的主要配置参数介绍:

主配置文件由两部分构成:global 部分和 share 部分。

Global部分参数解释:该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。

参数

说明

workgroup = WORKGROUP

设定 Samba Server 所要加入的工作组或者域

server string = Samba Server Version %v

设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号

interfaces = lo eth0 10.0.0.1/24

设置Samba Server监听的网卡,可以写网卡名,也可以写该网卡的IP地址

hosts allow = 127. 192.168.1. 192.168.10.1

表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。 例如:hosts allow=172.17.2.EXCEPT172.17.2.50 表示容许来自172.17.2.*的主机连接,但排除172.17.2.50

hosts allow=10.0.0.1/255.255.255.0

表示允许来自10.0.0.1/255.255.255.0子网中的所有主机连接

hosts allow=shuai.com

表示允许来自shuai.com网域的所有计算机连接

max connections = 0

max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。

deadtime = 0

deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。

time server = yes/no

time server用来设置让nmdb成为windows客户端的时间服务器。

log file = /var/log/samba/log.%m

设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。

max log size = 50

设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。

security = user

share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。(在Redhat7上安装,该选项已被弃用,选择该选择,服务不能启动) user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。 server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。 domain:域安全级别,使用主域控制器(PDC)来完成认证

passdb backend = tdbsam

passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写

encrypt passwords = yes/no

是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启

smb passwd file = /etc/samba/smbpasswd [如果之前设置的是smbpasswd模式的话]

用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建

username map = /etc/samba/smbusers

用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯

guest account = nobody

用来设置guest用户名

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度

domain master = yes/no

设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务

local master = yes/no

local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举

preferred master = yes/no

设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。如果同一个区域内有多台Samba Server,将上面三个参数设定在一台即可。

os level = 200

设置samba服务器的os level。该参数决定Samba Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些

domain logons = yes/no

设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项

load printers = yes/no

设置是否在启动Samba时就共享打印机

printcap name = cups

设置共享打印机的配置文件

printing = cups

设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx

Share部分参数解释:该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。

参数

说明

comment = 任意字符串

comment是对该共享的描述,可以是任意字符串

path = 共享目录路径

path用来指定共享目录的路径

browseable = yes/no

browseable用来指定该共享是否可以浏览

writable = yes/no

writable用来指定该共享路径是否可写。

available = yes/no

available用来指定该共享资源是否可用。

admin users = 该共享的管理者

说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。 例如:admin users =david,sandy(多个用户中间用逗号隔开)。

valid users = 允许访问该共享的用户

说明:valid users用来指定允许访问该共享资源的用户。 例如:valid users = david,@dave,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。)

invalid users = 禁止访问该共享的用户

说明:invalid users用来指定不允许访问该共享资源的用户。 例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)

write list = 允许写入该共享的用户

说明:write list用来指定可以在该共享下写入文件的用户。 例如:write list = shuai

public = yes/no

public用来指定该共享是否允许guest账户访问

read only = yes/no

说明:以只读方式共享当与writable发生冲突时也writable为准

read list = 只读用户名/@组名

设定此名单内的成员为只读(用户名/@组名)

create mask

建立文件时所给的权限

directory mask

建立目录时所给的权限

force group

指定存取资源时须以此设定的群组使用者进入才能存取(用户名/@组名

force user

指定存取资源时须以此设定的使用者进入才能存取(用户名/@组名

allow hosts

设定只有此网段/IP的用户才能访问共享资源

deny hosts

设定只有此网段/IP的用户不能访问共享资源

guest ok =yes/no

若为否则进行身份验证(只有当security = share 时此项才起作用

8.3添加一个共享目录/data

要求:

在 服务器上配置 SMB 服务 您的 SMB 服务器必须是 SHUAI 工作组的一个成员 共享 /data 目录共享名必须为 data 只有 10.0.0.0/24内的客户端可以访问 data 共享 用户 shuai 必须能够读取共享中的内容,如果需要的话,验证的密码是 123456。

[root@smaba-10.0.0.222 ~]# useradd -M -s /sbin/nologin shuai
[root@smaba-10.0.0.222 ~]# useradd -M -s /sbin/nologin shuai01
[root@localhost ~]# pdbedit -a shuai
new password:
retype new password:
[root@localhost ~]# pdbedit -a shuai01
New SMB password:
Retype new SMB password:
[root@smaba-10.0.0.222 ~]# pdbedit -L
shuai01:1002:
shuai:1001:
[root@smaba-10.0.0.222 ~]# mkdir -p /data
[root@smaba-10.0.0.222 ~]# chown -Rf shuai.shuai /data/
[root@smaba-10.0.0.222 ~]# chmod -R 777 /data/ #所有用户都可以对目录里的文件进行增删改查,如不给权限,则只能对本用户创建的文件进行增删改查
[root@smaba-10.0.0.222 ~]# ll -d /data/
drwxr-xr-x 2 shuai shuai 6 Sep 10 08:40 /data/
[root@smaba-10.0.0.222 ~]# cat /etc/samba/smb.conf

See smb.conf.example for a more detailed config file or

read the smb.conf manpage.

Run 'testparm' to verify the config is correct after

you modified it.

[global]
workgroup = SHUAI

[data]
path = /data
public = yes
browseable = yes
write list = shuai01
hosts allow = 10.0.0.0/24
[root@smaba-10.0.0.222 ~]# systemctl start smb
[root@smaba-10.0.0.222 ~]# systemctl enable smb

8.4samba常用命令

8.4.1添加用户

pdbedit -a shuai

8.4.2修改用户密码

smbpasswd

8.4.3删除用户和密码

pdbedit –x –u
smbpasswd –x

8.4.4查看samba用户列表

pdbedit –L –v #详细信息
[root@smaba-10.0.0.222 ~]# pdbedit -L
shuai01:1002:
shuai:1001:
cat /var/lib/samba/private/passdb.tdb

8.4.5查看samba服务器状态

smbstatus

8.4.3客户端匿名连接

smbclient -L //10.0.0.222 -N

8.6Linux系统挂载测试
客户端

要求:

通过 smb 多用户的方式将共享目录 data 挂载到/data上。要求在对该共享目录挂载时,以 shuai 的身份进行操作。要求每次开机该共享目录可以自动挂载

[root@web01 ~]# yum -y install samba-client cifs-utils
[root@web01 ~]# smbclient -L //10.0.0.222 -N ##通过该命令可匿名查看smb服务器共享的目录
Anonymous login successful

Sharename       Type      Comment  
---------       ----      -------  
data            Disk  
IPC$            IPC       IPC Service (Samba 4.10.4)  

Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

Server               Comment  
---------            -------

Workgroup            Master  
---------            -------  

[root@web01 ~]# vim /etc/samba/shareuser.smb #这个文件没有,需要创建
username=shuai
password=123456
domain=SHUAI
[root@web01 /data]# chmod 600 /etc/samba/shareuser.smb
[root@localhost ~]# vim /etc/fstab #在该文件中添加如下语句
//10.0.0.222/data /smb cifs credentials=/etc/samba/shareuser.smb 0 0
[root@web01 ~]# mount -a
[root@web01 ~]# df -h|tail -1
//10.0.0.222/data 50G 1.7G 49G 4% /smb

8.7Windows测试

8.8文件测试

[root@web01 ~]# echo "我是猪" >> /smb/shuai02.txt

9.实际应用

9.1现有一个工作组devops,发布共享目录/share,此共享目录允许所有员工访问

[root@smaba-10.0.0.222 ~]# vim /etc/samba/smb.conf
[global]
workgroup = DEVOPS
security = user
passdb backend = tdbsam
map to guest = bad user
dns proxy = no
[share]
comment = Share Directories
path = /share
read only = yes
guest ok = yes
[root@smaba-10.0.0.222 ~]# systemctl restart smb
[root@smaba-10.0.0.222 ~]# mkdir -p /share

9.2现有多个部门,因工作需要,将TS部的资料存放/ts目录中集中管理,以便TS人员浏览,并且该目录只允许TS部员工访

[root@smaba-10.0.0.222 ~]# mkdir -p /ts
[root@smaba-10.0.0.222 ~]# useradd ts_user1 -g ts -s /sbin/nologin
[root@smaba-10.0.0.222 ~]# chown -R ts_user1:ts /ts
[root@smaba-10.0.0.222 ~]# chmd 660 /ts
[root@smaba-10.0.0.222 ~]# pdbedit -a ts_user1

#进行测试;在创建一个其它用户测试可否访问?
[root@smaba-10.0.0.222 ~]# vim /etc/samba/smb.conf
[global]
workgroup = WG
security = user
passdb backend = tdbsam
map to guest = bad user
dns proxy = no
[share]
comment = Share Directories
path = /share
read only = yes
guest ok = yes
[ts]
comment = ts
path = /ts
writable = yes
write list = ts
[root@smaba-10.0.0.222 ~]# systemctl restart smb

9.3实现不同的用户访问同一个共享目录具有不同的权限,便于管理和维护。

a. 某公司有5个部门,分别为:人事行政部(HR)、财务部(FM)、技术支持部(TS)、项目部(PD)、客服部(CS) b. 各部门的文件夹只允许本部门员工有权访问;各部门之间交流性质的文件放到公用文件夹中(SHARE) c. 每个部门都有一个管理本部门文件夹的管理员账号和一个只能新建和查看文件的普通用户权限的账号 d. 公用文件夹中存放各部门共享文件的文件夹 e. 对于各部门自己的文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文 件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改 和删除。不是本部门用户不能访问本部门文件夹 f. 对于公用文件夹中的各部门共享文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下 新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访 问,不能更改和删除。本部门用户(包括管理员和普通用户)在访问其他部门共享文件夹时,只能查看不能修改删除新建

  • 名称要求:(可忽略大小写)

各文件夹名称,HR、FM、TS、PD、CS、SHARE HR

管理员HR_ADMIN,普通用户HR_USER

FM管理员FM_ADMIN,普通用户FM_USER

TS管理员TS_ADMIN,普通用户TS_USER

PD管理员PD_ADMIN,普通用户PD_USER

CS管事员CS_ADMIN,普通用户CS_USER

#HR
[root@smaba-10.0.0.222 ~]# useradd hr_admin hr_user -s /sbin/nologin
[root@smaba-10.0.0.222 ~]# smbpasswd -a hr_admin
[root@smaba-10.0.0.222 ~]# smbpasswd -a hr_user
[root@smaba-10.0.0.222 ~]# mkdir -p /company/HR
[root@smaba-10.0.0.222 ~]# chmod 1775 /company/HR
[root@smaba-10.0.0.222 ~]# chown hr_admin:hr_admin /company/HR
#SHARE
[root@smaba-10.0.0.222 ~]# mkdir -p /company/share
[root@smaba-10.0.0.222 ~]# mkdir -p /company/share/HR
#smb
[root@smaba-10.0.0.222 ~]# vi /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
map to guest = bad user
dns proxy = no
[share]
comment = Share
path = /share
browseable = yes
read only = yes
guest ok = yes
[hr]
comment = HR
path = /company/HR
browseable = yes
writable = yes
admin users = hr_admin
valid users = hr_user,hr_admin
create mask = 0750
directory mask = 0750
[share_hr]
comment = share_hr
path = /company/share/HR
writable = yes
admin users = hr_admin
valid users = hr_user,hr_admin

#重启服务并进行测试
[root@smaba-10.0.0.222 ~]# systemctl restart smb