第12章 使用Samba或NFS实现文件共享

章节简述:

本章节为读者讲述文件共享系统的作用,了解Samba与NFS服务程序的开发背景以及用法。

详细逐条讲解Samba服务配置参数,演示安全共享文件的配置策方法,并使用autofs服务程序自动挂载设备,

学会后即可实现Linux系统之间或与Windows系统之间的文件共享,以及在共享文件时如何配置防火墙与SELinux策略规则。

本章目录结构

  • 12.1 了解文件共享服务
  • 12.2 Samba服务
    • 12.2.1 安装服务程序
    • 12.2.2 安全共享文件
  • 12.3 NFS网络文件系统
  • 12.4 AutoFs自动挂载服务
12.1 了解文件共享服务

早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了NFS开源文件共享程序:NFS(NetworkFile System)是一个能够将多台Linux的远程主机数据挂载到本地目录的服务,属于轻量级的文件共享服务,不支持Linux与 Windows系统间的文件共享。

随后在1991年时大学生Tridgwell为了解决Linux与Windows系统之间共享文件的问题,便开发出了SMB协议与Samba服务程序。

SMB(Server Messages Block)协议:实现局域网内文件或打印机等资源共享服务的协议。

当时Tridgwell想要注册SMBServer这个商标,但却被因为SMB是没有意义的字符被拒绝了,经过Tridgwell不断翻看词典,终于找到了一个拉丁舞蹈的名字——SAMBA,而这个热情舞蹈的名字中又恰好包含了SMB(SAMBA),于是这便是Samba程序名字的由来。

Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux与Windows系统间的文件共享。

12.2 Samba服务
12.2.1 安装服务程序

通过安装Samba服务程序后细致的分析其配置文件参数,更能够帮助读者们理解Samba服务的安全验证方式。

安装Samba服务软件包:

[[email protected] Desktop]# yum install samba
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程………………
Installing:
 samba           x86_64           4.1.1-31.el7            rhel7           527 k
………………省略部分安装过程………………
Complete!

浏览Samba配置文件:

[[email protected] ~]# cat/etc/samba/smb.conf

配置文件竟然有320行!有没有被吓到?其实Samba服务配置文件中大部分是注释信息,我们可以来筛选过滤下:

备份原始的配置文件:

[[email protected] ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak

过滤掉无用的内容:
先使用cat命令读入Smb配置文件后通过grep命令-v参数(反向选择)去掉所有注释信息,然后分别删选掉包含#号的行("#"),包含;号的行(";")以及所有的空白行("^$"),最后最后将过滤后的信息覆盖写入到/etc/samba/smb.conf文件中。

cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf

让我们来看看过滤后的配置文件吧:

编辑
[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:需由SMB服务验证来访主机提供的口令后才可建立访问,更加的安全。
  #server:使用独立的远程主机验证来访主机提供的口令(集中管理帐号)。
  #domain:使用PDC来完成验证
  passdb backend = tdbsam #定义用户后台的类型,共有3种。
  #smbpasswd:使用SMB服务的smbpasswd命令给系统用户设置SMB密码。
  #tdbsam:创建数据库文件并使用pdbedit建立SMB独立的用户。
  #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共享参数是这样的:

编辑
参数 作用
[linuxprobe] 共享名称为linuxprobe
comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库
path = /home/database 共享文件夹在/home/database
public = no 关闭所有人可见
writable = yes 允许写入操作

我们将上面的配置参数直接追加到SMB服务配置文件(/etc/samba/smb.conf)并重启SMB服务程序即可生效。

但此时SMB服务默认的验证模式为user,我们需要先创建用户数据库后才可以正常使用,现在来学习下如何创建吧~

12.2.2 安全共享文件

使用Samba服务口令验证方式可以让共享文件更加的安全,做到仅让信任的用户访问,而且验证过程也很简单,要想使用口令验证模式,我们需要先需要创建Samba服务独立的数据库。

第1步:检查当前是否为user验证模式。

[[email protected] ~]# cat /etc/samba/smb.conf

第2步:创建共享文件夹:

[[email protected] ~]# mkdir /database

第3步:描述共享文件夹信息。

SMB服务主配置文件的最下面追加共享文件夹的配置参数:

[database]
comment = Do not arbitrarily modify the database file
path = /database
public = no
writable = yes

保存smb.conf文件后重启启动SMB服务:

[[email protected] ~]# systemctl restart smb

添加到开机启动项:

[root@linuxprobe ~]# systemctl enable smb
ln -s ‘/usr/lib/systemd/system/smb.service‘ ‘/etc/systemd/system/multi-user.target.wants/smb.service‘

第4步:使用Windows主机尝试访问

读者按照下表的IP地址规划动手配置下Windows的网卡参数,应该都会吧~

编辑
主机名称 操作系统 IP地址
Samba共享服务器 红帽RHEL7操作系统 192.168.10.10
客户端 红帽RHEL7操作系统 192.168.10.20
客户端 微软Windows7操作系统 192.168.10.30

在Windows主机的运行框中输入远程主机的信息

此时访问Samba服务报错

此时访问Samba服务是报错的,如果读者已经看完Apache(httpd)服务程序的章节,应该还记得防火墙和SELinux规则吧。

第5步:清空防火墙规则链:

Windows访问Samba主机提示报错,我们怀疑是Iptables阻止了访问操作,于是执行:

[[email protected] ~]# Iptables -F
[[email protected] ~]# service iptables save

因为Windows系统的缓存关系,可能需要先重启Windows主机再尝试访问Samba共享。

Windows系统被要求验证帐户口令

那么这个问题就是出在Iptables防火墙的默认规则中了,所以请对SELinux多一点耐心,不要直接关闭SELinux。

第6步:创建SMB服务独立的帐号。

现在Windows系统要求先验证后才能访问共享,而SMB服务配置文件中密码数据库后台类型为"tdbsam",所以这个帐户和口令是Samba服务的独立帐号信息,我们需要使用pdbedit命令来创建SMB服务的用户数据库。

pdbedit命令用于管理SMB服务的帐户信息数据库,格式为:“pdbedit [选项] 帐户”。

编辑
参数 作用
-a 用户名 建立Samba用户
-x 用户名 删除Samba用户
-L 列出用户列表
-Lv 列出用户详细信息的列表

创建系统用户:

[[email protected] ~]# useradd smbuser

将此系统用户提升为SMB用户:

[[email protected] ~]# pdbedit -a -u smbuser
new password:设置SMB服务独立的密码
retype new password:
Unix username: smbuser
NT username:
Account Flags: [U ]
User SID: S-1-5-21-4146456071-3435711857-2069708454-1000
Primary Group SID: S-1-5-21-4146456071-3435711857-2069708454-513
Full Name:
Home Directory: \\linuxprobe\smbuser
HomeDir Drive:
Logon Script:
Profile Path: \\linuxprobe\smbuser\profile
Domain: LINUXPROBE
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Sat, 11 Jul 2015 18:27:04 CST
Password can change: Sat, 11 Jul 2015 18:27:04 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

第7步:使用Windows主机验证共享结果:

请您按照下面的幻灯片逐步操作,可点击图片两侧箭头或下方小圆点“○”切换步骤。

  • Windows验证SMB服务口令

  • Windows成功访问SMB服务

  • Windows进入共享目录失败

第8步:允许SELinux规则

使用Windows主机访问Samba共享果然可以使用smbuser用户登入,但对于共享文件这么重要的事情,SELinux一定会强制管理,刚刚没有妥当的配置好SELinux,现在果然又报错了。

将共享目录的所有者和所有组设置为smbuser用户:

[[email protected] ~]# chown -Rf smbuser:smbuser /database

允许SELinux对于SMB用户共享家目录的布尔值:

[[email protected] ~]# setsebool -P samba_enable_home_dirs on

将共享目录的SELinux安全上下文设置妥当:

[[email protected] ~]# semanage fcontext -a -t samba_share_t /database

使新的安全上下文立即生效:

[[email protected] ~]# restorecon -Rv /database/

第9步:使用Windows主机验证共享结果

我们配置好Samba服务后又陆续的调整好了Iptables防火墙与SELinux安全规则,现在终于可以正常的使用共享了。

使用SMB服务并创建文件

第10步:使用Linux主机验证共享结果

刚刚好像让读者产生了一些小误解,Samba服务程序并不仅仅是能够实现Linux与Windows系统间的文件共享,还可以实现Linux系统之间的文件共享哦,先动手配置下客户端主机的IP地址吧:

编辑
主机名称 操作系统 IP地址
Samba共享服务器 红帽RHEL7操作系统 192.168.10.10
客户端 红帽RHEL7操作系统 192.168.10.20
客户端 微软Windows7操作系统 192.168.10.30

在客户端安装cifs-utils软件包:

[[email protected] ~]# yum install -y cifs-utils
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程………………
Installing:
 cifs-utils          x86_64          6.2-6.el7             rhel7           83 k
………………省略部分安装过程………………
Complete!

创建挂载目录:

[[email protected] ~]# mkdir /database

在root家目录创建认证文件(依次为SMB用户名、SMB用户密码、SMB共享域):

[[email protected] ~]# vim auth.smb
username=smbuser
password=redhat
domain=MYGROUP

此文件太重要了,权限应该给小一些:

[[email protected] ~]# chmod -Rf 600 auth.smb

配置其挂载信息(内容依次为远程共享信息、本地挂载目录、文件系统类型、认证文件以及开机自检选项):

[[email protected] ~]# vim /etc/fstab
//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0

使用mount命令的-a参数挂载所有在fstab文件中定义的文件信息:

[[email protected] ~]# mount -a

成功挂载Samba的共享目录(能够看到共享文件了):

[[email protected] ~]# cat /database/Memo.txt
i can edit it .

Samba服务真的是太强大了,不仅能够实现Linux系统之间分享数据还能与Windows主机进行文件共享。

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

12.3 NFS网络文件系统

NFS(Network Files System)即网络文件系统,NFS文件系统协议允许网络中的主机通过TCP/IP协议进行资源共享,NFS客户端可以像使用本地资源一样读写远端NFS服务端的资料,需要注意NFS服务依赖于RPC服务与外部通信,所以必需保证RPC服务能够正常注册服务的端口信息才能正常使用NFS服务。

有个学员问过NFS是不是need for speed的缩写啊?哈哈,NFS配置和使用都是非常快捷,所以这么说也是有道理的。

红帽RHEL7系统已经默认安装NFS服务:

[[email protected] ~]# yum install nfs-utils
Loaded plugins: langpacks, product-id, subscription-manager
(1/2): rhel7/group_gz | 134 kB 00:00
(2/2): rhel7/primary_db | 3.4 MB 00:00
Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version
Nothing to do

本次的实验需要两台Linux主机,网络配置情况:

编辑
主机名称 操作系统 IP地址
NFS服务端 红帽RHEL7操作系统 192.168.10.10
NFS客户端 红帽RHEL7操作系统 192.168.10.20

第1步:创建NFS服务端的共享目录。
清空iptables默认的规则链:

[[email protected] ~]# iptables -F

保存清空后的iptables规则:

[[email protected] ~]# service iptables save

创建nfsfile共享目录:

[[email protected] ~]# mkdir /nfsfile

为共享目录设置权限(让其他人可以有写入权限):

[[email protected] ~]# chmod -Rf 777 /nfsfile

写入一个文件,用于NFS客户端读取:

[[email protected] ~]# echo "welcome to linuxprobe.com" > /nfsfile/readme

NFS服务端配置文件是"/etc/exports",用于定义要共享的目录以及相应权限。

[[email protected] ~]# vim /etc/exports
//格式为:共享目录的绝对路径 允许访问NFS资源的客户端(权限参数)
/nfsfile 192.168.10.* (rw,sync,root_squash)

NFS配置共享的参数有:

编辑
参数 作用
ro 只读默认
rw 读写模式
root_squash 当NFS客户端使用root用户访问时,映射为NFS服务端的匿名用户。
no_root_squash 当NFS客户端使用root用户访问时,映射为NFS服务端的root用户。
all_squash 不论NFS客户端使用任何帐户,均映射为NFS服务端的匿名用户。
sync 同时将数据写入到内存与硬盘中,保证不丢失数据。
async 优先将数据保存到内存,然后再写入硬盘,效率更高,但可能造成数据丢失。

看完后来分析下/etc/exports文件中参数作用吧“/nfsfile 192.168.10.* (rw,sync,no_root_squash)(答案模式)

答案:将/nfsfile目录共享给192.168.10.0/24网段,运行NFS客户端读写数据、同步数据并映射为NFS服务器的root用户。

第2步:启动NFS服务端

刚刚讲到NFS服务是依赖于RPC服务的,但在红帽RHEL7系统中RPC服务已经默认运行(active)了,所以无需再配置RPC服务啦。

[[email protected] ~]# systemctl status rpcbind

启动nfs-server程序:

[[email protected] ~]# systemctl start nfs-server

设置NFS服务端为开机启动:

[[email protected] ~]# systemctl enable nfs-server

第3步:配置NFS客户端
如果NFS客户端也是红帽RHEL7系统,那么软件包nfs-utils一定也是已经默认安装,直接挂载共享就可以了。
showmount命令用于查询NFS服务端共享信息,格式为:“showmount [参数] [远程主机]”。

编辑
参数 作用
-e 显示NFS服务端的共享列表
-a 显示本机挂载NFS资源的情况
-v 显示版本号

查询远程NFS服务端中可用的共享资源:

[[email protected] ~]# showmount -e 192.168.10.10
Export list for 192.168.10.10:
/nfsfile (everyone)

创建本地挂载目录:

[[email protected] ~]# mkdir /nfsfile
[[email protected] ~]# mount -t nfs 192.168.10.10:/nfsfile /nfsfile

顺利查看到刚刚写入文件内容:

[[email protected] ~]# cat /nfsfile/readme
welcome to linuxprobe.com

如果希望开机后自动将NFS资源挂载到本地,那么就可以通过修改fstab文件来实现:

[[email protected] ~]# vim /etc/fstab
192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0
12.4 AutoFs自动挂载服务

AutoFs服务与Mount/Umount命令不同之处在于它是一种守护进程,只有检测到用户试图访问一个尚未挂载的文件系统时才自动的检测并挂载该文件系统,换句话说,将挂载信息填入/etc/fstab文件后系统将在每次开机时都自动将其挂载,而运行AutoFs后则是当用户需要使用该文件系统了才会动态的挂载,节约网络与系统资源。

模拟训练:每次进入/media/iso目录时都会自动挂载镜像。

编辑
主机名称 操作系统 IP地址
NFS服务端 红帽RHEL7操作系统 192.168.10.10
NFS客户端 红帽RHEL7操作系统 192.168.10.20

安装autofs服务:

[[email protected] ~]# yum install autofs
………………省略部分安装过程………………
Installing:
autofs x86_64 1:5.0.7-40.el7 rhel 550 k
Installing for dependencies:
hesiod x86_64 3.2.1-3.el7 rhel 30 k
………………省略部分安装过程………………
Complete!

启动autofs服务并加入到开机启动项中:

[root@linuxprobe ~]# systemctl start autofs
[root@linuxprobe ~]# systemctl enable autofs
ln -s ‘/usr/lib/systemd/system/autofs.service‘ ‘/etc/systemd/system/multi-user.target.wants/autofs.service‘

修改autofs主配置文件(格式为:挂载目录 映射配置文件):

[[email protected] ~]# vim /etc/auto.master
/media /etc/iso.misc

编辑挂载配置参数文件(映射文件):

[[email protected] ~]# vim /etc/iso.misc
iso   -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

重新加载启动autofs服务:

[[email protected] ~]# systemctl restart autofs

进入自动挂载目录中:

[[email protected] ~]# cd /media/iso

查看当前目录下的文件:

[[email protected] iso]# ls
addons images Packages RPM-GPG-KEY-redhat-release
EFI isolinux release-notes TRANS.TBL
EULA LiveOS repodata
GPL media.repo RPM-GPG-KEY-redhat-beta
时间: 2024-11-10 13:44:06

第12章 使用Samba或NFS实现文件共享的相关文章

linux学习11章-使用vsftpd服务传输文件和12章-使用Samba或NFS实现文件共享

2019年12月8日 vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上. 匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器. 本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单.但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器. 虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库

Samba或NFS实现文件共享

SMB(Server Messages Block,服务器消息块)协议作用:解决局域网内的文件或打印机等资源的共享问题,使多个主机(windows与linux.linux与linux)之间共享文件.samba服务程序的主配置文件/etc/samba/smb.conf查看过滤"#".":"."空行"后的信息的方法:cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v "

NFS服务器及Samba服务配置实现文件共享

NFS服务器运行原理 实战配置NFS服务器 配置Samba服务器及实现文件共享 (一)NFS器服务端描述 NFS服务器: Network File System,网络文件系统使FreeBSD支持的一种 系统安装,直接用yum方式安装  # yum -y install NFS* 启动服务 #/etc/init.d/nfs start     启动显示失败:annot register service: RPC: Unable to receive; errno = Connection refu

[转载]SELinux 环境下网络服务设置,配置 Apache 、Samba、NFS

原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-selinux-services1/index.html?ca=drs- 引言 SELinux 的安全防护措施主要集中在各种网络服务的访问控制.对于像 Apache .Samba.NFS.vsftp .MySQL.Bind dns 等服务来说,SELinux 仅仅开放了最基本的运行需求.至于连接外部网络.运行脚本.访问用户目录.共享文件等,必须经过一定的 SELinux 策略调整才能充分发挥

公开课视频-《第11章 配置-Citrix-企业网盘-第12章 配置-UPM》

***************************************************************************************** <大企业云桌面部署实战>-培训班-即将开课,包学包会,欢迎咨询:3313395633(QQ) ***************************************************************************************** <大企业云桌面部署实战>-精讲课

JS读书笔记:《JavaScript框架设计》——第12章 异步处理

一.何为异步   执行任务的过程可以被分为发起和执行两个部分. 同步执行模式:任务发起后必须等待直到任务执行完成并返回结果后,才会执行下一个任务. 异步执行模式:任务发起后不等待任务执行完成,而是马上执行下一个任务,当任务执行完成时则会收到通知. 面对IO操作频繁的场景,异步执行模式可在同等的硬件资源条件下提供更大的并发处理能力,也就是更大的吞吐量. 但由于异步执行模式打破人们固有的思维方式,并且任务的发起和任务的执行是分离的,从而提高编程的复杂度. 多线程.多进程均可实现异步模式. 二.从回调

第 12 章 命令模式【Command Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 今天讲命令模式,这个模式从名字上看就很简单,命令嘛,老大发命令,小兵执行就是了,确实是这个意思,但是更深化了,用模式来描述真是是世界的命令情况.正在看这本书的你,我猜测分为两类:已经工作的和没有工作的,先说没有工作的,那你为啥要看这本书,为了以后工作呗,只要你参见工作,你肯定会待在项目组,那今天我们就以项目组为例子来讲述命令模式. 我是我们部门的项目经理,就是一个项目的头,在中国做项目,项目经理就是什么都要懂,什么都要管,做好

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex

ASM:《X86汇编语言-从实模式到保护模式》第12章:存储器的保护

12章其实是11章的拓展,代码基本不变,就是在保护模式下展开讨论. ★PART1:存储器的保护机制 1. 修改段寄存器的保护 当执行把段选择子传到段寄存器的选择器部分的时候,处理器固件在完成传送之前,要检查和确认选择子是正确的,并且该选择子选择的描述符也是正确的.假如索引号是正确的,也就是说明索引号8+7要小于等于边界.如果超过边界,那么处理器就会终止处理,产生异常中断13,同时段寄存器的原值保持不变. 同时处理器还要对描述符的类别进行检查,如果描述符的类别进行确认,举个例子来说,如果描述符的类