FTP服务
FTP服务
FTP是什么
FTP(File TransferProtocol,文件传输协议)是典型的C/S架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。FTP客户端和服务器之间的连接是可靠的,面向连接的,为数据的传输提供了可靠的保证。tcp协议:20,21端口。
重要端口:21端口(传输指令)、22端口(传输数据)
FTP模型
用户接口:提供一个用户接口并使用客户端协议解释器的服务
客户端协议解释器:向远程服务器发送命令 并建立客户数据传输过程
服务端协议解释器:响应客户协议机发出的命令并驱动服务端数据传输过程
客户端数据传输协议:负责完成和服务器数据传输过程及客户端本地文件系统的通信
服务端数据传输协议:负责完成和客户数据过程及服务器端文件系统的通信
两种模式
Standard模式(主动模式)
FTP客户端首先和FTP Server的TCP
21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式(被动模式)
在建立控制通道的时候和standard模式类似,当客户端通过这个通道发送PASV命令的时候,FTP
server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server将通过这个端口进行数据的传送,这个时候FTp server不再需要建立一个新的和客户端之间的连接
注:以上的说明主动和被动,是相对于的FTP server端而判断,如果server去连接client开放的端口,说明是主动的,相反,如果client去连接server开放的端口,则是被动。
- 主动模式:服务器主动发起数据连接
- 被动模式:服务器被动等待数据连接
VSFTPD服务介绍
- 服务包:vsftpd
- 服务类型:由Systemd启动的守护进程
- 配置单元:
/usr/lib/systemd/system/vsftpd.service
- 守护进程:
/usr/sbin/vsftpd
- 端口:
21(ftp)
,20(ftp‐data)
- 主配置文件:
/etc/vsftpd/vsftpd.conf
- 用户访问控制配置文件:
/etc/vsftpd/ftpusers /etc/vsftpd/user_list
- 日志文件:
/etc/logrotate.d/vsftpd
- 配置文件参数
参数 | 作用 |
---|---|
listen=NO | 是否以独立运行的方式监听服务 |
listen_address=ip地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=YES | 是否允许下载文件 |
userlist_enable=YES | 设置用户列表为"允许" |
userlist_deny=YES | 设置用户列表为"禁止" |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=YES | 是否允许匿名用户访问 |
anon_upload_enable=YES | 是否允许匿名用户上传文件 |
anon_umask | 匿名用户上传文件的umask |
anon_root=/var/ftp | 匿名用户的ftp根目录 |
anon_mkdir_write_enable=YES | 是否允许匿名用户创建目录 |
anon_other_write_enable=YES | 是否开放匿名用户的其他写入权限(重命名、删除等) |
anon_max_rate=0 | 匿名用户的最大传输速率,0为不限制 |
local_enable=yes | 是否允许本地用户登录 |
local_umask=022 | 本地用户上传文件的umask值 |
local_root=/vat/ftp | 本地用户的ftp根目录 |
chroot_local_user=YES | 是否将用户权限禁锢在ftp目录,以确保安全 |
local_max_rate=0 | 本地用户的最大传输速率,0为不限制 |
基础配置
安装vsftp
[root@localhost ~]#yum -y install vsftpd
准备分发的文件
[root@localhost ~]#touch /var/ftp/abc.txt
启动服务
[root@localhost ~]#systemctl start vsftpd
[root@localhost ~]#systemctl enable vsftpd
关闭防火墙
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
客户端工具
Linux
区别
ftp工具是一定要输入用户名称和密码
登录成功或者失败ftp会给出提示、lftp不会直接给出登录成功或者失败的结果
第一种(ftp)
[root@localhost ~]# yum install ftp -y
[root@localhost ~]# ftp <IP地址>
Name (192.168.28.33:root):anonymous
password:直接回车
第二种(lftp)
[root@localhost ~]# yum install lftp -y
[root@localhost ~]# lftp <IP地址>
注意
ftp默认禁止root等用户登录
vim /etc/vsftpd/user_list
//在该配置文件中可以看见所有被禁止登录的用户
Windows
第一种
- 可以在浏览器、运行窗口或者资源管理器中输入ftp://IP地址/,这样访问的是ftp的根位置,如果需要访问相关目录可以输入ftp://IP地址/目录/文件名
第二种
- 在cmd窗口中,输入命令
ftp <IP地址>
即可访问
需要注意的是直接访问ftp服务器的IP地址时访问的根位置目录是
/var/ftp
如下图,比如如果需要访问pub里的test可以访问ftp://192.168.28.33/pub/test
案例1 实现匿名用户访问
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_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
[root@localhost ~]# systemctl restart vsftpd
linux的目录权限会限制我们不允许往里面新建文件,但是如果直接添加目录的w权限又会导致触发他的安全判断问题,所以就把ftp目录里的pub目录的属主和属主改为ftp解决,并且添加写权限
chown ftp.ftp /var/ftp/pub
chmod 777 /var/ftp/pub
现在就可以往里面写文件了
案例2 实现本地用户访问
//使用本地用户登录成功时位置在家目录的位置
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
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
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
注意:出现在/etc/vsftpd/ftpusers /etc/vsftpd/user_list这两个文件
中的内容将会被定义为黑名单
案例3 虚拟用户访问
-
创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。
[root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# vi vuser.list eagle centos cisco centos huawei centos
-
使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件。
[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db [root@localhost vsftpd]# file vuser.db vuser.db: Berkeley DB (Hash, version 9, native byte-order) [root@localhost vsftpd]# vi vuser.db //查看user.db文件的详细信息 此时用户名与密码已被加密,用vi命令无法看出原始账号密码
-
降低数据库文件的权限(避免其他人看到数据库文件的内容)
[root@localhost vsftpd]# chmod 600 vuser.db
-
把原始的明文信息文件删除。
[root@localhost vsftpd]# rm -f vuser.list
-
创建一个本地用户,用来做虚拟用户在本地的代理,为了安全起见,禁止这个本地用户登录。
[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual //创建了一个ftproot用户,此后虚拟用户在访问内容存放在该用户目录下 [root@localhost vsftpd]# ls -ld /var/ftproot/ drwx------. 2 virtual virtual 59 8月 10 23:04 /var/ftproot/ [root@localhost vsftpd]# chmod -Rf 755 /var/ftproot/ //降权禁止登录
-
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,利用pam模块(linux内核的一个认证模块)做一个认证。
[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser //写入
-
修改配置文件
[root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf //修改以下配置 anonymous_enable=NO local_enable=YES guest_enable=YES guest_username=virtual allow_writeable_chroot=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.vu #记得修改这里为我们自己的认证文件 userlist_enable=YES tcp_wrappers=YES [root@localhost vsftpd]# systemctl restart vsftpd
用刚刚创建好的用户登录,但是只能登录,不能写文件,想要给权限,这个用户的权限是被匿名用户权限控制的
-
个性化定制权限
[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/ [root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/ [root@localhost vusers_dir]# touch huawei [root@localhost vusers_dir]# vi cisco anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES [root@localhost vusers_dir]# vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES guest_enable=YES guest_username=virtual allow_writeable_chroot=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.vu userlist_enable=YES tcp_wrappers=YES user_config_dir=/etc/vsftpd/vusers_dir #告诉主配置文件我们这里还有配置 [root@localhost vusers_dir]# systemctl restart vsftpd
只对cisco用户的配置文件进行修改,huawei用户无改动。所以仅cisco用户可以在ftp文件夹进行修改
-
功能检测
huawei用户不可修改
cisco用户可修改