ftp服务基本原理与配置
一、原理
FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一,用来在计算机之间互相传送文件。FTP有两个连接端口,一个是控制连接,端口号是21,用于发送指令给服务器端以及等待服务器响应;一个是数据传输端口,端口号是20,用于建立数据传输通道。
在linux系统中,提供ftp协议的包是vsftpd。
FTP交互过程原理图:
二、安装配置
1、安装
[root@localhost ~]# yum install vsftpd -y #下载服务
[root@localhost ~]# systemctl start vsftpd #启动服务
[root@localhost ~]# systemctl stop firewalld #关闭防火墙
#此时,若不想关闭防火墙,可以将ftp服务列入firewall-cmd --list-all中,过程如下:
[root@localhost ~]# firewall-cmd --add-service=ftp
success
[root@localhost ~]# firewall-cmd --reload
success
##上面两种方法用一种即可
[root@localhost Desktop]# lftp 172.25.254.170 #测试,lftp后面跟ftp服务器ip
lftp 172.25.254.170:~> ls
drwxr-xr-x 2 0 0 6 Aug 03 2015 pub
#服务器打开成功
2.基本信息和配置
(1) vsftpd文件信息
- /var/ftp #默认ftp文件发布目录
- /etc/vsftpd/vsftpd.conf #服务配置目录
(2) 提示报错信息
- 500 #权限过大
- 550 #服务本身不允许
- 553 #本地文件权限过小
- 530 #用户认证失败
(3) 基本配置
1、匿名用户设定
1)匿名用户是否可以登陆
anonymous_enable=NO|YES
[root@localhost Desktop]# lftp 172.25.254.170 #匿名用户可以正常登陆
lftp 172.25.254.170:~> ls
drwxr-xr-x 2 0 0 6 Aug 03 2015 pub
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #修改配置参数,为YES匿名用户可以正常登陆,为NO不可以
[root@localhost ~]# systemctl restart vsftpd #每次修改配置文件之后,都需要重启服务
[root@localhost Desktop]# lftp 172.25.254.170
lftp 172.25.254.170:~> ls #可以看出,匿名用户此时不可以登陆
`ls' at 0 [Delaying before reconnect: 19]
Interrupt
2) 匿名用户上传
write_enable=YES
anon_upload_enable=YES
[root@localhost Desktop]# lftp 172.25.254.170
lftp 172.25.254.170:~> ls
drwxr-xr-x 2 0 0 6 Aug 03 2015 pub
lftp 172.25.254.170:/> put /etc/passwd #默认匿名用户不可以上传
put: Access failed: 550 Permission denied. (passwd)
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
write_enable=YES #写文件的权限
anon_upload_enable=YES #匿名用户是否可以上传,本身被注释掉的
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# chgrp ftp /var/ftp/pub/
[root@localhost ~]# chmod 775 /var/ftp/pub/ #一定要修改目录权限
[root@localhost Desktop]# lftp 172.25.254.170
lftp 172.25.254.170:~> ls
drwxrwxr-x 2 0 50 6 Aug 03 2015 pub
lftp 172.25.254.170:/> cd pub/
lftp 172.25.254.170:/pub> put /etc/passwd #上传成功
2323 bytes transferred
lftp 172.25.254.170:/pub> ls
-rw------- 1 14 50 2323 Nov 09 01:37 passwd #14 50分别是ftp用户的uid和gid
3) 匿名用户家目录修改
默认匿名用户进入ftp时进入的是/var/ftp/目录
anon_root=/directory
[root@localhost /]# mkdir /ftp
[root@localhost /]# vim /etc/vsftpd/vsftpd.conf
anon_root=/ftp #这个配置需要自己添加
[root@localhost /]# systemctl restart vsftpd.service
[root@localhost /]# touch /ftp/file{1..5}
[root@localhost Desktop]# lftp 172.25.254.170
lftp 172.25.254.170:~> ls #ls显示出来的是/ftp里面的文件,修改成功
-rw-r--r-- 1 0 0 0 Nov 09 01:43 file1
-rw-r--r-- 1 0 0 0 Nov 09 01:43 file2
-rw-r--r-- 1 0 0 0 Nov 09 01:43 file3
-rw-r--r-- 1 0 0 0 Nov 09 01:43 file4
-rw-r--r-- 1 0 0 0 Nov 09 01:43 file5
4)匿名用户上传文件默认权限修改
anon_umask=xxx
[root@localhost /]# vim /etc/vsftpd/vsftpd.conf
anon_umask=022 #需要自己写入,666-022=644,就是上传文件的权限
[root@localhost /]# systemctl restart vsftpd.service
[root@localhost Desktop]# lftp 172.25.254.170
lftp 172.25.254.170:~> cd pub/
lftp 172.25.254.170:/pub> put /etc/shadow
1284 bytes transferred
lftp 172.25.254.170:/pub> ls
-rw------- 1 14 50 2323 Nov 09 01:37 passwd
-rw-r--r-- 1 14 50 1284 Nov 09 01:48 shadow #权限是644,成功
5)匿名用户建立目录
anon_mkdir_write_enable=YES|NO
[root@localhost /]# vim /etc/vsftpd/vsftpd.conf
anon_mkdir_write_enable=YES #去掉注释符号即可
[root@localhost /]# systemctl restart vsftpd.service
[root@localhost Desktop]# lftp 172.25.254.170
lftp 172.25.254.170:~> cd pub/
lftp 172.25.254.170:/pub> ls
-rw------- 1 14 50 2323 Nov 09 01:37 passwd
-rw-r--r-- 1 14 50 1284 Nov 09 01:48 shadow
lftp 172.25.254.170:/pub> mkdir test
mkdir ok, `test' created
lftp 172.25.254.170:/pub> ls #可以看出,目录创建成功
-rw------- 1 14 50 2323 Nov 09 01:37 passwd
-rw-r--r-- 1 14 50 1284 Nov 09 01:48 shadow
drwx------ 2 14 50 6 Nov 09 01:52 test
6)匿名用户删除
anon_other_write_enable=YES|NO
[root@localhost /]# vim /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES #需要自己添加
[root@localhost /]# systemctl restart vsftpd.service
[root@localhost Desktop]# lftp 172.25.254.170
lftp 172.25.254.170:~> cd pub/
lftp 172.25.254.170:/pub> ls
-rw------- 1 14 50 2323 Nov 09 01:37 passwd
-rw-r--r-- 1 14 50 1284 Nov 09 01:48 shadow