HJM

导航

NFS、FTP介绍

第二十五课 NFS、FTP介绍

目录

一、 NFS介绍
二、NFS服务端安装配置
三、NFS配置选项
四、exportfs命令
五、NFS客户端问题
六、FTP介绍
七、使用vsftpd搭建ftp
八、xshell使用xftp传输文件
九、使用pure-ftpd搭建ftp服务
十、扩展


一、 NFS介绍

NFS是Network File System的缩写,中文意思是网络文件系统。

NFS的主要功能是通过网络(一般是局域网)让不同的主机系统之间共享文件或目录。

NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本

NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。

NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致

NFS工作原理流程

当访问程序通过NFS客户端向NFS服务器端存取文件时,其请求数据流程大致如下:

1)首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端的RPC服务就会通过网络向NFS服务器端的RPC服务端的111端口发起NFS文件存取功能的请求。

2)NFS服务器端的RPC服务找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务。

  1. NFS客户端获取到正确的端口,并与NFS服务器联机读取数据

4)NFS客户端数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。


二、NFS服务端安装配置

NFS服务器的安装

//nfs-utils是NFS服务的主程序,包括rpc.nfsd、rpc.mounted
yum -y install nfs-utils rpcbind

安装完成后,修改配置文件

[root@localhost ~]# vim /etc/exports
//增加如下内容
/home/nfstestdir 192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

//创建/home/nfstestdir目录
[root@localhost ~]# mkdir /home/nfstestdir

//为简化实验环境,将/home/nfstestdir目录权限设为777
[root@localhost ~]# chmod 777 /home/nfstestdir/

//启动rpcbind.service(必须先于nfs主程序启动)
[root@localhost ~]# systemctl start rpcbind.service 
[root@localhost ~]# systemctl enable rpcbind.service


//查看rpcbind是否正常启动
[root@localhost ~]# netstat -nltup | grep :111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2016/rpcbind        
tcp6       0      0 :::111                  :::*                    LISTEN      2016/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           2016/rpcbind        
udp6       0      0 :::111                  :::*                                2016/rpcbind      

//启动nfs主程序
[root@localhost ~]# systemctl start nfs.service 
[root@localhost ~]# systemctl enable nfs.service 


//查看nfs是否正常启动
[root@localhost ~]# ps aux | grep nfs
root       2098  0.0  0.0      0     0 ?        S<   22:53   0:00 [nfsd4_callbacks]
root       2104  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2105  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2106  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2107  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2108  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2109  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2110  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2111  0.0  0.0      0     0 ?        S    22:53   0:00 [nfsd]
root       2115  0.0  0.0 112660   968 pts/0    R+   22:54   0:00 grep --color=auto nfs



三、NFS配置选项

NFS选项

rw 读写

ro 只读

sync 同步模式,内存数据实时写入磁盘

async 非同步模式

no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大

root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户

all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户

anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid

NFS客户端安装及共享挂载

[root@localhost ~]# yum -y install rpcbind nfs-utils

[root@localhost ~]# systemctl start rpcbind.service 
[root@localhost ~]# systemctl enable rpcbind.service 
[root@localhost ~]#  showmount -e 192.168.1.22
Export list for 192.168.1.22:
/home/nfstestdir 192.168.1.0/24
[root@localhost ~]# mount -t nfs 192.168.1.22:/home/nfstestdir /mnt
[root@localhost ~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/sda2                       19G  1.5G   18G   8% /
devtmpfs                       479M     0  479M   0% /dev
tmpfs                          489M     0  489M   0% /dev/shm
tmpfs                          489M  6.7M  482M   2% /run
tmpfs                          489M     0  489M   0% /sys/fs/cgroup
/dev/sda1                      197M   98M  100M  50% /boot
tmpfs                           98M     0   98M   0% /run/user/0
192.168.1.22:/home/nfstestdir   19G  1.5G   18G   8% /mnt

//NFS客户端
[root@localhost ~]# touch /mnt/testfile.txt
[root@localhost ~]# ls -l /mnt/testfile.txt 
-rw-r--r-- 1 1000 1000 0 Jul 12 23:28 /mnt/testfile.txt
//服务器端
[root@localhost ~]# ls -l  /home/nfstestdir/testfile.txt 
-rw-r--r-- 1 1000 1000 0 Jul 12 23:28 /home/nfstestdir/testfile.txt


四、exportfs命令

exportfs 命令用来管理当前NFS共享的文件系统列表。

常用选项

-a 全部挂载或者全部卸载

-r 重新挂载

-u 卸载某一个目录

-v 显示共享目录

exportfs实现nfs服务的平滑重启

[root@nfs-server ~]# vim /etc/exports
//增加
/tmp/test 10.0.1.0/24(rw,sync,all_squash)

//未重启前
[root@lnmp01 ~]# vim /etc/exports
[root@lnmp01 ~]# showmount -e 10.0.1.80
Export list for 10.0.1.80:
/data 10.0.1.0/24
[root@lnmp01 ~]# ifconfig | awk 'NR==2{print $2}'  
10.0.1.81
//重启
[root@nfs-server ~]#  ifconfig | awk 'NR==2{print $2}'
10.0.1.80
[root@nfs-server ~]# exportfs -arv  
exporting 10.0.1.0/24:/tmp/test
exporting 10.0.1.0/24:/data

[root@lnmp01 ~]# showmount -e 10.0.1.80          
Export list for 10.0.1.80:
/tmp/test 10.0.1.0/24
/data     10.0.1.0/24

[root@lnmp01 ~]# mkdir /tmp/demo
[root@lnmp01 ~]# mount -t nfs 10.0.1.80:/tmp/test /tmp/demo
[root@lnmp01 ~]# touch /tmp/demo/lnmp01.txt
[root@lnmp01 ~]# ls -l /tmp/demo/lnmp01.txt 
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jul 15 05:35 /tmp/demo/lnmp01.txt
[root@nfs-server ~]# ls -l /tmp/test/lnmp01.txt 
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jul 15 05:35 /tmp/test/lnmp01.txt

//修改参数all_squash为no_root_squash
[root@nfs-server ~]# vim /etc/exports
/tmp/test 10.0.1.0/24(rw,sync,no_root_squash)
[root@nfs-server ~]# exportfs -arv
exporting 10.0.1.0/24:/tmp/test
exporting 10.0.1.0/24:/data

//客户端
[root@lnmp01 demo]# touch user01.txt
[root@lnmp01 demo]# ll user01.txt
-rw-r--r--. 1 root root 0 Jul 15 05:43 user01.txt
//服务器端
[root@nfs-server ~]# ls -l /tmp/test/user01.txt 
-rw-r--r--. 1 root root 0 Jul 15 05:43 /tmp/test/user01.txt


五、NFS客户端问题

客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody

NFS 4版本会有该问题

解决办法:客户端挂载时加上 -o nfsvers=3

如:[root@lnmp01 demo]# mount -t nfs -o remount,nfsvers=3 10.0.1.80:/tmp/test/ /tmp/demo/

或者

vim /etc/idmapd.conf //

把"#Domain = local.domain.edu" 改为 "Domain = xxx.com" (这里的xxx.com,自己定义),然后再重启

rpcbind服务


六、FTP介绍

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。

FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。

ftp小公司用的多,大企业不用FTP,因为不安全.


七、使用vsftpd搭建ftp

Centos本身自带和ftp软件是vsftp。

vsftp的安装

[root@localhost ~]# yum -y install vsftpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.njupt.edu.cn
 * updates: mirrors.huaweicloud.com
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:3.0.2-22.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================================================
 Package                      Arch                         Version                             Repository                  Size
================================================================================================================================
Installing:
 vsftpd                       x86_64                       3.0.2-22.el7                        base                       169 k

Transaction Summary
================================================================================================================================
Install  1 Package

Total download size: 169 k
Installed size: 348 k
Downloading packages:
vsftpd-3.0.2-22.el7.x86_64.rpm                                                                           | 169 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : vsftpd-3.0.2-22.el7.x86_64                                                                                   1/1 
  Verifying  : vsftpd-3.0.2-22.el7.x86_64                                                                                   1/1 

Installed:
  vsftpd.x86_64 0:3.0.2-22.el7                                                                                                  

Complete!

默认配置文件

[root@localhost ~]# grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

启动vsftp

[root@localhost ~]# systemctl start vsftpd.service 
udp6       0      0 ::1:323                 :::*                                684/chronyd         
[root@localhost ~]# netstat -nltup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1070/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1162/master         
tcp6       0      0 :::21                   :::*                    LISTEN      1463/vsftpd         
tcp6       0      0 :::22                   :::*                    LISTEN      1070/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1162/master         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           684/chronyd         
udp6       0      0 ::1:323                 :::*                                684/chronyd         

默认匿名用户可以登录

//默认ftp没有安装,用yum安装一下
[root@localhost ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

配置虚拟用户访问ftp

1.添加虚拟用户映射的本地用户

[root@localhost ~]# useradd -s /sbin/nologin vftp
[root@localhost ~]# tail -1 /etc/passwd
vftp:x:5001:5001::/home/vftp:/sbin/nologin

2.创建虚拟用户密码文件

[root@localhost ~]# vim /etc/vsftpd/vftp_user
[root@localhost ~]# cat /etc/vsftpd/vftp_user
//内容如下,奇数行为用户名,偶数行为密码,多个用户就写多行
frank
123456
nicole
123456
[root@localhost ~]#db_load -T -t hash -f /etc/vsftpd/vftp_user /etc/vsftpd/vftp_user.db
[root@localhost vsftpd_user_conf]# ls -l /etc/vsftpd/vftp_user.db 
-rw-r--r-- 1 root root 12288 Jul 15 21:43 /etc/vsftpd/vftp_user.db
[root@localhost ~]# chmod 600 /etc/vsftpd/vftp_user.db
[root@localhost ~]# ls -l /etc/vsftpd/vftp_user.db          
-rw------- 1 root root 12288 Jul 15 21:43 /etc/vsftpd/vftp_user.db

3.创建虚拟用户配置文件

[root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@localhost ~]# vim /etc/vsftpd/vsftpd_user_conf/frank
//内容如下
local_root=/home/vftp/frank
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

4.创建虚拟用户家目录

[root@localhost ~]# mkdir -p /home/vftp/frank
//创建测试文件
[root@localhost ~]# vim /home/vftp/frank/test.txt
//修改虚拟用户家目录权限
[root@localhost ~]# chown -R vftp:vftp /home/vftp

5.修改登录认证文件

[root@localhost ~]# vim /etc/pam.d/vsftpd 
#%PAM-1.0
//增加如下两行内容
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vftp_user
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vftp_user

session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

6.修改配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
//修改内容如下
anonymous_enable=YES---->anonymous_enable=NO
anonymous_enable=YES---->anonymous_enable=NO
anon_mkdir_write_enable=YES---->anon_mkdir_write_enable=NO
//增加如下内容
chroot_local_user=YES
guest_enable=YES
guest_username=vftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES

7.重启vsftpd服务

[root@localhost ~]# systemctl restart vsftpd.service 

8.测试

本地测试

lftp 127.0.0.1:~> quit
[root@localhost ~]# lftp frank@127.0.0.1
Password: 
lftp frank@127.0.0.1:~> ls        
-rw-r--r--    1 5001     5001            0 Jul 16 01:46 test.txt
lftp frank@127.0.0.1:/> quit
[root@localhost ~]# 

windows下测试

C:\Users\kennminn>ftp 10.0.1.242
连接到 10.0.1.242。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(10.0.1.242:(none)): frank
331 Please specify the password.
密码:
230 Login successful.
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r--    1 5001     5001            0 Jul 16 01:46 test.txt
226 Directory send OK.
ftp: 收到 69 字节,用时 0.00秒 17.25千字节/秒。
ftp> get test.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test.txt (0 bytes).
226 Transfer complete.
ftp> quit
221 Goodbye.

八、xshell使用xftp传输文件

在xshell窗口按ctrl+alt+F,调出xftp安装下载提示界面,根据提示下载安装好xftp软件

xftp的使用界面,与winscp类似


九、使用pure-ftpd搭建ftp服务

pure-ftpd的安装需要用到epel-release源,如果未安装,可以用yum安装

[root@localhost ~]# yum install -y epel-release

安装pure-ftp

[root@localhost ~]# yum install -y pure-ftpd
Loaded plugins: fastestmirror
...中间略...
Installed:
  pure-ftpd.x86_64 0:1.0.42-3.el7                                                                                              

Dependency Installed:
  postgresql-libs.x86_64 0:9.2.23-3.el7_4                             usermode.x86_64 0:1.111-5.el7                            

Complete!

2.编辑配置文件

[root@localhost ~]# vim /etc/pure-ftpd/pure-ftpd.conf
# PureDB user database (see README.Virtual-Users)
//取消下行注释
PureDB                        /etc/pure-ftpd/pureftpd.pdb

3.重启pure-ftp服务

[root@localhost ~]# systemctl start pure-ftpd.service 
[root@localhost ~]# netstat -nltup | grep :21
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      1223/pure-ftpd (SER 
tcp6       0      0 :::21                   :::*                    LISTEN      1223/pure-ftpd (SER 
[root@localhost ~]# 

4.创建ftp目录及虚拟用户映射的本地用户

//创建目录
[root@localhost ~]# mkdir -p /data/ftp
[root@localhost ~]# ls -ld !$
ls -ld /data/ftp
drwxr-xr-x 2 root root 6 Jul 15 22:46 /data/ftp
//创建用户
[root@localhost ~]# useradd -u 5001 pure-ftp
[root@localhost ~]# chown -R pure-ftp.pure-ftp /data/ftp
[root@localhost ~]# ls -ld !$
ls -ld /data/ftp
drwxr-xr-x 2 pure-ftp pure-ftp 6 Jul 15 22:46 /data/ftp

5.创建虚拟用户

[root@localhost ~]# pure-pw useradd ftp_usera -u pure-ftp  -d /data/ftp
Password: 
Enter it again: 
[root@localhost ~]# pure-pw mkdb
[root@localhost ~]# pure-pw list
ftp_usera           /data/ftp/./ 

//pure-pw用法参照帮助
[root@localhost ~]# pure-pw --help

Usage :

pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
                -D/-d <home directory> [-c <gecos>]
                [-t <download bandwidth>] [-T <upload bandwidth>]
                [-n <max number of files>] [-N <max Mbytes>]
                [-q <upload ratio>] [-Q <download ratio>]
                [-r <allow client ip>/<mask>] [-R <deny client ip>/<mask>]
                [-i <allow local ip>/<mask>] [-I <deny local ip>/<mask>]
                [-y <max number of concurrent sessions>]
                [-z <hhmm>-<hhmm>] [-m]

pure-pw usermod <login> -f <passwd file> -u <uid> [-g <gid>]
                -D/-d <home directory> -[c <gecos>]
                [-t <download bandwidth>] [-T <upload bandwidth>]
                [-n <max number of files>] [-N <max Mbytes>]
                [-q <upload ratio>] [-Q <download ratio>]
                [-r <allow client ip>/<mask>] [-R <deny client ip>/<mask>]
                [-i <allow local ip>/<mask>] [-I <deny local ip>/<mask>]
                [-y <max number of concurrent sessions>]
                [-z <hhmm>-<hhmm>] [-m]

pure-pw userdel <login> [-f <passwd file>] [-m]

pure-pw passwd  <login> [-f <passwd file>] [-m]

pure-pw show    <login> [-f <passwd file>]

pure-pw mkdb    [<puredb database file> [-f <passwd file>]]
                [-F <puredb file>]

pure-pw list    [-f <passwd file>]

-d <home directory> : chroot user (recommended)
-D <home directory> : don't chroot user
-<option> '' : set this option to unlimited
-m : also update the /etc/pure-ftpd/pureftpd.pdb database
For a 1:10 ratio, use -q 1 -Q 10
To allow access only between 9 am and 6 pm, use -z 0900-1800

6.测试

本地测试

[root@localhost ~]# lftp ftp_usera@127.0.0.1
Password: 
lftp ftp_usera@127.0.0.1:~> ls    
drwxr-xr-x    2 5001       pure-ftp            6 Jul 15 22:46 .
drwxr-xr-x    2 5001       pure-ftp            6 Jul 15 22:46 ..
lftp ftp_usera@127.0.0.1:/> 

windows下测试

C:\Users\kennminn>ftp 10.0.1.242
连接到 10.0.1.242。
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 2 of 50 allowed.
220-Local time is now 22:55. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
200 OK, UTF-8 enabled
用户(10.0.1.242:(none)): ftp_usera
331 User ftp_usera OK. Password required
密码:
230 OK. Current directory is /
ftp> ls
200 PORT command successful
150 Connecting to port 4919
.
..
226-Options: -a
226 2 matches total
ftp: 收到 10 字节,用时 0.00秒 10000.00千字节/秒。
ftp> quit
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.

十、扩展

vsftp使用mysql存放虚拟用户并验证

http://www.aminglinux.com/bbs/thread-342-1-1.html

ftp的主动和被动模式

http://www.aminglinux.com/bbs/thread-961-1-1.html

posted on 2018-07-16 11:03  kennminn  阅读(1029)  评论(0编辑  收藏  举报