Samba和NFS文件共享
SAMBA文件共享服务
通过Yum软件仓库来安装Samba服务程序
[root@zhangjh ~]# yum install samba -y
Samba 配置文件注释信息较多,为了便于配置,因此先把主配置文件改个名字,然后使用cat命令读入主配置文件,再在grep命令后面添加-v参数(反向选择),分别去掉所有以井号(#)和分号(;)开头的注释信息行,
对于剩余的空白行可以使用^$参数来表示并进行反选过滤,最后把过滤后的可用参数信息通过重定向符覆盖写入到原始文件名称中。
[root@zhangjh ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak [root@zhangjh ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf [root@zhangjh ~]# cat /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 browseable = no writable = yes [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes
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服务程序的参数以及作用:
参数 | 作用 |
[database] | 共享名称为database |
comment = Do not arbitrarily modify the database file | 警告用户不要随意修改数据库 |
path = /home/database | 共享目录为/home/database |
public = no | 关闭“所有人可见” |
writable = yes | 允许写入操作 |
第1步:创建用于访问共享资源的账户信息。
在RHEL 7系统中,Samba服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日 后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。
pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
用于pdbedit命令的参数以及作用:
参数 | 作用 |
-a 用户名 | 建立Samba用户 |
-x 用户名 | 删除Samba用户 |
-L | 列出用户列表 |
-Lv | 列出用户详细信息的列表 |
[root@zhangjh ~]# pdbedit -a -u jianghua new password: retype new password: Unix username: jianghua NT username: Account Flags: [U ] User SID: S-1-5-21-3165414194-1039364885-2898766718-1000 Primary Group SID: S-1-5-21-3165414194-1039364885-2898766718-513 Full Name: Home Directory: \\zhangjh\jianghua HomeDir Drive: Logon Script: Profile Path: \\zhangjh\jianghua\profile Domain: ZHANGJH 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: Thu, 14 Jun 2018 16:58:13 CST Password can change: Thu, 14 Jun 2018 16:58:13 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
第2步:创建用于共享资源的文件目录。
注意关闭SElinux。
[root@zhangjh ~]# mkdir /home/database [root@zhangjh ~]# chown -Rf jianghua:jianghua /home/database/ [root@zhangjh ~]# setenforce 0
第3步:在Samba服务程序的主配置文件中,写入共享信息。在原始的配置文件中,[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备。这两项如果在今后的工作中不需要,可以手动删除。
[root@zhangjh ~]# 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 [database] comment = Do not arbitrarily modify the database file path = /home/database public = no writable = yes
第4步:重启Samba 并清空iptables防火墙,然后就可以检验配置效果了。
[root@zhangjh ~]# systemctl restart smb [root@zhangjh ~]# systemctl enable smb ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service' [root@zhangjh ~]# iptables -F [root@zhangjh ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Windows挂载共享
现在可以在共享目录创建文件以及文件夹,可以修改文件,删除文件的操作。
Linux挂载共享
linux客户端安装支持文件共享服务的软件包(cifs-utils)。
[root@zhangjh ~]# yum install cifs-utils -y
在Linux客户端,按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中。
为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root管理员才能够读写:
[root@zhangjh ~]# vim auth.smb username=jianghua password=password domain=MYGROUP [root@zhangjh ~]# chmod -Rf 600 auth.smb
在Linux客户端上创建一个用于挂载Samba服务共享资源的目录,并把挂载信息写入到/etc/fstab文件中,以确保共享挂载信息在服务器重启后依然生效:
[root@zhangjh ~]# mkdir /database [root@zhangjh ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Sun May 6 05:50:56 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel-root / xfs defaults 1 1 UUID=d33701cc-d80c-40b5-aa87-c07011414e1d /boot xfs defaults 1 2 /dev/mapper/rhel-swap swap swap defaults 0 0 #/dev/md0 /raid_mount ext4 defaults 0 0 #/dev/storage/zjh_dir /root/linshiceshi ext4 defaults 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 //192.168.38.251/database /database cifs credentials=/root/auth.smb 0 0 [root@zhangjh ~]# mount -a
Linux客户端成功地挂载了Samba服务的共享资源。
进入到挂载目录/database后就可以看到Windows系统访问Samba服务程序时留下来的文件了(即文件1111.txt)。也可以对文件进行编辑,删除操作。
[root@zhangjh ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.1G 15G 18% / devtmpfs 909M 0 909M 0% /dev tmpfs 918M 80K 918M 1% /dev/shm tmpfs 918M 8.9M 909M 1% /run tmpfs 918M 0 918M 0% /sys/fs/cgroup /dev/sr0 3.5G 3.5G 0 100% /media/cdrom /dev/sda1 497M 119M 379M 24% /boot //192.168.38.251/database 18G 3.1G 15G 18% /database [root@zhangjh ~]# cd /database/ [root@zhangjh database]# ls 新建文件夹 [root@zhangjh database]# cd 新建文件夹/ [root@zhangjh 新建文件夹]# ls 1111.txt [root@zhangjh 新建文件夹]# cat 1111.txt 111111 [root@zhangjh 新建文件夹]#
NFS网络文件系统
NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。
安装NFS软件包:
[root@zhangjh ~]# yum install nfs-utils -y
第1步:清空NFS服务器上面iptables防火墙的默认策略,以免默认的防火墙策略禁止正常的NFS共享服务。
[root@zhangjh ~]# iptables -F [root@zhangjh ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
第2步:在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。
[root@zhangjh ~]# mkdir /nfsfile [root@zhangjh ~]# chmod -Rf 777 /nfsfile/ [root@zhangjh ~]# echo "welcome to nfspublic files" > /nfsfile/readme
第3步: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 | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
[root@zhangjh ~]# vim /etc/exports /nfsfile 192.168.38.*(rw,sync,root_squash)
第4步:启动和启用NFS服务程序。
由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要顺带重启并启用rpcbind服务程序,并将这两个服务一并加入开机启动项中。
[root@zhangjh ~]# systemctl restart rpcbind.service [root@zhangjh ~]# systemctl enable rpcbind.service [root@zhangjh ~]# systemctl start nfs-server [root@zhangjh ~]# systemctl enable nfs-server ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
第5步:linux客户端配置
使用showmount命令(以及必要的参数)查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。
showmount命令中可用的参数以及作用:
参数 | 作用 |
-e | 显示NFS服务器的共享列表 |
-a | 显示本机挂载的文件资源的情况NFS资源的情况 |
-v | 显示版本号 |
[root@zhangjh ~]# showmount -e 192.168.38.251 Export list for 192.168.38.251: /nfsfile 192.168.38.*
然后在NFS客户端创建一个挂载目录。使用mount命令并结合-t参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。
[root@zhangjh ~]# mkdir /nfsfile [root@zhangjh ~]# mount -t nfs 192.168.38.251:/nfsfile/ /nfsfile/
可以访问服务端的共享文件了
[root@zhangjh ~]# cd /nfsfile/ [root@zhangjh nfsfile]# ls readme [root@zhangjh nfsfile]# cat readme welcome to nfspublic files
如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:
[root@zhangjh ~]# vim /etc/fstab # /etc/fstab # Created by anaconda on Sun May 6 05:50:56 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel-root / xfs defaults 1 1 UUID=d33701cc-d80c-40b5-aa87-c07011414e1d /boot xfs defaults 1 2 /dev/mapper/rhel-swap swap swap defaults 0 0 #/dev/md0 /raid_mount ext4 defaults 0 0 #/dev/storage/zjh_dir /root/linshiceshi ext4 defaults 0 0 /dev/cdrom /media/cdrom iso9660 defaults 0 0 192.168.38.251:/nfsfile /nfsfile nfs defaults 0 0
AutoFs自动挂载服务
autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。
安装autofs:
[root@zhangjh ~]# yum install autofs -y
在autofs服务程序的主配置文件中需要按照“挂载目录 子配置文件”的格式进行填写。
[root@zhangjh ~]# vim /etc/auto.master # # Sample auto.master file # This is an automounter map and it has the following format # key [ -mount-options-separated-by-comma ] location # For details of the format look at autofs(5). # /media /etc/iso.misc #增加一行 /misc /etc/auto.misc # # NOTE: mounts done from a hosts map will be mounted with the # "nosuid" and "nodev" options unless the "suid" and "dev" # options are explicitly given. # /net -hosts # # Include /etc/auto.master.d/*.autofs # +dir:/etc/auto.master.d # # Include central master map if it can be found using # nsswitch sources. # # Note that if there are entries for /net or /misc (as # above) in the included master map any keys that are the # same will not be seen as the first read key seen takes # precedence. # +auto.master
在子配置文件中,应按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写。
例如,要把光盘设备挂载到/media/iso目录中,可将挂载目录写为iso,而-fstype为文件系统格式参数,iso9660为光盘设备格式,ro、nosuid及nodev为光盘设备具体的权限参数,/dev/cdrom则是定义要挂载的设备名称。配置完成后再顺手将autofs服务程序启动并加入到系统启动项中:
[root@zhangjh ~]# vim /etc/iso.misc iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom [root@zhangjh ~]# systemctl start autofs [root@zhangjh ~]# systemctl enable autofs ln -s '/usr/lib/systemd/system/autofs.service' '/etc/systemd/system/multi-user.target.wants/autofs.service'
接下来将发生一件非常有趣的事情。我们先查看当前的光盘设备挂载情况,确认光盘设备没有被挂载上,而且/media目录中根本就没有iso子目录。
但是,我们却可以使用cd命令切换到这个iso子目录中,而且光盘设备会被立即自动挂载上。我们也就能顺利查看光盘内的内容了。
[root@zhangjh ~]# df -h df: ‘/media/cdrom’: No such file or directory Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.1G 15G 18% / devtmpfs 909M 0 909M 0% /dev tmpfs 918M 80K 918M 1% /dev/shm tmpfs 918M 8.9M 909M 1% /run tmpfs 918M 0 918M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot //192.168.38.251/database 18G 3.1G 15G 18% /database [root@zhangjh ~]# cd /media/ [root@zhangjh media]# ls [root@zhangjh media]# cd iso [root@zhangjh iso]# ls -l total 812 dr-xr-xr-x. 4 root root 2048 May 7 2014 addons dr-xr-xr-x. 3 root root 2048 May 7 2014 EFI -r--r--r--. 1 root root 8266 Apr 4 2014 EULA -r--r--r--. 1 root root 18092 Mar 6 2012 GPL dr-xr-xr-x. 3 root root 2048 May 7 2014 images dr-xr-xr-x. 2 root root 2048 May 7 2014 isolinux dr-xr-xr-x. 2 root root 2048 May 7 2014 LiveOS -r--r--r--. 1 root root 108 May 7 2014 media.repo dr-xr-xr-x. 2 root root 774144 May 7 2014 Packages dr-xr-xr-x. 24 root root 6144 May 7 2014 release-notes dr-xr-xr-x. 2 root root 4096 May 7 2014 repodata -r--r--r--. 1 root root 3375 Apr 1 2014 RPM-GPG-KEY-redhat-beta -r--r--r--. 1 root root 3211 Apr 1 2014 RPM-GPG-KEY-redhat-release -r--r--r--. 1 root root 1568 May 7 2014 TRANS.TBL [root@zhangjh iso]# df -h df: ‘/media/cdrom’: No such file or directory Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.1G 15G 18% / devtmpfs 909M 0 909M 0% /dev tmpfs 918M 80K 918M 1% /dev/shm tmpfs 918M 8.9M 909M 1% /run tmpfs 918M 0 918M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot //192.168.38.251/database 18G 3.1G 15G 18% /database /dev/sr0 3.5G 3.5G 0 100% /media/iso