目录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