vsftpd是“very secure FTP daemon”的缩写,是一个彻底免费的、开放源代码的ftp服务器软件。
html
vsftpd使用ftp协议,该协议属于应用层协议。它是典型的c/s架构,ftp服务端用来存储文件,ftp客户端能够经过ftp协议链接服务端实现上传和下载资源。
ftp使用tcp的21端口进行命令传输,而后用tcp的20端口进行数据传输(主动模式)。
python
很是高的安全性需求、带宽限制、良好的可伸缩性等。
vim
yum install vsftpd ftp lftp -y
PS:
vsftpd为服务端软件;ftp、lftp为客户端工具,推荐使用lftp。
部署详情可参照《如何在Centos服务器上搭建起Oracle十、VNC、以及FTP》
安全
service vsftpd start
服务器
service vsftpd status
架构
本地用户登陆: [root@TEST ~]# ftp ftp> open 8.8.8.8 Connected to 8.8.8.8 (8.8.8.8). 220 (vsFTPd 2.2.2) Name (8.8.8.8:root): root 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
登陆失败时: [root@TEST ~]# ftp 8.8.8.8 Connected to 8.8.8.8 (8.8.8.8). 220 (vsFTPd 2.2.2) Name (8.8.8.8:root): root 331 Please specify the password. Password: 530 Login incorrect. Login failed. ftp> close 221 Goodbye. ftp> open 8.8.8.8 Connected to 8.8.8.8 (8.8.8.8). 220 (vsFTPd 2.2.2) Name (8.8.8.8:root): root 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
ftp客户端匿名登陆: [root@TEST ~]# ftp 8.8.8.8 Connected to 8.8.8.8 (8.8.8.8). 220 (vsFTPd 2.2.2) Name (8.8.8.8:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
lftp客户端链接: [root@TEST ~]# lftp 8.8.8.8 lftp 8.8.8.8:~>
能够先切换到**本地指定目录**(data)进行文件的下载,保存: ftp> lcd /data1/ Local directory now /data1 ftp> cd /data2/ ftp> get file001.txt
ps:
当客户端已经链接上服务端,cd
是用于切换服务器中的目录命令,lcd
是用于切换客户端本地的目录。
dom
ftp> mget file00* Total 7 files transferred
要想使用上传命令,须要开启上传权限和可写权限,可往下看。tcp
直接上传不更名,能够省去-o refile: ftp> !dir file001.txt file002.txt ftp> bin 421 Timeout. ftp> put /etc/file003.txt 501 bytes transferred ftp> !dir file001.txt file002.txt file003.txt
PS:
若是不知道本地目录有哪些文件,可使用!dir
查看;
并且,必定要使用bin二进制传输!!!工具
上传文件以后,并更名,就要带-o refile了: ftp> bin 421 Timeout. ftp> put /etc/file003.txt -o file004.txt 501 bytes transferred ftp> ls drwx------ 2 14 50 6 Aug 08 06:27 file001.txt -rw------- 1 14 50 501 Aug 08 06:34 file002.txt -rw------- 1 14 50 501 Aug 08 06:34 file003.txt -rw------- 1 14 50 501 Aug 08 06:34 file004.txt
上传多个文件,可使用put
和mput
命令上传,多个文件之间用空格分隔;
若是想使用通配符,只有mput
命令支持:开放源代码
ftp> bin 421 Timeout. ftp> put /etc/file005.txt /etc/file006.txt 1580 bytes transferred Total 2 files transferred ftp> ls drwx------ 2 14 50 6 Aug 08 06:27 abc -rw------- 1 14 50 1079 Aug 08 06:40 file005.txt -rw------- 1 14 50 501 Aug 08 06:40 file006.txt ftp> bin 421 Timeout. ftp> mput /etc/file00* 1688 bytes transferred Total 2 files transferred ftp> ls drwx------ 2 14 50 6 Aug 08 06:27 abc -rw------- 1 14 50 1079 Aug 08 06:41 file005.txt -rw------- 1 14 50 501 Aug 08 06:41 file006.txt
匿名用户的默认配置只能进行文件的读取和下载,不能进行写入和上传文件:
lftp 8.8.8.8:~> put /etc/fstab put: Access failed: 550 Permission denied. (fstab) lftp 8.8.8.8:/> mkdir abc mkdir: Access failed: 550 Permission denied. (abc) 能够看到上传命令和建立命令都失败了,没有响应的权限!
开启匿名用户建立文件,重命名,删除,上传权限:
#开启上传权限 anon_upload_enable=YES #开启建立文件权限 anon_mkdir_write_enable=YES #开启重命名,删除权限 anon_other_write_enable=YES
重启服务,再次进入,发现仍是无法建立目录,可是报错信息不同,以下:
lftp 8.8.8.8:/> mkdir abc mkdir: Access failed: 550 Create directory operation failed. (abc)
这是由于目录没有写权限,给==pub目录受权==,以下:
[root@localhost ~]# chmod o+w /var/ftp/pub/ [root@localhost ~]# ll /var/ftp/pub/ -d drwxr-xrwx 3 root root 192 8月 7 08:37 /var/ftp/pub/
再次进入,建立目录,以下:
lftp 8.8.8.8:/pub> mkdir abc mkdir 成功, 创建 `abc'
PS:
要想匿名用户有写的权限,一是须要服务端配置文件开启写的权限,二是所在的目录自己有其余用户写的权限!
你甚至能够修改配置文件,只让本地用户登陆:
vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES
若是重启或者登录服务器时,报错以下:
[root@localhost ~]# systemctl restart vsftpd Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details. [root@localhost ~]# journalctl -xe -- Unit vsftpd.service has begun starting up. 8月 08 02:59:14 localhost.localdomain vsftpd[12751]: 500 OOPS: bad bool value in config file for: anonymous_en 8月 08 02:59:14 localhost.localdomain systemd[1]: vsftpd.service: control process exited, code=exited status=2
这种问题通常就是空格致使的,是每一行配置后面都不能有空格,也不能跟注释。