FTP简介
- FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
FTP端口
- 默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
FTP数据连接模式
- ftp有2种数据连接模式:命令连接和数据连接
- 命名连接:是指文件管理类命令,始终在线的持久性连接,直到用户退出登录止
- 数据连接:是指数据传输,按需创建及关闭的连接
数据传输格式有以下两种:
文件传输
二进制传输
数据传输模式有两种:
主动模式:由服务器端创建数据连接
被动模式:有客户端创建数据连接
两种数据传输模式的建立过程:
主动模式:命令连接——客户端以一个随机端口(随机端口大于1023)来连服务器端的21号端口;数据连接——服务器端以自己的20号端口去连客户端创建命令连接时使用的随机端口+1的端口号进行连接
被动模式:命令连接——客户端以一个随机端口(随机端口大于1023)来连服务器端的21号端口,服务端并告知客服端一个随机端口;数据连接——客户端以创建命令连接的端口+1的端口号去连服务器端通过命令连接告知自己的一个随机端口号来创建数据连接
vsftpd常见的配置参数
参数 | 作用 |
---|---|
anonymous | 启用匿用户登录 |
anon_upload_enable=YES | 允许匿名用户上传 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录,但不能删除(与anon_other_write_enable连用) |
anon_orther_write_enable=YES | 允许匿名用户将有写操作,例如删除和重命名目录 |
l | ocal_enable=YES |
write_enable=YES | 允许本地用户有写权限 |
local_umask=022 | 通过ftp上传文件的默认遮罩码 |
chroot_local_user=YES | 禁锢所有的ftp本地用户于家目录 |
chroot_list_enable=YES | 开启禁锢文件列表,需要与chroot_list_file参数一起使用 |
chroot_list_file=/etc/vsftpd/chroot_list | 指定禁锢文件列表路径,在此文件里面的用户将被禁锢在其家目录中 |
allow_writeable_chroot=YES | 允许被禁锢的用户家目录有写权限 |
xferlog_enable=YES | 是否启用传输日志,记录ftp传输过程 |
xferlog_std_format=YES | 传输日志是否使用标准格式 |
xferlog_file=/var/log/xferlog | 指定传输日志存储位置 |
chown_uploads=YES | 是否启用改变上传文件属主的功能 |
chown_username=whoever | 指定要将上传的文件的属主改为那个用户,此用户必须在系统中存在 |
pam_service_name=vsftpd | 指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证 |
userlist_enable=YES | 是否启用控制用户登录的文件列表:默认为/etc/vsftpd/user_list文件 |
userlist_deny=YES | 是否拒绝userlist指定的文件列表中存在的用户登录FTP |
max_clients=# | 最大并发连接数 |
max_per_ip=# | 每个IP可同时发起的并发请求 |
anon_max_rate | 匿名用户的最大传输速率,单位“字节/秒” |
local_max_rate | 本地用户的最大传输速率,单位“字节/秒” |
dirmessage_enable=YES | 启用某目录下.message描述信息,假定有个目录为/upload,再其下创建一个文件名为.message,在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容 |
message_file | 设置访问一个目录是获得的目录信息文件的文件名,默认是.message |
idle_session_timeout=600 | 设置默认的都开不活跃session的时间 |
data_connection_timeout=120 | 设置数据传输超时时间 |
ftpd_banner=“INFO” | 制定欢迎信息,登录ftp时自动显示 |
搭建FTP服务
ftp
vsftpd配置
/etc/pam.d/vsftpd //vsftpd用户认证配置文件
[root@localhost ~]# vim vsftpd.conf //配置文件目录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf //主配置文件
//匿名用户(映射为ftp用户)的共享资源位置是/var/ftp
//系统用户通过ftp访问的资源位置为用户的家目录
//虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录
安装vsftpd
2.配置匿名用户ftp
3.配置虚拟用户ftp
4.配置系统用户ftp
ftp的使用场景以及如何安装与配置
要求:
1.安装并配置完成后要使用ftp客户端工具登录验证
匿名用户ftp
安装vsftpd
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl enable --now vsftpd
//启动
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
// 关闭防火墙
[root@localhost ~]# useradd toto
[root@localhost ~]# echo '123'|passwd --stdin toto
匿名 用户默认开启,若没有开启则将NO改为YES
anonymous_enable=YES //
[root@localhost ~]# systemctl restart vsftpd 重启服务
匿名用户上传功能打开取消注释
anon_upload_enable=YES
anon_mkdir_write_enable=YES//创建文件
anon_other_write_enable=YES
[root@localhost ~]# setfacl -m u:ftp:rwx /var/ftp/pub/
[root@localhost ~]# getfacl /var/ftp/pub/

关闭anon_mkdir_write_enable=YES 允许匿名用户创建目录,但是不能删除
anon_other_write_enable=YES 允许匿名用户创建和删除目录
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
不能删除只能上传文件
[root@localhost ~]# ll /var/ftp/pub/
total 4
-rw-------. 1 ftp ftp 1553 Oct 14 15:14 h.sh
在vim /etc/vsftpd/vsftpd.conf
local_umask=022
anon_umask=022
[root@localhost ~]# ll /var/ftp/pub/
total 4
-rw-r--r--. 1 ftp ftp 1553 Oct 14 15:30 h.sh
[root@localhost ~]#
vsftpd虚拟用户配置
安装vsftpd
[root@localhost ~]# yum -y install vsftpd
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@localhost vsftpd]# vim vu.list
[root@localhost vsftpd]# ls
ftpusers vsftpd.conf vu.list
user_list vsftpd_conf_migrate.sh
//将刚创建的文本格式用户名、密码文件使用db4工具转换成数据库文件
[root@localhost vsftpd]# db_load -T -t hash -f vu.list vh.db
//上面的-T表示转换,-t表示加密方式使用hash算法加密
//为提高虚拟用户帐号文件的安全性,应将文件权限设置为600,以避免数据外泄
[root@localhost vsftpd]# chmod 600 vu.*
[root@localhost vsftpd]# ll
total 36
-rw-------. 1 root root 125 Apr 24 11:01 ftpusers
-rw-------. 1 root root 361 Apr 24 11:01 user_list
-rw-r--r--. 1 root root 12288 Oct 14 16:02 vh.db
-rw-------. 1 root root 5128 Oct 14 15:50 vsftpd.conf
-rwxr--r--. 1 root root 348 Apr 24 11:01 vsftpd_conf_migrate.sh
-rw-------. 1 root root 18 Oct 14 15:58 vu.list
//添加虚拟用户的映射帐号、创建ftp根目录。例如要将使用的ftp根目录设置为/var/ftproot,
//映射帐号的名称为vftp,可以执行以下操作
[root@localhost vsftpd]# useradd -d /opt/ftp -s /sbin/nologin vftp
[root@localhost ~]# ll /opt/
total 0
drwx------. 2 vftp vftp 62 Oct 14 16:10 ftp
//为虚拟用户建立PAM认证
[root@localhost ~]# cd /etc/pam.d/
[root@localhost pam.d]# vim vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vh
account required pam_userdb.so db=/etc/vsftpd/vh
~
~
//修改vsftpd配置文件,添加虚拟用户支持
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_user_username=vftp
//为不同的虚拟用户建立独立的配置文件
新建hehe目录
[root@localhost vsftpd]# mkdir hehe
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
userlist_enable=YES
guest_enable=YES
guest_username=vftp
user_config_dir=/etc/vsftpd/hehe
allow_writeable_chroot=YES
//有了上述配置后,就可以在/etc/vsftpd/vusers_dir目录中为每个虚拟用户分别建立配置文件了。
//例如,若要使用虚拟用户tom能够上传文件、创建目录,而jerry只有默认的下载权限,
//可以执行以下操作**
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
userlist_enable=YES
guest_enable=YES
guest_username=vftp
user_config_dir=/etc/vsftpd/hehe
allow_writeable_chroot=YES
[root@localhost hehe]# touch tom
[root@localhost hehe]# vim jerry
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost hehe]# systemctl restart vsftpd //重启服务
在windows上查看
ftp使用方法
ftp [-vdng] [用户名:密码@<FQDN>]|<IP地址>|
< 主机名> <IP地址>:需要连接的FTP服务器的IP地址FQDN
-v :显示远程服务器的所有响应信息
-d :使用调试方式访问FTP服务器
-n :限制ftp的自动登录,即当登录到FTP服务器时,不自动执行 .netrc文件
进入FTP中可以可以使用的命令详解
```
![命令[参数]] :在FTP客户端中执行命令
open <FQDN>|<IP地址>:打开指定的FTP服务器
bye :退出FTP会话过程
cd 目录:切换FTP服务器的当前目录。
dir [目录][本地文件]:显示FTP服务器目录,并将结果存入本地文件
put 文件:将单个文件上传到FPT服务器
mput: 将多个文件上传到FTP服务器
get 文件:从FTP服务器下载单个文件到本地当前目录
mget 文件:从FTP服务器下载多个文件到本地当前目录
delete 文件名:FTP服务器上的文件
case :在使用mget时,将远程主机文件名中的大写转为小写字母
pwd :显示 远程主机的当前工作目录。
rmdir 目录名:删除FTP服务器上的目录
mkdir 只能创建创建目录不能创建文件
lftp命令使用
lftp ftp://[用户名:密码@]<FQDN>|<IP地址> [:端口]
lftp ftp://<FQDN>|<IP 地址> -p port -u 用户名,密码
help:查看全部可操作的命令
ls : 显示FTP服务器文件列表
!ls: 显示本地文件列表
cd: 切换远端目录
!cd: 切换本地目录
get: 从FTP服务器下载单个文件到本地当前目录
mget: 从FTP服务器下载多个文件到本地当前目录
pget :使用多个线程来下载远端文件
put : 将单个文件上传到FTP服务器
mput :将多个文件上传到FTP服务器
mv :移动FTP服务器上的文件
rm: 删除FTP服务器上的文件 (使用参数 -r 递归删除)
mrm: 删除FTP服务器上的多个目录
mkdir :在FTP服务器上建立目录
pwd : 显示日前FTP服务器所有目录
lpwd: 显示本地目录
exit :退出ftp会话过程
[root@localhost ~]# yum -y install lftp ftp
[root@localhost ~]# ftp 192.168.11.131
Connected to 192.168.11.131 (192.168.11.131).
220 (vsFTPd 3.0.3)
Name (192.168.11.131:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> get h.sh
local: h.sh remote: h.sh
227 Entering Passive Mode (192,168,11,131,183,166).
150 Opening BINARY mode data connection for h.sh (1553 bytes).
226 Transfer complete.
1553 bytes received in 0.000108 secs (14379.63 Kbytes/sec)
ftp>
[root@localhost ~]# ls
anaconda-ks.cfg h.sh vsftpd.conf
[root@localhost ~]#
lftp
[root@localhost ~]# lftp -u tom,123 192.168.11.131
[root@localhost ~]# lftp -u tom,123 -e "get h.sh;exit" 192.168.11.131
lftp tom@192.168.11.131:~> mirror hehe 不加-R表示下载
[root@localhost ~]# ls
anaconda-ks.cfg vsftpd.conf
[root@localhost ~]# ls
anaconda-ks.cfg hehe vsftpd.conf
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# cat user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@localhost vsftpd]#