[Linux] SMB 服务器
目录
SMB服务介绍
安装Samba并准备共享目录
准备Samba用户
配置Samba
配置 global
配置共享块
本次实验实例
验证配置文件
启动samba
Linux客户端挂载
windows客户端挂载
多用户挂载
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并准备共享目录
安装
dnf install -y samba
mkdir -p /shares/samba
在此基本配置中,您可以使用Linux文件权限来控制对目录的访问。例如,要向developers组的成员授予写访问权,并向其他所有人授予读访问权,请使用以下命令:
groupadd -g 2010 developers
chgrp developers /shares/samba
chmod 2775 /shares/samba
ls -ld
-
2775: 权限模式,由四部分组成: -
2: 设置特殊权限位,这里是setgid(Set Group ID)。setgid的作用:在该目录下创建的新文件或子目录会自动继承父目录的属组(即 "developers")。
-
775: 基本权限位,分为三部分:-
7(owner): 属主(owner)有读(4)、写(2)、执行(1)权限(4+2+1=7)。 -
7(group): 属组(developers)有读、写、执行权限(4+2+1=7)。 -
5(others): 其他用户有读(4)和执行(1)权限(4+1=5),但不能写。
-

准备Samba用户

Samba在/var/lib/samba/private/目录下维护其数据库。切勿直接修改该目录中的文件。
#增加开发人员用户
useradd -s /sbin/nologin -G developers -u 1011 developer1
useradd -s /sbin/nologin -G developers -u 1012 developer2
smbpasswd -a developer1
smbpasswd -a developer2
pdbedit -L
---------------------------------------------
#也可以使用以下命令设置密码
[root@server ~]# echo -e "redhat'nredhat" | smbpasswd -a -s developer2
Added user developer2.

配置Samba
Samba的配置文件是/etc/samba/smb.conf
配置 global
global部分定义Samba服务器的基本配置。在该部分中,常用的参数如下:
-
workgroup参数,指定服务器的Windows工作组。当客户端系统查询服务器时,该名称将显示在客户端系统上。默认值为SAMBA。
-
security参数,控制Samba如何验证客户端。默认security=user,客户端使用用户名和密码登录,本地Samba服务器在其数据库中管理该用户名和密码。
-
server min protocol参数,指定服务器支持的最低sMB版本。默认情况下,服务器支持协议的所有版本,并与客户端协商该版本。由于第一个版本SMB1(或CIFS)存在安全问题,
因此RedHat建议将该参数设置为SMB2来排除该版本。但是,使用该配置,Microsoft Windows XP或更早版本的客户端将无法使用您的服务器,因为它们仅支持SMB1。SMB协议的当前版本为版本3。
-
smbcrypty参数,激活流量加密。默认情况下,服务器和客户端协商加密。要强制密,请将smbcrypty参数设置为required,并将服务器min协议设置为SMB3。仅SMB3提供对加密的支持。Microsoft Windows8,Microsoft Windows Server 2012和更高版本的操作系统支持具有加密功能的SMB3。
-
hostsallow参数,设置允许访问Samba服务器的客户端列表(以逗号、空格或制表符分隔)。如果未指定,则所有主机均可访问Samba。如果global块中未指定此设置,则可以单独在每个共享中设置。如果在global块中指定此设置,则适用于所有共享。
配置共享块
在[global]部分之后,定义共享部分。括号中的名称定义了共享的名称,客户端可以看到。该部分中常用的指令如下:
-
path指令,提供要在您的服务器上共享的目录的全名。
-
writeable指令,指示经过身份验证的用户是否对共享具有读/写访问权限(设置为yes或no)。默认设置为no。 writeable,writable和write ok指令含义相同。read only= no指令与writeable =yes指令含义相同。
-
write list,当writeable指令的值为no(默认值)时,可以使用writelist指令提供以逗号分隔的用户列表,列表中的用户对共享具有读/写访问权限,不在列表中的用户仅具有读取访问权限。在列表中,您可以通过在组名前面加上@字符来指定本地Linux组。
-
valid users,默认情况下,所有经过身份验证的用户都可以访问共享。如果要限制该访问,请使用该指令。该指令采用逗号分隔的应具有访问权限的用户列表。
本次实验实例
[root@server ~]# vim /etc/samba/smb.conf
#文件最后添加如下内容
[devcode]
path = /shares/samba
valid users = operatorl,@developers
write list = @developers
hosts allow = 10.1.8.0/255.255.255.0
验证配置文件
testparm
#中途按回车继续
echo $?


启动samba
systemctl enable smb --now
Linux客户端挂载
要挂载SMB共享,必须提供用户凭据以通过Samba服务器进行身份验证。这些凭据确定对共享上文件的访问权限。对于手动挂载,您可以使用username挂载选项。该命令提示用户输入密码。
#在client端
#在etc/hosts下添加server端的解析
vim /etc/hosts
10.1.8.10 server.demisse.cn
#安装cifs-utisl
dnf install -y cifs-utils samba-client
#查看服务端提供的共享
smbclient -L //server -U operator1

mount -o username=operator1 //server.demisse.cn/devcode /mnt
df /mnt

#在server端准备测试文件
cp /etc/host* /shares/samba/
#在客户端查看
ls /mnt

使用credentials选项自动挂载共享
[root@client ~]# vim /etc/fstab
# 最后添加记录
//server.demisse.cn/devcode /mnt cifs credentials=/etc/samba/credentials 0 0
[root@client ~]# vim /etc/samba/credentials
username=operatorl
password=redhat
[root@client ~]# chmod 600 /etc/samba/credentials
# 验证开机自动挂载
[root@client ~]# umount /mnt
[root@client ~]# mount /mnt
[root@client ~]# df /mnt
# 重启验证
[root@client ~]# reboot
[root@client ~]# df /mnt

windows客户端挂载
win+R



多用户挂载
客户端准备用户
#添加用户operator1
useradd -u 1010 operator1
#添加用户组developers和用户developer1、developer2
groupadd -g 2010 developers
useradd -G developers -u 1011 developer1
useradd -G developers -u 1012 developer2
#设置密码
echo 111111 | passwd --stdin operator1
echo 111111 | passwd --stdin developer1
echo 111111 | passwd --stdin developer2

使用multiuser挂载选项时,可以使用对共享具有最小访问权限的凭据来根安装SMB共享。用户登录时,他们使用cifscreds命令将其SMB密码临时添加到安全内核密钥环中。然后,客户端的Linux内核将使用其SMB凭据来确定对共享的访问,而不是用于安装共享的根目录。
以下步骤描述了针对多用户选项的系统配置:
-
创建用于装载SMB共享的凭据文件。您在凭据文件中使用的用户必须对SMB共享具有最小的访问权限,并且对共享目录只具有读取访问权限。
-
在挂载命令中添加多用户选项。以下/etc/fstab条目使用凭据和多用户选项。该条目在一行中,没有换行符。
vim /etc/fstab
#修改挂载记录,添加multiuser
//server.linux.fun/devcode /mnt cifs credentials=/etc/samba/credentials,multiuser 0 0
# 卸载后,再次挂载
umount /mnt
mount /mnt
使用mount命令挂载SMB共享
ls /mnt

#运行cifscreds命令配置凭据
cifscreds add 10.1.8.10
ls /mnt
touch /mnt/operator-f1

使用developer1账户测试
cifscreds add 10.1.8.10
touch /mnt/developer1-f1
ls /mnt











