《Linux就该这么学》培训笔记_ch12_使用Samba或NFS实现文件共享
文章最后会post上书本的笔记照片。
文章主要内容:
- SAMBA文件共享服务
- 配置共享资源
- Windows挂载共享
- Linux挂载共享
- NFS网络文件系统
- AutoFs自动挂载服务
- 书本笔记
SAMBA文件共享服务
FTP协议的本质是传输文件,而非共享文件。
Samba是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。
安装Samba服务程序:yum install -y samba。
Samba服务的主配置文件:/etc/samba/smb.conf。
实例1:配置Samba服务前,先删掉Samba服务主配置文件中的注释和空行。
通过grep命令,添加-v参数(反向选择),分别去掉所有以井号(#)和分号(;)开头的注释信息行,对于剩余的空白行可以使用^$参数来表示并进行反选过滤,最后把过滤后的可用参数信息通过重定向符覆盖写入到原始文件名称中。
cd /etc/samba cat smb.conf #过滤注释行和空行前,查看samba主配置文件,有300多行 mv smb.conf smb.conf_bak #将samba主配置文件smb.conf重命名为smb.conf_bak grep -v "#" smb.conf_bak | grep -v ";" | grep -v "^$" > smb.conf #过滤掉smb.conf_bak文件的注释行和空行,再把剩余的信息重定向到smb.conf cat smb.conf #查看过滤注释行和空行后的smb.conf文件,只有20行。
Samba服务程序中的参数以及作用:
[global] | #全局参数。 | |
workgroup = MYGROUP | #工作组名称 | |
server string = Samba Server Version %v | #服务器介绍信息,参数%v为显示SMB版本号 | |
log file = /var/log/samba/log.%m | #定义日志文件的存放位置与名称,参数%m为来访的主机名 | |
max log size = 50 | #定义日志文件的最大容量为50KB | |
security = user | #安全验证的方式,总共有4种 | |
#share:来访主机无需验证口令;比较方便,但安全性很差 | ||
#user:需验证来访主机提供的口令后才可以访问;提升了安全性 | ||
#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户) | ||
#domain:使用域控制器进行身份验证 | ||
passdb backend = tdbsam | #定义用户后台的类型,共有3种 | |
#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码 | ||
#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户 | ||
#ldapsam:基于LDAP服务进行账户验证 | ||
load printers = yes | #设置在Samba服务启动时是否共享打印机设备 | |
cups options = raw | #打印机的选项 | |
[homes] | #共享参数 | |
comment = Home Directories | #描述信息 | |
browseable = no | #指定共享信息是否在“网上邻居”中可见 | |
writable = yes | #定义是否可以执行写入操作,与“read only”相反 | |
[printers] | #打印机共享参数 | |
comment = All Printers | ||
path = /var/spool/samba | #共享文件的实际路径(重要)。 | |
browseable = no | ||
guest ok = no | #是否所有人可见,等同于"public"参数。 | |
writable = no | ||
printable = yes |
配置共享资源
Samba服务程序的主配置文件包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。
用于设置Samba服务程序的参数以及作用
参数 | 作用 |
[share_dir] | 共享文件夹的名称。share_dir |
comment = heheda | 共享文件夹的备注内容。heheda |
path = /home/niubi | 共享文件夹在Linux中的实际目录。/home/niubi |
public = no | 关闭“所有人可见” |
writable = yes | 允许写入操作 |
在RHEL 7系统中,Samba服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。
要使用用户口令认证模式,必须建立账户信息数据库,且这些账户必须在当前系统中已经存在,不过密码不一定要与系统对应账户的密码一致(可以为空),否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。
pdbedit命令:用于管理SMB服务程序的账户信息数据库,格式:pdbedit [选项] 账户。在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
pdbedit命令中使用的参数以及作用:
参数 | 作用 |
-a 用户名 | 建立Samba用户 |
-x 用户名 | 删除Samba用户 |
-L | 列出用户列表 |
-Lv | 列出用户详细信息的列表 |
实例2:在实例1基础上,配置samba服务共享文件夹。
#1.创建用于访问共享资源的账户信息。账户必须在当前系统已经存在 id linuxprobe #确认用户linuxprobe是否存在 pdbedit -a -u linuxprobe #生成账户信息数据库,添加一名用户,以供samba共享文件夹的登录验证 new password:此处输入该账户在Samba服务数据库中的密码 retype new password:再次输入密码进行确认 #2.创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,还需要考虑应用于该目录的SELinux安全上下文所带来的限制。 mkdir /home/niubi chown -Rf linuxprobe:linuxprobe /home/niubi semanage fcontext -a -t samba_share_t /home/niubi restorecon -Rv /home/niubi #3。设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。 getsebool -a | grep samba setsebool -P samba_enable_home_dirs on #4.在Samba服务程序的主配置文件中,追加共享文件夹配置参数信息。 vim /etc/samba/smb.conf ... [share_dir] comment = heheda path = /home/niubi public = no writable = yes #5.重启Samba服务并加入开机启动项。为避免防火墙妨碍,清空iptables防火墙。 systemctl restart smb systemctl enable smb iptables -F service iptables save
Windows挂载共享
要在Windows系统中访问共享资源,只需在Windows的“运行”命令框中输入两个反斜杠,然后再加服务器的IP地址即可。输入上面实例用于samba验证的帐号密码,登录进去后的共享文件夹的效果:
在RHEL 7系统中,Samba服务程序使用的是独立的账户信息数据库。所以,即便Samba服务程序使用的账户名字必须是Linux系统中已存在的用户,但两者的帐号密码是独立的,要分清楚各自所对应的密码。
Linux挂载共享
Samba服务程序还可以实现Linux系统之间的文件共享。
Linux客户端需要安装支持文件共享服务的软件包:yum install -y cifs-utils
实例3:在实例2基础上,实现Linux客户端挂载Samba服务的共享文件夹。
#1.按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中,降低文件权限提高安全性。 vim /root/auth.smb username=linuxprobe #samba账户 password=redhat #samba账户密码 domain=MYGROUP #与samba主配置文件中的对应参数要一致 chmod -Rf 600 auth.smb #2.创建一个用于挂载Samba服务共享资源的目录,并把挂载信息写入到/etc/fstab文件中以永久挂载。 mkdir /liwh vim /etc/fstab ... //192.168.10.10/share_dir /liwh cifs credentials=/root/auth.smb 0 0 #把服务端的共享文件夹挂载到客户端的/liwh目录里,共享文件夹格式为cifs,权限设置为以认证文件进行验证 mount -a
客户端进入到挂载目录/liwh后就可以对目录里的文件进行增删改操作了。
NFS网络文件系统
凡是Linux之间的文件共享都涉及到挂载步骤。
NFS(网络文件系统)服务专用于Linux系统主机之间的文件共享,它可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。
RHEL 7系统中默认已经安装了NFS服务,安装nfs:yum install -y nfs-utils。
NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。
用于配置NFS服务程序配置文件的参数:
参数 | 作用 |
ro | 只读 |
rw | 读写 |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
服务端192.168.10.10配置:
#1.清空iptables防火墙策略,永久保存。 iptables -F service iptables save #2.建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。 mkdir /nfsfile chmod -Rf 777 /nfsfile echo "welcome to linuxprobe.com" > /nfsfile/test.txt #3.编辑NFS服务程序的配置文件/etc/exports,把/nfsfile目录共享给192.168.10.0/24网段内的所有主机,让这些主机都拥有读写权限。 vim /etc/exports /nfsfile 192.168.10.*(rw,sync,root_squash) #NFS客户端地址与权限之间没有空格 #4.重启rpcbind和nfs服务程序,并将它们加入开机启动项。(在使用NFS服务进行文件共享之前,需要使用RPC服务将NFS服务器的IP地址和端口号等信息发送给客户端) systemctl restart rpcbind systemctl enable rpcbind systemctl start nfs-server systemctl enable nfs-server
客户端192.168.10.20配置:
showmount -e 192.168.10.10 #使用showmount命令查询NFS服务器的远程共享信息,输出结果:/nfsfile 192.168.10.*
mkdir /liwh
vim /etc/fstab
...
192.168.10.10:/nfsfile /liwh nfs defaults 0 0 #留意共享文件夹目录的书写格式和Samba是不同的,目录格式也不同。
...
mount -a
showmount命令:用于查询NFS服务器的远程共享信息。格式:showmount [选项] [ip地址]输出格式为“共享的目录名称 允许使用客户端地址”。
showmount命令中可用的参数以及作用
参数 | 作用 |
-e | 显示NFS服务器的共享列表 |
-a | 显示本机挂载的文件资源的情况NFS资源的情况 |
-v | 显示版本号 |
AutoFs自动挂载服务
无论是Samba服务还是NFS服务,都要把挂载信息写入到/etc/fstab中,这样远程共享资源就会自动随服务器开机而进行挂载。虽然方便,但是如果挂载的远程资源太多,则会给网络带宽和服务器的硬件资源带来很大负载。如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。
autofs自动挂载服务与mount命令不同,autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。
mount命令与autofs服务的区别:
- 将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载;
- autofs服务程序在用户需要使用该文件系统时才去动态挂载,从而节约网络资源和服务器的硬件资源。
安装autofs自动挂载服务:yum install -y autofs。
autofs服务的主配置文件:/etc/auto.master。记录要自动挂载的目录和对应的子配置文件。更加详细具体的挂载目录内的挂载设备信息则记录在用户自定义的子配置文件中。子配置文件后缀必须为.misc。
autofs服务的子配置文件应按照“挂载目录 挂载文件类型及权限 主机ip地址:设备名称”的格式进行填写。
例如:iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
把本机光盘设备挂载到/media/iso目录中,可将挂载目录写为iso(上级目录写在主配置文件中),而-fstype为文件系统格式参数,iso9660为光盘设备格式,ro、nosuid及nodev为光盘设备具体的权限参数,/dev/cdrom则是定义要挂载的设备名称。
实例4:在实例3基础上,在客户端安装autofs服务,实现对服务端的nfs共享目录的自动挂载。
#1.编辑autofs主配置文件,指定设备挂载位置的上一级目录和对应的子配置文件。 vim /etc/auto.master ... /nice /etc/test.misc ... #2.编辑自定义的autofs子配置文件test.misc。 vim /etc/test.misc nice -fstype=nfs,rw,nosuid,nodev 192.168.10.10:/nfsfile #3.重启autofs服务并加入开机启动项 systemctl restart autofs systemctl enable autofs
当用df -h查看设备挂载情况时,确认共享目录没有被挂载上,而且/nice目录里根本不存在test目录,但却可以使用cd命令进入test目录中,说明autofs服务配置成功。
书本笔记