本文是一篇关于Linux系统初学者的实验记录。
参考书籍:《Linux就该这么学》
实验环境:
VmwareWorkStation 17——虚拟机软件
RedHatEnterpriseLinux[RHEL]8——红帽操作系统
FTP实现了文件传输,而非文件共享。要想通过客户端直接在服务器上修改文件内容就要通过Samba文件共享服务。
Samba文件共享服务:
1987年,微软公司和因特尔公司共同制定了SMB(Server Messages Bolck,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源共享问题,这也使得在多个主机之间共享文件变得越来越简单。
1991年,Tridgwell为了解决Linux系统与Windows系统之间的文件共享系统,基于SMB协议开发出了SMBServer服务程序。
Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。
目录
前言:
备注:
准备:
正文:
实验1:配置共享资源
Step1:创建用于访问共享资源的账户信息
Step2:创建用于共享资源的文件目录
Step3:设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。
Step4:在Samba服务程序的主配置文件中,写入共享信息。
Step5:重启smb服务并加入到启动项中,保证在重启后依然能够为用户持续提供服务
Step6:查看Samba服务状态
实验2:Windows挂载共享
实验3:Linux挂载共享
总结:
实验4:NFS(网络文件系统)
Step1:在NFS服务器上建立用于NFS文件共享的目录,并设置足够权限
Step2:配置NFS服务的配置文件:/etc/exports
Step3:启动和启用NFS服务程序。
Step4:配置NFS客户端
实验5:autofs自动挂载服务
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命令进行独立的添加操作。
全局配置参数用于设置整体的资源共享环境,对里面每一个独立的共享资源都有效。
区域配置参数则用于设置单独的共享资源,且仅对该资源有效。
参数 | 作用 |
[database] | 共享名称为database |
comment = Do not arbitrarily modify | 警告用户不要最易修改数据库 |
path = /home/database | 共享目录为/home/database |
public = no | 关闭“所有人可见” |
writable = yes | 允许写入 |
在RHEL8系统中,Samba服务程序默认使用的是用户密码认证模式(user)。
这种认证模式可以确保仅让有密码且受信任的用户访问共享资源。
Samba服务程序的数据库要求账户必须在当前系统中已存在,
pdbedit命令用于管理Samba服务程序的账户信息库。
id linuxprobe
pdbedit -a -u linuxprobe
账户:linuxprobe
密码:redhat
由于/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
getsebool -a | grep samba
setsebool -P samba_enable_home_dirs on
vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
[database]
comment = Do not arbitrarily modify the database file
path = /home/database
public = no
writable = yes
Samba服务程序的配置工作基本完毕。
systemctl restart smb
systemctl enable smb
为了避免防火墙功能干扰,将iptables防火墙清空,再把Samba服务添加到firewalld防火墙中
iptables -F
iptables-save
firewall-cmd --zone=public --permanent --add-service=samba
firewall-cmd --reload
使用"systemctl status smb“命令查看服务器是否启动了Samba服务。
smbclient命令查看共享详情;
-U参数指定用户名称
-L参数列出共享清单
smbclient -U linuxprobe -L 192.168.31.128
无论Samba共享服务是部署Windows系统上还是部署在Linux系统上,通过Windows系统进行访问时,其步骤和方法都是一样的。
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
ftp只能下载后修改,然后上传覆盖。
smba、smb、NFS是在线修改的。
smb只能在Windows之间共享
samba可以在Linux和Windows之间共享
如果觉得Samba服务程序太麻烦,而且恰巧需要共享的主机都是Linux系统。
可以在客户端部署NFS(网络文件系统)服务来共享文件。
NFS服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使本地主机(Linux客户端)基于TCP / IP 协议,像使用本地主机上的远程资源一样读写远程Linux系统上的共享文件。
主机名称 | 操作系统 | IP地址 |
NFS服务器 | RHEL 8 | 192.168.31.128 |
NFS客户端 | RHEL 8 | 192.168.31.130 |
对两台主机:
dnf install nfs-utils
iptables -F
iptables-save
firewall-cmd --permanent --zone=public --add-service=nfs
firewall-cmd --permanent --zone=public --add-service=rpc-bind
firewall-cmd --permanent --zone=public --add-service=mountd
firewall-cmd --reload
mkdir /nfsfile
chmod -R 777 /nfsfile
该文件默认情况下里面没有任何内容。
按照”共享目录路径 允许访问的NFS客户端(共享权限参数)“的格式,定义要共享的目录与相应的权限。
vim /etc/exports
注意:NFS客户端地址与权限之间没有空格
/nfsfile 192.168.10.*(rw,sync,root_squash)
由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,启动NFS服务之前。还要重启并启用rpcbind服务程序,将这两个服务一并加入开机启动项中。
systemctl restart rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
先使用showmount命令查询NFS服务器的远程共享信息。
参数 | 作用 |
-e | 显示NFS服务器的共享列表 |
-a | 显示本机挂载的文件资源的情况NFS资源的情况 |
-v | 显示版本号 |
创建一个挂载目录,使用mount命令并结合-t参数,指定要挂载的文件类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(客户端)的目录。
mkdir /nfsfile
mount -t nfs 192.168.31.128:/nfsfile /nfsfile
df -h
vim /etc/fstab
192.168.31.128:/nfsfile /nfsfile nfs defaults 0 0
无论是Samba服务还是NFS服务,都要把挂载信息写入到/etc/fstab中,这样远程共享资源就会自动跟随服务器开机而进行挂载。但是如果挂载的远程资源太多,则会给网路宽带和服务器硬件资源的浪费。
autofs自动挂载服务可以解决这一问题。autofs服务程序是一种Linux系统守护进程,当检测用户试图访问一个为挂载的文件系统时,将自动挂载该文件系统。
——autofs服务程序在用户需要使用该文件系统时才去挂载。
dnf install autofs
处于生成环境中的Linux服务器,一般会同时管理许多设备的挂载操作。
如果把这些设备挂载信息都写入autofs服务的主配置文件中,不利于服务执行效率
因此按照:”挂载目录 子配置文件“的格式进行填写
子配置文件是对这个挂载目录内的挂载设备信息作进一步的说明。
vim /etc/auto.master
在子配置文件中:
按照”挂载目录 挂载文件类型及权限:设备名称“的格式填写。
vim /etc/iso.misc
iso -fstype=ios9660,ro,nosuid,nodev :/dev/cdrom
-fstype为文件系统格式参数,iso9660为光盘设备格式
ro、nosuid、nodev为光盘设备具体权限参数
systemctl start autofs
systemctl enable autofs
检测结果:
现查看当前光盘设备挂载情况,确认没有被挂载上
umount /dev/cdrom
df -h
/media目录中根本就没有iso子目录:
但是,却可以使用cd命令切换到这个iso子目录中,而且光盘设备会被立即自动挂载。