简介:
vsftpd 是 "very secure FTP daemon" 的缩写, 是一个完全免费的, 开放源代码的 ftp 服务器软件.
工作原理:
vsftpd 使用 ftp 协议, 该协议属于应用层协议. 它是典型的 c/s 架构, ftp 服务端用来存储文件, ftp 客户端可以通过 ftp 协议连接服务端实现上传和下载资源.
ftp 使用 tcp 的 21 端口进行命令传输, 然后用 tcp 的 20 端口进行数据传输 (主动模式).
特点:
非常高的安全性需求, 带宽限制, 良好的可伸缩性等.
安装部署:
- yum install vsftpd ftp lftp -y
- PS:
vsftpd 为服务端软件; ftp,lftp 为客户端工具, 推荐使用 lftp.
部署详情可参照《如何在 CentOS 服务器上搭建起 Oracle10,VNC, 以及 FTP》
启动服务:
service vsftpd start
查看状态:
service vsftpd status
用户登录:
用本地用户登录需要输入用户名及密码验证.
用 ftp 客户端匿名登录需要输入用户名及密码验证, 匿名用户名为: ftp 或者 anonymous, 密码为空.
用 lftp 客户端匿名登录则不需要输入以上信息.
本地用户登录:
- [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:~>
下载命令:
get 用于下载单个文件:
可以先切换到 ** 本地指定目录 **(data) 进行文件的下载, 保存:
- ftp> lcd /data1/
- Local directory now /data1
- ftp> cd /data2/
- ftp> get file001.txt
- ps:
当客户端已经连接上服务端, cd 是用于切换服务器中的目录命令, lcd 是用于切换客户端本地的目录.
mget 用于批量下载:
- ftp> mget file00*
- Total 7 files transferred
上传命令:
put 用于下载单个文件:
要想使用上传命令, 需要开启上传权限和可写权限, 可往下看.
直接上传不改名, 可以省去 - 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
mput 用于批量上传:
上传多个文件, 可以使用 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
解决办法:
这种问题一般就是空格导致的, 是每一行配置后面都不能有空格, 也不能跟注释.
来源: https://www.cnblogs.com/WoLykos/p/11812186.html