NFS、FTP介紹

第二十五課 NFS、FTP介紹

目錄html

1、 NFS介紹
2、NFS服務端安裝配置
3、NFS配置選項
4、exportfs命令
5、NFS客戶端問題
6、FTP介紹
7、使用vsftpd搭建ftp
8、xshell使用xftp傳輸文件
9、使用pure-ftpd搭建ftp服務
10、擴展前端


1、 NFS介紹

NFS是Network File System的縮寫,中文意思是網絡文件系統。mysql

NFS的主要功能是經過網絡(通常是局域網)讓不一樣的主機系統之間共享文件或目錄。linux

NFS最先由Sun公司開發,分2,3,4三個版本,2和3由Sun起草開發,4.0開始Netapp公司參與並主導開發,最新爲4.1版本sql

NFS數據傳輸基於RPC協議,RPC爲Remote Procedure Call的簡寫。shell

NFS應用場景是:A,B,C三臺機器上須要保證被訪問到的文件是同樣的,A共享數據出來,B和C分別去掛載A共享的數據目錄,從而B和C訪問到的數據和A上的一致vim

NFS工做原理流程windows

當訪問程序經過NFS客戶端向NFS服務器端存取文件時,其請求數據流程大體以下:安全

1)首先用戶訪問網站程序,由程序在NFS客戶端上發出存取NFS文件的請求,這時NFS客戶端的RPC服務就會經過網絡向NFS服務器端的RPC服務端的111端口發起NFS文件存取功能的請求。服務器

2)NFS服務器端的RPC服務找到對應的已註冊的NFS端口後,通知NFS客戶端的RPC服務。

3) NFS客戶端獲取到正確的端口,並與NFS服務器聯機讀取數據

4)NFS客戶端數據存取成功後,返回給前端訪問程序,告知用戶存取結果,做爲網站用戶,就完成了一次存取操做。


2、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


3、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


4、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


5、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服務


6、FTP介紹

文件傳輸協議(英文:File Transfer Protocol,縮寫:FTP)是用於在網絡上進行文件傳輸的一套標準協議,使用客戶/服務器模式。它屬於網絡傳輸協議的應用層。文件傳送(file transfer)和文件訪問(file access)之間的區別在於:前者由FTP提供,後者由如NFS等應用系統提供。

FTP的主要做用,就是讓用戶鏈接上一個遠程計算機(這些計算機上運行着FTP服務器程序)察看遠程計算機有哪些文件,而後把文件從遠程計算機上拷到本地計算機,或把本地計算機的文件送到遠程計算機去。

ftp小公司用的多,大企業不用FTP,由於不安全.


7、使用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.


8、xshell使用xftp傳輸文件

在xshell窗口按ctrl+alt+F,調出xftp安裝下載提示界面,根據提示下載安裝好xftp軟件

xftp的使用界面,與winscp相似


9、使用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.


10、擴展

vsftp使用mysql存放虛擬用戶並驗證

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

ftp的主動和被動模式

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

相關文章
相關標籤/搜索