使用Samba或NFS实现文件共享

学习总结所用《 Linux就该这么学 》

Samba文件共享服务

  • Samba服务程序是由Tridgwell基于SMB(Server Messages Block,服务器消息块)协议开发的

安装

# yum install samba

配置文件去掉多余注释

# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
# cat /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:需验证来访主机提供的口令后才可以访问;提升了安全性
	#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

配置共享资源

  1. 创建用于访问共享资源的账户信息
# id yanji
uid=1000(yanji) gid=1000(yanji) groups=1000(yanji)
# pdbedit -a -u yanji
new password:  (输入该账户在Samba服务数据库中的密码)
retype new password:  (再次确认密码)
Unix username:        yanji
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-464225859-96889490-2454274357-1000
Primary Group SID:    S-1-5-21-464225859-96889490-2454274357-513
Full Name:            yanji
Home Directory:       \\localhost\yanji
HomeDir Drive:        
Logon Script:         
Profile Path:         \\localhost\yanji\profile
Domain:               LOCALHOST
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:    Wed, 25 Sep 2019 21:56:52 CST
Password can change:  Wed, 25 Sep 2019 21:56:52 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

pdbedit命令用于管理SMB服务程序的账户信息数据库,其参数以及作用:

参数 作用
-a 用户名 建立Samba用户
-x 用户名 删除Samba用户
-L 列出用户列表
-Lv 列出用户详细信息的列表
  1. 创建用于共享资源的文件目录
# mkdir /home/database
# chown -Rf yanji:yanji /home/database
# semanage fcontext -a -t samba_share_t /home/database
# restorecon -Rv /home/database
restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:samba_share_t:s0
  1. 设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录
# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
# setsebool -P samba_enable_home_dirs on
  1. 在Samba服务程序的主配置文件中写入共享信息
# vim /etc/samba/smb.conf
[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        security = user
        passdb backend = tdbsam
        load printers = yes
        cups options = raw
[homes]
        comment = Home Directories
        path = /home/database
        browseable = no
        writable = yes
  1. 重启smb服务并加入开机启动项,清空iptables防火墙
# vim /etc/samba/smb.conf
# vim /etc/samba/smb.conf
# systemctl restart smb
# systemctl enable smb
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'
# iptables -F

Window挂载共享

  1. 在Windows系统中访问共享资源
    在运行命令框中输入 两个反斜杠+Samba共享服务器的IP地址
    在Windows系统中访问共享资源
    访问Samba共享服务时,提示出错
    访问Samba共享服务时,提示出错
    成功访问Samba共享服务:
    成功访问Samba共享服务

Linux挂载共享

  1. 在Linux客户端RedHat6.8安装支持文件共享服务的软件包(cifs-utils)
# yum install cifs-utils
  1. 在Linux客户端编写认证文件auth.smb(Samba服务的用户名、密码、共享域),并修改权限为:仅root管理员读写
# vim auth.smb
username=yanji
password=yanji123 
domain=MYGROUP
  1. 在Linux客户端创建用于挂载Samba服务共享资源的目录,并把挂载信息写入到/etc/fstab文件,确保共享挂载信息在服务器重启后依然生效
# echo "//192.168.40.131/yanji /database cifs credentials=/root/auth.smb 0 0" >> /etc/fstab 
# mount -a
  1. 进入到挂载目录/database可看到Windows系统访问Samba服务程序时留下来的文件
# ll /database/
总用量 4
-rwxr--r-- 1 1000 1000 10 925 23:08 test.txt
# cat /database/test.txt 
test
test

NFS网络文件系统

  • 共享文件的主机都是Linux系统时,推荐在客户端部署NFS服务来共享文件
  • NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件
  • NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容

用于配置NFS服务程序配置文件的参数:

参数 作用
ro 只读
rw 读写
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
  1. 安装NFS服务
# yum install nfs-utils
  1. 在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限
# mkdir /nfsfile
# chmod -Rf 777 /nfsfile
# echo "This is NFS" > /nfsfile/readme
  1. /nfsfile目录共享给192.168.40.0/24网段内的所有主机NFS客户端地址与权限之间没有空格
# vim /etc/exports
/nfsfile 192.168.40.*(rw,sync,root_squash)
  1. 启动和启用NFS服务程序
    使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端
# systemctl restart rpcbind
# systemctl enable rpcbind
# systemctl start nfs-server
# systemctl enable nfs-server
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
  1. NFS客户端查询NFS服务器的远程共享信息
# showmount -e 192.168.40.131
Export list for 192.168.40.131:
/nfsfile 192.168.40.*

showmount命令中可用的参数以及作用:

参数 作用
-e 显示NFS服务器的共享列表
-a 显示本机挂载的文件资源的情况NFS资源的情况
-v 显示版本号
  1. 在NFS客户端创建一个挂载目录
    -t:指定挂载的文件系统的类型,后面是服务器的IP地址服务器上的共享目录要挂载到本地系统(即客户端)的目录
# mkdir  /nfsfile
# mount -t nfs 192.168.40.131:/nfsfile /nfsfile
  1. 查看NFS共享文件,为使服务一直有效,将其写入到fstab文件中
# cat /nfsfile/readme 
This is NFS
# echo "192.168.40.131:/nfsfile /nfsfile nfs defaults 0 0" >> /etc/fstab

AutoFs自动挂载服务

  • 挂载的远程资源太多,会给网络带宽和服务器的硬件资源带来很大负载
  • 资源挂载后长期不使用,也会造成服务器硬件资源的浪费
  • autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统
  1. 安装autofs服务
# yum install -y autofs
  1. 在autofs服务的主配置文件中写入挂载目录,后缀建议以.misc结束
# vim /etc/auto.master
...
/media /etc/iso.misc
/misc /etc/auto.misc
...
  1. 编辑子配置文件
    -fstype:文件系统格式参数,iso9660为光盘设备格式
    ro、nosuid及nodev:光盘设备具体的权限参数
    /dev/cdrom:定义要挂载的设备名称
# vim /etc/auto.master
iso   -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
  1. 验证autofs服务
    先查看当前的光盘设备挂载情况,确认光盘设备没有被挂载上,/media目录中也没有iso子目录,cdiso子目录时,光盘设备被立即自动挂载,顺利查看到了光盘的内容
# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   18G  3.1G   15G  18% /
devtmpfs               985M     0  985M   0% /dev
tmpfs                  994M   84K  994M   1% /dev/shm
tmpfs                  994M  8.9M  986M   1% /run
tmpfs                  994M     0  994M   0% /sys/fs/cgroup
/dev/sda1              497M  119M  379M  24% /boot

# cd /media/
# ls
# cd iso
# ls
addons  EULA  images    LiveOS      Packages       repodata                 RPM-GPG-KEY-redhat-release
EFI     GPL   isolinux  media.repo  release-notes  RPM-GPG-KEY-redhat-beta  TRANS.TBL
# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   18G  3.1G   15G  18% /
devtmpfs               985M     0  985M   0% /dev
tmpfs                  994M   84K  994M   1% /dev/shm
tmpfs                  994M  8.9M  986M   1% /run
tmpfs                  994M     0  994M   0% /sys/fs/cgroup
/dev/sda1              497M  119M  379M  24% /boot
/dev/sr0               3.5G  3.5G     0 100% /media/iso
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章