目錄html
1、 NFS介紹
2、NFS服務端安裝配置
3、NFS配置選項
4、exportfs命令
5、NFS客戶端問題
6、FTP介紹
7、使用vsftpd搭建ftp
8、xshell使用xftp傳輸文件
9、使用pure-ftpd搭建ftp服務
10、擴展前端
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客戶端數據存取成功後,返回給前端訪問程序,告知用戶存取結果,做爲網站用戶,就完成了一次存取操做。
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選項
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 命令用來管理當前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
客戶端掛載共享目錄後,不論是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服務
文件傳輸協議(英文:File Transfer Protocol,縮寫:FTP)是用於在網絡上進行文件傳輸的一套標準協議,使用客戶/服務器模式。它屬於網絡傳輸協議的應用層。文件傳送(file transfer)和文件訪問(file access)之間的區別在於:前者由FTP提供,後者由如NFS等應用系統提供。
FTP的主要做用,就是讓用戶鏈接上一個遠程計算機(這些計算機上運行着FTP服務器程序)察看遠程計算機有哪些文件,而後把文件從遠程計算機上拷到本地計算機,或把本地計算機的文件送到遠程計算機去。
ftp小公司用的多,大企業不用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窗口按ctrl+alt+F,調出xftp安裝下載提示界面,根據提示下載安裝好xftp軟件
xftp的使用界面,與winscp相似
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