0525NFS与FTP服务搭建与配置
一、NFS介绍
1、NFS简介
- NFS,Network File System。网络文件系统,即通过网络,对在不同主机上的文件进行共享。
- NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本,更新比较慢其实4.1是从2010年就开始使用了。
- NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
2、NFS应用场景
NFS应用场景为:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
在生产环境,我们很少使用单机部署应用,因为单机存在单点故障,一旦宕机,将无法为前端业务提供服务,这是客户无法容忍的。 现在提倡的高可用及7*24服务,是我们追求的目标。对于一些小的应用,双机成为了主流。
我们来看一种简单集群场景,应用分别部署在A及B上,前端通过F5或着web服务器访问应用。NFS提供了一种机制,可以让A、B访问C中的一个共享目录,就像是操作本地文件一样。
3、NFS原理
- 首先:NFS包括两部分,服务端及客户端
- 由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册,那么客户端PRC就能与服务器RPC进行通信,从而进行文件的传输。
- 当客户端用户打开一个文件或目录时,内核会判断,该文件是本地文件还是远程共享目录文件,如果是远程文件则通过RPC进程访问远程NFS服务端的共享目录,如果是本地文件,则直接打开。
- 为了更好的并发,RPC进程及NFS进程都有多个。
二、安装配置NFS
1、准备两台机器,一台作为服务端(luo01 192.168.169.129),一台作为客户端(luo02 192.168.169.130);
2、在luo01上安装:nfs-utils包
yum install -y nfs-utils
同时也在luo02上安装:nfs-utils包;
yum install -y nfs-utils
3、在luo01上,新建配置文件;写入以下语句
vim /etc/exports
/home/nfstestdir 192.168.169.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
说明:
- /home/nfstestdir :共享的目录
- rw: 读写
- ro: 只读
- sync: 同步模式,内存数据实时写入磁盘
- async :非同步模式
- no_root_squash: 客户端挂载NFS共享目录后,root用户不受约束,权限很大
- root_squash: 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
- all_squash:客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
- anonuid/anongid: 和上面几个选项搭配使用,定义被限定用户的uid和gid
- 192.168.169.0/24:为客户端的网段;
4、创建nfstestdir目录,并给予777权限;
mkdir /home/nfstestdir
chmod 777 /home/nfstestdir/
5、开启nfs服务,并监听端口,端口111为NFS服务的默认端口;
(systemctl start rpcbind)
systemctl start nfs
netstat -lnpt
ps aux |grep nfs
6、设置开机启动:systemctl enable nfs
7、在客户端luo02上设置:
查看服务端共享目录:showmount -e 192.168.169.129
此时,需要关闭两台机器的防火墙及selinux
systemctl stop firewalld
getenforce
setenforce 0
关闭后连接成功
8、在luo02上挂载NFS
mount -t nfs 192.168.169.129:/home/nfstestdir /mnt/
9、在增加的/mnt分区,就是NFS共享的目录,在该目录下创建测试文件
cd /mnt/
ls
touch luo.111
10、在服务端luo01机器上,查看其详细信息
三、exportfs命令
假如A的NFS服务停掉了,但是B和C还在挂载着A分享的分区,这就无法正常工作了,由于B和C上面的进程是d状态(不可中断进程,在ps一节中学习到的),一旦A停止了,B和C一定会出问题,无法服务,既不可以重启,也不可以关闭,就会把系统整挂掉。所以NFS一定不可以随便重启。 如果必须重启怎么办?先把B和C上面的目录卸载下来。那么就开始卸载 B和C的目录,一个一个卸载下来;出现这种情况,不利于生产以及智能化。因此需要利用exportps命令。
1、exportps命令常用选项:
选项 | 释义 |
-a | 全部挂载或者全部卸载 |
-r | 重新挂载 |
-u | 卸载某一个目录 |
-v | 显示共享目录 |
2、在服务端luo01上:exportfs -arv
exporting 192.168.169.0/24:/home/nfstestdir
这样就可以让服务器直接生效,不需要再次重启nfs服务,也不会对客户端造成之前所说的错误!
3、编辑配置文件,增加一个共享的目录
vim /etc/exports
/tmp/ 192.168.169.130(rw,sync,no_root_squash) //新增一个共享目录,及其权限
3、用命令:exportfs -arv 直接生效,不用重启NFS服务
exportfs -arv
exporting 192.168.169.130:/tmp //新增加的共享目录
exporting 192.168.169.0/24:/home/nfstestdir
4、在luo02上,卸载挂载点
家目录中:umount /mnt
5、使用luo02客户端测试;
查看服务端共享目录:showmount -e 192.168.169.129
5、在luo02上挂载到mnt下
mount -t nfs 192.168.169.129:/tmp /mnt/
6、在luo02中mnt下创建一个测试文本;
新建测试文本1212.txt,查看其gid和uid都为root;
vi /mnt/1212.txt
ls -l /mnt/
7、在服务端luo01下,查看/tmp目录下的1212.txt测试文本,其uid和gid都为root
四、NFS服务端问题
注意:NFS 4版本会有该问题
我们在分享一个目录且权限设置为no_root_squash,客户端看到的文件属主、组不是root,却是nobody。 这个不是设置错误,是软件本身自带的BUG。
解决方案:
方案1:在客户端挂载的时候加上 -o nfsvers=3,其目的是制定nfs使用3版本。
mount -t nfs -o,nfsvers=3 192.168.169.129:/tmp /mnt/
方案2:在服务端和客户端配置:vim /etc/idmapd.conf
vi /etc/idmapd.conf
#Domain = local.domain.edu // 改为 Domain = xxx.com,任意域名
然后再重启rpcbind服务;
五、FTP服务
1、FTP服务介绍
我们之前传输文件所用的是rzsz命令,可以简单明了的就把我们所需的文件下载或者上传。但是有个缺陷,不可以上传或者下载大体积的文件。FTP就可以解决这个问题!
FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。 小公司用的多,大企业不用FTP,因为不安全。
2、使用vsftpd搭建ftpfuw
(1)安装相关软件
centos上自带的FTP软件vsftpd,默认没有安装;需要用yum安装;
yum install -y vsftpd
安装后,不用配置,可以直接使用,默认支持使用系统账号登录,但是因为安全原因,需要建立账号体系;
(2)创建用户
安装后,不用配置,可以直接使用,默认支持使用系统账号登录,但是因为安全原因,需要建立账号体系;
useradd -s /sbin/nologin virftp //创建虚拟用户
vim /etc/vsftpd/vsftpd_login //编写虚拟用户的账号、密码文件
(奇数行为用户名,偶数行为密码)
testuser1
129615
user1
129615
设置文件权限:chmod 600 /etc/vsftpd/vsftpd_login
(3)vsfptd 使用的密码不是明文,所以需要生产相对应的库文件;
db_load -T -t hash -f /etc/vsftpd/vsftpd_login
/etc/vsftpd/vsftpd_login.db
生成完毕后查看:
ls -l /etc/vsftpd/
-rw-r--r--. 1 root root 12288 5月 26 23:12 vsftpd_login.db//此为生成的库文件密码
(4)创建与虚拟账号相关的虚拟账号,以及配置文件
mkdir /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf
vim testuser1 //新建账号的配置文件
添加如下配置内容:
local_root=/home/virftp/testuser1 //虚拟用户的家目录
anonymous_enable=NO //是否允许匿名用户
write_enable=YES //是否允许可写
local_umask=022 //创建新目录和文件的权限
anon_upload_enable=NO //是否允许匿名用户上传
anon_mkdir_write_enable=NO //是否允许匿名用户可创建
idle_session_timeout=600 //连接后没有任何操作的超时时间,空闲时间段
data_connection_timeout=120 //数据传输超时时间
max_clients=10 //最大允许连接的clients客户端
(5)创建虚拟用户的家目录,并在其下面创建新文件
mkdir /home/virftp/testuser1
touch /home/virftp/testuser1/test.txt
chown -R virftp:virftp /home/virftp //更改整个目录权限
(6)配置认证文件及路径。
vim /etc/pam.d/vsftpd
最前面添加:
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login //新增语句
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login //新增语句
(7)修改全局配置文件/etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
修改如下内容:
将anonymous_enable=YES 改为 anonymous_enable=NO
将#anon_upload_enable=YES 改为 anon_upload_enable=NO
将
#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO
在最末尾添加如下配置:
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES
(8)启动服务并查看启动状态
systemctl start vsftpd
ps aux |grep vsftp
netstat -lntp
注意: 21端口FTP; 22端口SSHD; 23端口TELNET
3、客户端的FTP测试
Windows中可以安装filezilla软件,linux服务器端安装lftp
yum install -y lftp
查看服务端的文件:lftp testuser1@127.0.0.1
Ls
可用?查看能够使用哪些命令
4、xshell使用xftp传输文件
(1)、使用xshell直接传输
原理就是:使用sftp模式登录服务器
第一步:在xshell下,新建会话,按下图设置其属性;
第二步:按下图,设置其目标目录;
第三步:此时弹出页面,填写主机名,root
第四步:此时进入到/root下,可以到有大文件的目录xia;
(2)、xshell使用xftp软件传输文件
六、使用pure-ftpd搭建ftp服务
Pure-ftp为另外一款轻量FTP服务软件,和vsftp类似
1、安装并配置pure-ftpd
yum install -y pure-ftpd
vim /etc/pure-ftpd/pure-ftpd.conf
按下图,让其语句加载(即去掉前面的#)
因为vsftpd和pure-ftpd 共用21端口,因此需要把vsftpd服务关掉,再开启pure-ftpd
systemctl stop vsftpd
systemctl start pure-ftpd
ps aux | grep pure-ftpd
2、创建一个新的系统用户
mkdir /data/ftp //创建数据目录
touch /data/ftp/123.txt //创建一个文件
useradd -u 1020 pure-ftp //设置UID
chown -R pure-ftp:pure-ftp /data/ftp/
3、通过pure-pw命令增加ftp用户以及配置用户库文件
pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp/
pure-pw mkdb //建立虚拟用户数据
lftp ftp_usera@127.0.0.1