SAMBA文件共享服务

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行。

liunx nfs 协议 挂接nas 配置文件_samba


liunx nfs 协议 挂接nas 配置文件_nfs_02


liunx nfs 协议 挂接nas 配置文件_linux_03

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服务程序的主配置文件与Apache服务很相似,包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。创建共享资源的方法很简单,只要将下表中的参数写入到Samba服务程序的主配置文件中,然后重启该服务即可。

用于设置Samba服务程序的参数以及作用

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

在RHEL 7系统中,Samba服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。

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

创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,还需要考虑应用于该目录的SELinux安全上下文所带来的限制。

在例一的基础上

vim 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
[baozi]
        comment = jing gao xin xi
        path = /home/baozi
        public = no
        writable = yes
[root@lizhiqiang samba]# mkdir /home/baozi
[root@lizhiqiang samba]# ls -Zd /home/baozi/
drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/baozi/
[root@lizhiqiang samba]# semanage fcontext -a -t samba_share_t /home/baozi
[root@lizhiqiang samba]# chown -Rf zhuxing:zhuxing /home/baozi/
[root@lizhiqiang samba]# restorecon -Rv /home/baozi/
restorecon reset /home/baozi context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:samba_share_t:s0
[root@lizhiqiang samba]# ls -Zd /home/baozi/
drwxr-xr-x. zhuxing zhuxing unconfined_u:object_r:samba_share_t:s0 /home/baozi/
[root@lizhiqiang 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
[root@lizhiqiang samba]# setsebool -P samba_export_all_rw=on
[root@lizhiqiang samba]# systemctl restart smb
[root@lizhiqiang samba]# systemctl enable smb
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'
[root@lizhiqiang samba]# systemctl enable smb
[root@lizhiqiang samba]# iptables -F
[root@lizhiqiang samba]# pdbedit -a -u zhuxing
new password:
retype new password:
Unix username:        zhuxing

liunx nfs 协议 挂接nas 配置文件_samba_04

.创建用于访问共享资源的账户信息。账户必须在当前系统已经存在

liunx nfs 协议 挂接nas 配置文件_配置文件_05


liunx nfs 协议 挂接nas 配置文件_linux_06

Windows挂载共享

无论Samba共享服务是部署Windows系统上还是部署在Linux系统上,通过Windows系统进行访问时,其步骤和方法都是一样的。下面假设Samba共享服务部署在Linux系统上,并通过Windows系统来访问Samba服务。Samba共享服务器和Windows客户端的IP地址可以根据下表来设置。

主机名称	操作系统	IP地址
Samba共享服务器	RHEL 7	192.168.11.14
Linux客户端	RHEL 7	192.168.11.15
Windows客户端	Windows 7	192.168.11.1

要在Windows系统中访问共享资源,只需在Windows的“运行”命令框中输入两个反斜杠,然后再加服务器的IP地址即可,如图所示

liunx nfs 协议 挂接nas 配置文件_linux_07


由于Windows系统的缓存原因,有可能在第二次登录时提供了正确的账户和密码,依然会报错,这时只需要重新启动一下Windows客户端就没问题了

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 /muzi
vim /etc/fstab
...
//192.168.10.10/share_dir /muzi cifs credentials=/root/auth.smb 0 0    #把服务端的共享文件夹挂载到客户端的/liwh目录里,共享文件夹格式为cifs,权限设置为以认证文件进行验证
mount -a

客户端进入到挂载目录/zhuzhuzhu后就可以对目录里的文件进行增删改操作了。

mkdir zhuzhuzhu
vim /etc/fstab 
 mount -a

liunx nfs 协议 挂接nas 配置文件_samba_08


liunx nfs 协议 挂接nas 配置文件_samba_09

NFS网络文件系统

如果觉得Samba服务程序的配置太麻烦,而且恰巧需要共享文件的主机都是Linux系统,非常推荐在客户端部署NFS服务来共享文件。NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。

RHEL 7系统中默认已经安装了NFS服务,安装nfs:yum install -y nfs-utils。

NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。

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

liunx nfs 协议 挂接nas 配置文件_配置文件_10


请注意,NFS客户端地址与权限之间没有空格。

服务端192.168.11.14配置:

#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
[root@lizhiqiang ~]# iptables -F
[root@lizhiqiang ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

[root@lizhiqiang /]# mkdir baobao  不可以是家目录
[root@lizhiqiang /]# chmod -Rf 777 baobao/
[root@lizhiqiang /]# ls
baobao  boot  etc   lib    media  opt   root  sbin  sys  usr
bin     dev   home  lib64  mnt    proc  run   srv   tmp  var
[root@lizhiqiang /]# echo "dsd" > baobao/oi
 vim /etc/exports
/baobao 192.168.11.*(rw,sync,root_squash)        
[root@lizhiqiang /]# export -a
[root@lizhiqiang /]# systemctl restart rpcbind.service 
[root@lizhiqiang /]# systemctl restart nfs.service

客户端192.168.11.15配置:

showmount -e 192.168.11.15                     #使用showmount命令查询NFS服务器的远程共享信息,输出结果:/nfsfile 192.168.10.*
mkdir /liwh 
vim /etc/fstab 
... 
192.168.11.14:/nfsfile /liwh nfs defaults 0 0    #留意共享文件夹目录的书写格式和Samba是不同的,目录格式也不同。
...
mount -a
[root@lizhiqiang Desktop]# showmount -e 192.168.11.14
Export list for 192.168.11.14:
/root/baobao 192.168.11.*
[root@lizhiqiang wang]# vim /etc/fstab 
192.168.11.14:/baobao   /wang   nfs     defaults        0       0
mount -a
[root@lizhiqiang ~]# cd /
[root@lizhiqiang /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr  wang
[root@lizhiqiang /]# cd wang/
[root@lizhiqiang wang]# ls
oi
[root@lizhiqiang wang]# echo "sd " > ds

liunx nfs 协议 挂接nas 配置文件_配置文件_11


NFS客户端的配置步骤也十分简单。先使用showmount命令(以及必要的参数,见下表)查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。

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

liunx nfs 协议 挂接nas 配置文件_nfs_12

AutoFs自动挂载服务

无论是Samba服务还是NFS服务,都要把挂载信息写入到/etc/fstab中,这样远程共享资源就会自动随服务器开机而进行挂载。虽然这很方便,但是如果挂载的远程资源太多,则会给网络带宽和服务器的硬件资源带来很大负载。如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。

autofs自动挂载服务可以解决这一问题。与mount命令不同,autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。换句话说,将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而autofs服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。

安装autofs自动挂载服务:yum install -y autofs。

autofs服务的主配置文件:/etc/auto.master。记录要自动挂载的目录和对应的子配置文件。更加详细具体的挂载目录内的挂载设备信息则记录在用户自定义的子配置文件中。子配置文件后缀必须为.misc。

autofs服务的子配置文件应按照“挂载目录 挂载文件类型及权限 主机ip地址:设备名称”的格式进行填写。

例如,光盘设备一般挂载到/media/cdrom目录中,那么挂载目录写成/media即可。对应的子配置文件则是对这个挂载目录内的挂载设备信息作进一步的说明。子配置文件需要用户自行定义,文件名字没有严格要求,但后缀建议以.misc结束。

例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服务配置成功。