1.Linux SMB服务器配置
1.1.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程序包。
本课程介绍如何将Samba配置为独立服务器。 在该配置中,服务器使用Samba数据库管理Samba用户帐户,并向本地工作组的成员提供文件共享。
提示:Windows server 2016 以及之后的版本都可以配置samba服务器。
1.2.部署SMB服务器
安装SMB并准备共享目录
[root@server ~]# yum install -y samba samba-client
[root@server ~]# mkdir /shares/samba
在此基本配置中,您可以使用Linux文件权限来控制对目录的访问。 例如,要向developers组的成员授予写访问权,并向其他所有人授予读访问权,请使用以下命令:
[root@server ~]# groupadd -g 2000 developers
[root@server ~]# chgrp developers /shares/samba
[root@server ~]# chmod 2775 /shares/samba
[root@server ~]# ls -ld /shares/samba
drwxrwsr-x. 2 root developers 6 May 26 08:56 /shares/samba
SGID位可确保新内容自动属于开发人员组。
准备 Samba 用户
每个Samba帐户必须具有一个具有相同用户名的关联Linux帐户。 要创建仅Samba的用户帐户,请锁定其Linux密码,并将其登录Shell设置为/sbin/nologin。 此配置可防止用户使用SSH或从控制台登录Linux系统。
例如,要为operator1用户创建一个锁定的Linux帐户,请运行以下命令。
[root@server ~]# useradd -s /sbin/nologin -u 1000 operator1
创建Linux帐户后,使用samba-common-tools软件包中的smbpasswd命令将它们添加到Samba数据库中。
要将用户添加到Samba数据库,请使用带有-a选项的smbpasswd命令,并将用户名作为参数。 该命令提示输入密码。
[root@server ~]# smbpasswd -a operator1
New SMB password: `123`
Retype new SMB password: `123`
Added user operator1.
# 查看samba数据库中用户清单
[root@server ~]# pdbedit -L
operator1:1000:
补充:要从Samba数据库中删除用户,请使用-x选项。
[root@server ~]# smbpasswd -x operator1
Deleted user operator1.
添加用户的完整过程如下:
# 增加开发人员用户
[root@server ~]# useradd -s /sbin/nologin -G developers -u 1001 developer1
[root@server ~]# useradd -s /sbin/nologin -G developers -u 1002 developer2
[root@server ~]# smbpasswd -a developer1
New SMB password: `redhat`
Retype new SMB password: `redhat`
Added user developer1.
[root@server ~]# smbpasswd -a developer2
New SMB password: `redhat`
Retype new SMB password: `redhat`
Added user developer2.
# 也可以使用以下命令设置密码
[root@server ~]# echo -e "redhat\nredhat" | smbpasswd -a -s developer2
Added user developer2.
[root@server ~]# pdbedit -L
developer1:1001:
operator1:1000:
developer2:1002:
注意:Samba在/var/lib/samba/private/目录下维护其数据库。 切勿直接修改该目录中的文件。
设置 SELinux 上下文类型(若开启SELinux)
[root@server ~]# semanage fcontext -a -t samba_share_t '/shares/samba(/.*)?'
[root@server ~]# restorecon -Rv /shares/samba
Samba还可以提供带有public_content_t(只读)和public_content_rw_t(读/写)类型的文件。 使用public_content_rw_t类型,启用SELinux smbd_anon_write布尔值以允许读/写访问。 当您希望Apache HTTP Server或NGINX服务能够写入共享目录内容时,这两种SELinux类型非常有用。
提示:不要使用Samba共享NFS文件系统或FTP共享。 这样做可能导致文件损坏或其他文件访问问题。
配置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。
writeable,writable和write ok指令含义相同。read only = no指令与writeable = yes指令含义相同。
-
write list,当writeable指令的值为no(默认值)时,可以使用write list指令提供以逗号分隔的用户列表,列表中的用户对共享具有读/写访问权限,不在列表中的用户仅具有读取访问权限。在列表中,您可以通过在组名前面加上@字符来指定本地Linux组。
以下示例将对operator1用户和developers组成员的读写权限授予。
write list = operator1, @developers -
valid users,默认情况下,所有经过身份验证的用户都可以访问共享。 如果要限制该访问,请使用该指令。 该指令采用逗号分隔的应具有访问权限的用户列表。
以下示例声明devcode共享,并授予对/shares/samba目录的访问权限。 所有经过身份验证的用户都具有对该共享的读取访问权限,但是只有开发人员组的成员具有读/写访问权限
[devcode] comment = webapp valid users = operator1,@developers path = /shares/samba write list = @developers
本次实验实例
声明devcode共享,并授予了对/shares/samba目录的访问权限:
- 只有developers组中成员和operator1用户可以访问。
- operator1用户可以读访问。
- developers组中成员具有读取/写入访问权限。
[root@server ~]# vim /etc/samba/smb.conf
......
# 文件最后添加如下内容
[devcode]
path = /shares/samba
valid users = operator1, @developers
write list = @developers
验证配置文件
要验证/etc/samba/smb.conf文件中是否没有错误,请运行不带参数的testparm命令。
[root@server ~]# 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
Enter
# 按回车继续
...output omitted...
[root@server ~]# echo $?
0
启动 Samba
[root@server ~]# systemctl enable smb --now
#139/TCP和445/TCP
[root@server ~]# firewall-cmd --permanent --add-service=samba
[root@server ~]# firewall-cmd --reload
Samba会定期检查/etc/samba/smb.conf是已更改。 如果配置文件已更改,则Samba会自动重新加载它。已经与Samba服务建立的任何连接不受影响。 运行systemctl reload smb命令立即重新加载配置文件,或者运行systemctl restart smb命令完全重新启动Samba。
Linux 客户端挂载
Microsoft Windows和Linux系统都可以从Samba服务器访问SMB共享。
在Linux系统上,安装 cifs-utils 软件包,以便可以在本地系统上挂载SMB共享。
- 在Linux上,您可以使用**//servername/sharename**访问共享。
- 标准的 Microsoft Windows 使用统一命名约定(UNC-Uniform Naming Convention),格式
\\servername\sharename,代表网络资源。 但由于\字符是shell中的转义字符,因此Linux实用程序通常改用/字符。
要挂载SMB共享,必须提供用户凭据以通过Samba服务器进行身份验证。 这些凭据确定对共享上文件的访问权限。 对于手动挂载,您可以使用username挂载选项。 该命令提示用户输入密码。
# 安装 cifs-utisl
[root@client ~]# yum install -y cifs-utils samba-client
# 查看服务端提供的共享
[root@client ~]# smbclient -L //server -U operator1
Enter SAMBA\operator1's password: `redhat`
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
devcode Disk
IPC$ IPC IPC Service (Samba 4.10.16)
operator1 Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@client ~]# mount -o username=operator1 //server/devcode /mnt
Password for operator1@//server/devcode: `redhat`
[root@client ~]# df /mnt
Filesystem 1K-blocks Used Available Use% Mounted on
//server/devcode 52403200 1613496 50789704 4% /mnt
# 准备测试文件
[root@server ~]# cp /etc/host* /shares/samba/
[root@client ~]# ls /mnt
host.conf hostname hosts
要自动挂载共享,使用credentials 选项。
[root@client ~]# vim /etc/fstab
# 最后添加记录
//server/devcode /mnt cifs credentials=/etc/samba/credentials 0 0
[root@client ~]# vim /etc/samba/credentials
username=operator1
password=redhat
[root@client ~]# chmod 600 /etc/samba/credentials
# 验证开机自动挂载
[root@client ~]# umount /mnt
[root@client ~]# mount /mnt
[root@client ~]# df /mnt
Filesystem 1K-blocks Used Available Use% Mounted on
//server/devcode 52403200 1613496 50789704 4% /mnt
# 重启验证
[root@client ~]# reboot
[root@client ~]# df /mnt
39万+

被折叠的 条评论
为什么被折叠?



