前言:
本文是一篇关于Linux系统初学者的实验记录。
参考书籍:《Linux就该这么学》
实验环境:
VmwareWorkStation 17——虚拟机软件
RedHatEnterpriseLinux[RHEL]8——红帽操作系统
备注:
FTP实现了文件传输,而非文件共享。要想通过客户端直接在服务器上修改文件内容就要通过Samba文件共享服务。
Samba文件共享服务:
1987年,微软公司和因特尔公司共同制定了SMB(Server Messages Bolck,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源共享问题,这也使得在多个主机之间共享文件变得越来越简单。
1991年,Tridgwell为了解决Linux系统与Windows系统之间的文件共享系统,基于SMB协议开发出了SMBServer服务程序。
Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。
准备:
Samba服务程序的配置:
安装Samba服务程序和一个samba-client软件包。
dnf install samba samba-client
打开Samba服务程序的主配置文件,删除【home】【printers】【print$】
Samba服务中的参数及作用:
security参数代表用户登录Samba服务时采用的验证方式:
share:代表主机无须验证密码。这相当于vsftpd服务的匿名公开访问模式
user:代表登录Samba服务时需要使用账号密码进行验证,、
domain:代表通过域控制器进行身份验证,用来限制用户的来源域
server:代表使用独立主机验证来访问用户提供的密码。
在最早期的CentOS/RHEL系统中,Samba服务使用的是PAM(可插拔认证模块)来调用本地账号和密码信息。
RHEL8版本中,使用tdbsam数据库进行验证。这是一个专门用于保存Samba服务账号密码的数据库,用户需要用pdbedit命令进行独立的添加操作。
正文:
实验1:配置共享资源
全局配置参数用于设置整体的资源共享环境,对里面每一个独立的共享资源都有效。
区域配置参数则用于设置单独的共享资源,且仅对该资源有效。
参数 | 作用 |
[database] | 共享名称为database |
comment = Do not arbitrarily modify | 警告用户不要最易修改数据库 |
path = /home/database | 共享目录为/home/database |
public = no | 关闭“所有人可见” |
writable = yes | 允许写入 |
Step1:创建用于访问共享资源的账户信息
在RHEL8系统中,Samba服务程序默认使用的是用户密码认证模式(user)。
这种认证模式可以确保仅让有密码且受信任的用户访问共享资源。
Samba服务程序的数据库要求账户必须在当前系统中已存在,
pdbedit命令用于管理Samba服务程序的账户信息库。
id linuxprobe
pdbedit -a -u linuxprobe
账户:linuxprobe
密码:redhat
Step2:创建用于共享资源的文件目录
由于/home目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的SELinux上下文所带来的限制。
查阅Samba帮助手册,正确的文件上下文应该是samba_share_t
修改完执行restorecon命令,就能让应用于目录的新SELinux安全上下文立即生效。
mkdir /home/database
chown -Rf linuxprobe:linuxprobe /home/database
semanage fcontext -a -t samba_share_t /home/database
restorecon -Rv /home/database
Step3:设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。
getsebool -a | grep samba
setsebool -P samba_enable_home_dirs on
Step4:在Samba服务程序的主配置文件中,写入共享信息。
vim /etc/samba/smb.conf
[global]workgroup = SAMBAsecurity = userpassdb backend = tdbsam
[database]comment = Do not arbitrarily modify the database filepath = /home/databasepublic = nowritable = yes
Samba服务程序的配置工作基本完毕。
Step5:重启smb服务并加入到启动项中,保证在重启后依然能够为用户持续提供服务
systemctl restart smb
systemctl enable smb
为了避免防火墙功能干扰,将iptables防火墙清空,再把Samba服务添加到firewalld防火墙中
iptables -F
iptables-save
firewall-cmd --zone=public --permanent --add-service=samba
firewall-cmd --reload
Step6:查看Samba服务状态
使用"systemctl status smb“命令查看服务器是否启动了Samba服务。
smbclient命令查看共享详情;
-U参数指定用户名称
-L参数列出共享清单
smbclient -U linuxprobe -L 192.168.31.128
实验2:Windows挂载共享
无论Samba共享服务是部署Windows系统上还是部署在Linux系统上,通过Windows系统进行访问时,其步骤和方法都是一样的。
实验3:Linux挂载共享
Samba不仅能解决Windows和Linux之间共享
还可以解决Linux和Linux之间的共享
主机名称 | 操作系统 | IP地址 |
Samba共享服务器 | RHEL 8 | 192.168.31.128 |
Linux客户端 | RHEL 8 | 192.168.31.130 |
Windows客户端 | Windows 11 家庭中文版 | 192.168.31.1 |
客户机:
dnf install cifs-utils
mkdir /database
mount -t cifs -o username=linuxprobe,password=redhat //192.168.31.128/database /database
现在每次重启电脑后都要使用mount命令手动挂载远程目录。
可以按照Samba服务的用户名、密码、共享域的顺序将相关信息写入一个认证文件中。
让/etc/fstab文件和系统自动加载它。
修改认证文件权限为仅root管理员才能够读写
vim auth.smb
username=linuxprobe
password=redhat
domain=SAMBA
chmod 600 auth.smb
将挂载信息写入/etc/fstab文件中,以确保共享挂载信息在服务器重启后依然生效:
mount -a
看到了刚才在Windows上共享出的文件。
总结:
ftp只能下载后修改,然后上传覆盖。
smb是在线修改的。
smb只能在Windows之间共享
samba可以在Linux和Windows之间共享