12.SMB

内容分享12小时前发布
0 0 0

12.SMB

SMB 服务介绍

Samba 是在Linux和UNIX系统上实现SMB协议(Server Messages Block,信息服务块),是一种在局域网上共享文件和打印机的一种通信协议。曾用名CIFS(通用互联网文件系统 Common Internet File System), 公元1983年诞生于IBM。SMB协议是C/S架构,通过该协议客户机(包括Windows、linux、Unix系统)可以访问服务器(包括Windows、linux、Unix系统)上的共享文件系统、打印机及其他资源。

Linux既可以充当服务器提供SMB文件共享,也可以充当客户端访问SMB共享。

客户端挂载SMB文件共享,需要安装cifs-utils软件包。

服务器端提供SMB共享,需要安装samba程序包。

准备环境

关闭防火墙


[root@server ~ 15:17:44]# systemctl disable firewalld.service  --now

下载软件


[root@server ~ 15:41:53]# yum install -y samba samba-client

准备共享目录


[root@server ~ 15:42:44]# mkdir -p /shares/samba[root@server ~ 15:43:10]# groupadd -g 2000 developers
[root@server ~ 15:43:27]# chgrp developers /shares/samba/
[root@server ~ 15:43:44]# chmod 2775 /shares/samba/
[root@server ~ 15:44:01]# ll -d /shares/samba/
drwxrwsr-x 2 root developers 6 Nov 28 15:43 /shares/samba/

准备 Samba 用户

每个Samba帐户必须具有一个具有相同用户名的关联Linux帐户。 要创建仅Samba的用户帐户,请锁定其Linux密码,并将其登录Shell设置为/sbin/nologin。 此配置可防止用户使用SSH或从控制台登录Linux系统。


[root@server ~ 15:44:09]# useradd -s /sbin/nologin -G developers -u 1001 developer1
[root@server ~ 15:46:38]# useradd -s /sbin/nologin -G developers -u 1002 developer2
[root@server ~ 15:46:59]# smbpasswd -a developer
1
New SMB password:
Retype new SMB password:
Mismatch - password unchanged.
Unable to get new password.
[root@server ~ 15:49:31]# smbpasswd -a developer1
New SMB password:
Retype new SMB password:
Mismatch - password unchanged.
Unable to get new password.
[root@server ~ 15:49:46]# smbpasswd -a developer1
New SMB password:
Retype new SMB password:
Added user developer1.
[root@server ~ 15:49:56]# smbpasswd -a developer
2
New SMB password:
Retype new SMB password:
Added user developer2.
[root@server ~ 15:50:08]# pdbedit -L
developer1:1001:
developer2:1002:
[root@server ~ 15:51:24]# useradd -s /sbin/nologin -u 1100 operator1
[root@server ~ 15:52:14]# smbpasswd -a operator1New SMB password:
Retype new SMB password:
Added user operator1.
[root@server ~ 15:52:42]# pdbedit -L
developer1:1001:
operator1:1100:
developer2:1002:

设置 SELinux 上下文类型

配置 Samba

Samba的配置文件是**/etc/samba/smb.conf**。

/etc/samba/smb.conf配置文件以[global]节开头。 该部分提供了常规服务器配置和默认值,您可以在随后的部分中将其覆盖。接下来的部分定义文件或打印机共享。

要注释掉一行,请使用分号(;)或井号(#)字符。

配置 global

global 部分定义Samba服务器的基本配置。 在该部分中,常用的参数如下:

workgroup 参数,指定服务器的Windows工作组。 当客户端系统查询服务器时,该名称将显示在客户端系统上。 默认值为 SAMBA。

security 参数,控制Samba如何验证客户端。默认security = user,客户端使用用户名和密码登录,本地Samba服务器在其数据库中管理该用户名和密码。

**server min protocol **参数,指定服务器支持的最低SMB版本。 默认情况下,服务器支持协议的所有版本,并与客户端协商该版本。 由于第一个版本SMB1(或CIFS)存在安全问题,因此Red Hat建议将该参数设置为SMB2来排除该版本。 但是,使用该配置,Microsoft Windows XP或更早版本的客户端将无法使用您的服务器,因为它们仅支持SMB1。 SMB协议的当前版本为版本3。

smb crypty 参数,激活流量加密。 默认情况下,服务器和客户端协商加密。 要强制加密,请将smb crypty参数设置为required,并将服务器min协议设置为SMB3。 仅SMB3提供对加密的支持。 Microsoft Windows 8,Microsoft Windows Server 2012和更高版本的操作系统支持具有加密功能的SMB3。

hosts allow 参数,设置允许访问Samba服务器的客户端列表(以逗号、空格或制表符分隔)。如果未指定,则所有主机均可访问Samba。如果global块中未指定此设置,则可以单独在每个共享中设置。如果在global块中指定此设置,则适用于所有共享。

配置共享块

在[global]部分之后,定义共享部分。 括号中的名称定义了共享的名称,客户端可以看到。 该部分中常用的指令如下:

**path **指令,提供要在您的服务器上共享的目录的全名。

writeable 指令,指示经过身份验证的用户是否对共享具有读/写访问权限(设置为yes或no)。 默认设置为no。

writeablewritablewrite ok指令含义相同。read only = no指令与writeable = yes指令含义相同。

write list,当writeable指令的值为no(默认值)时,可以使用write list指令提供以逗号分隔的用户列表,列表中的用户对共享具有读/写访问权限,不在列表中的用户仅具有读取访问权限。在列表中,您可以通过在组名前面加上@字符来指定本地Linux组。

以下示例将对operator1用户和developers组成员的读写权限授予。


write list = operator1, @developers

valid users,默认情况下,所有经过身份验证的用户都可以访问共享。 如果要限制该访问,请使用该指令。 该指令采用逗号分隔的应具有访问权限的用户列表。

以下示例声明devcode共享,并授予对/shares/samba目录的访问权限。 所有经过身份验证的用户都具有对该共享的读取访问权限,但是只有开发人员组的成员具有读/写访问权限


[root@server ~ 16:43:18]# vim /etc/samba/smb.conf

[devcode]
        comment = wordpress
        valid users = operator1,@developers
        path = /shares/wordpress
        write list = @developers
        hosts allow = 10.1.8.0/24
  
本次实验实例

声明devcode共享,并授予了对/shares/samba目录的访问权限:

只有developers组中成员和operator1用户可以访问。operator1用户可以读访问。developers组中成员具有读取/写入访问权限。hosts allow = 10.1.8.10/24只允许10.1.8.10访问


#下载wordpress文件
[root@server ~ 16:25:38]# ll
total 9628
-rw-------. 1 root root    1505 Nov  7 09:33 anaconda-ks.cfg
drwxr-xr-x  5 root root    4096 Feb  8  2018 wordpress
-rw-r--r--  1 root root 9848003 Dec 15  2024 wordpress-4.9.4-zh_CN.zip
[root@server ~ 16:25:39]# mv wordpress /shares/
mv: overwrite ‘/shares/wordpress’? y
[root@server wordpress 16:26:40]# ls
index.php             wp-includes
license.txt           wp-links-opml.php
readme.html           wp-load.php
wp-activate.php       wp-login.php
wp-admin              wp-mail.php
wp-blog-header.php    wp-settings.php
wp-comments-post.php  wp-signup.php
wp-config-sample.php  wp-trackback.php
wp-content            xmlrpc.php
wp-cron.php

#修改权限
[root@server wordpress 16:26:42]# chmod 2775 /shares/wordpress/
[root@server wordpress 16:27:12]# chgrp -R developers /shares/wordpress/

[root@server ~ 16:28:21]# ll -d /shares/wordpress/
drwxrwsr-x 5 root developers 4096 Feb  8  2018 /shares/wordpress/

检查语法错误

[root@server ~ 16:29:23]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
	printcap name = cups
	security = USER
	workgroup = SAMBA
	idmap config * : backend = tdb
	cups options = raw


[homes]
	browseable = No
	comment = Home Directories
	inherit acls = Yes
	read only = No
	valid users = %S %D%w%S


[printers]
	browseable = No
	comment = All Printers
	create mask = 0600
	path = /var/tmp
	printable = Yes


[print$]
	comment = Printer Drivers
	create mask = 0664
	directory mask = 0775
	force group = @printadmin
	path = /var/lib/samba/drivers
	write list = @printadmin root


[devcode]
	comment = wordpress
	create mask = 0664
	directory mask = 0775
	hosts allow = 10.1.8.0/24
	path = /shares/wordpress
	valid users = operator1 @developers
	write list = @developers
[root@server ~ 16:42:01]# echo $?
0

Linux 客户端挂载

Microsoft Windows和Linux系统都可以从Samba服务器访问SMB共享。

在Linux系统上,安装 cifs-utils 软件包,以便可以在本地系统上挂载SMB共享。

在Linux上,您可以使用**//servername/sharename**访问共享。标准的 Microsoft Windows 使用统一命名约定(UNC-Uniform Naming Convention),格式
\servernamesharename
,代表网络资源。 但由于字符是shell中的转义字符,因此Linux实用程序通常改用/字符。

要挂载SMB共享,必须提供用户凭据以通过Samba服务器进行身份验证。 这些凭据确定对共享上文件的访问权限。 对于手动挂载,您可以使用username挂载选项。 该命令提示用户输入密码。


[root@proxy ~ 16:48:38]# yum install -y samb-client cifs-utils

[root@proxy ~ 16:50:03]# smbclient -L //10.1.8.10
Enter SAMBA
oot's password: 
Anonymous login successful

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	devcode         Disk      wordpress
	IPC$            IPC       IPC Service (Samba 4.10.16)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

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

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

[root@proxy ~ 16:50:57]# smbclient -L //10.1.8.10 -U operator1
Enter SAMBAoperator1's password: 

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	devcode         Disk      wordpress
	IPC$            IPC       IPC Service (Samba 4.10.16)
	operator1       Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

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

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


[root@proxy ~ 16:51:49]# mkdir -p /usr/share/nginx/html/
[root@proxy ~ 16:52:14]# yum install -y nginx
[root@proxy ~ 16:56:02]# systemctl enable nginx
[root@proxy ~ 16:57:41]# mount -t cifs -o username=operator1,password=redhat //10.1.8.10/devcode /usr/share/nginx/html/
[root@proxy ~ 17:02:23]# umount /usr/share/nginx/html
[root@proxy ~ 17:02:42]# mount -t cifs -o username=developer1,password=redhat //10.1.8.10/devcode /usr/share/nginx/html/
[root@proxy ~ 17:03:06]# echo hello > /usr/share/nginx/html/index.html

12.SMB

12.SMB

多用户挂载


[root@client ~ 10:42:30]# cat /etc/samba/samba.secrets 
username=operator1
password=redhat
[root@client ~ 10:41:25]# chmod o=- /etc/samba/samba.secrets 
[root@client ~ 10:42:05]# 
[root@client ~ 10:42:05]# tail -1 /etc/fstab 
//10.1.8.10/devcode /usr/share/nginx/html cifs credentials=/etc/samba/samba.secrets 0 0 

#持久化挂载
[root@client ~ 11:23:20]# vim /etc/fstab 
#
//10.1.8.10/devcode /usr/share/nginx/html cifs credentials=/etc/samba/samba.secrets,multiuser  0 0 
#
#添加和server端一样的用户和组
[root@client ~ 10:42:45]# useradd -u 1100 operator1
[root@client ~ 11:04:08]#  groupadd -g 2000 developers
[root@client ~ 11:05:26]# useradd -G developers -u 1001 developer1
[root@client ~ 11:05:52]# useradd -G developers -u 1002 developer2
[root@client ~ 11:06:00]# echo redhat | passwd --stdin operator1
[root@client ~ 11:06:13]# echo redhat | passwd --stdin developer1
[root@client ~ 11:06:21]# echo redhat | passwd --stdin developer2

#先卸载再挂载
[root@client ~ 11:06:24]# !umount
umount /usr/share/nginx/html 
umount: /usr/share/nginx/html: not mounted
[root@client ~ 11:06:39]# mount /usr/share/nginx/html/



[root@client ~ 11:07:09]# su operator1
[operator1@client ~ 11:08:20]$ cifscreds add 10,.1.8.10


[root@client ~ 11:20:28]# su - developer1

#运行cifscreds命令配置凭据
[developer1@client ~ 11:20:53]$ cifscreds add 10.1.8.10
#server端developer1密码
Password: 
[developer1@client ~ 11:34:41]$ touch /usr/share/nginx/html/f1.txt

Windows挂载

win+R

12.SMB

12.SMB

如果此时想使用developer1登录,验证权限。此时需要断开旧的会话。因为Windows 会缓存之前访问 Samba 服务器的用户凭据,且默认不允许同一客户端以多个用户身份同时连接同一台 Samba 服务器。只需在 Windows 端清除旧连接和凭据缓存,再用新用户重新连接即可。

以下是具体操作步骤:

命令行强制断开所有旧连接,这是最直接有效的方法。按下
Win+R
输入
cmd
打开命令提示符,执行命令强制删除所有网络共享连接,命令如下:


net use * /del /y

执行后会断开当前所有的网络驱动器和 Samba 共享连接,清除旧用户的连接会话。

清除凭据管理器中的缓存凭据:若执行上一步后仍无法切换,可能是凭据被单独缓存了。按
Win+R
输入
control keymgr.dll
打开凭据管理器,找到对应 Samba 服务器(以服务器 IP 或主机名命名)的凭据条目,选中后点击删除;也可直接进入控制面板的 “用户帐户和家庭安全→凭据管理器”,删除相关 Windows 凭据。

重启 Workstations 服务确保生效:部分情况下旧连接进程可能残留,按
Win+R
输入
services.msc
打开服务面板,找到 “Workstations” 服务,右键选择重启,彻底释放旧连接占用的资源。

用权限更大的用户重新连接:两种方式可选择。

一是直接在文件资源管理器地址栏输入


\Samba服务器IP

,此时系统会弹出登录框,输入权限更大的用户名和密码即可;二是通过命令行指定用户连接,命令如下(将 Z: 改为自定义盘符,替换服务器 IP、共享名和新用户信息):


net use Z: \服务器IP共享名 /user:权限更大的用户名 *

输入后按提示输入对应密码,就能以新用户身份建立连接。

服务总结

DHCP 提供网络配置服务,额外提供tftp,告知客户端通过哪个tftp服务实现引导。DNS 提供域名解析的。tftp 小型文件传输服务器,专内用来实现网络引导。vsftpd,sftpd 实现专用的文件传输。NFS 网络文件共享,网络文件共享,不支持跨平台,为Linux、unix之间共享。Samba 支持跨平台,Linux、unix、windows之间共享iscsI 网络块存储共享,多路径。mariadb 数据库服务nginx web服务rsync 同步,配合sersync (实时监控变化) 实现实时同步。

© 版权声明

相关文章

暂无评论

none
暂无评论...