FTP服务器
Posted 哭泣的馒头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP服务器相关的知识,希望对你有一定的参考价值。
一、简介
1、概述
FTP是File Transfer Protocol(文件传输协议)的英文简称,用于Internet上的文件的双向传输
使用FTP来传输时,具有一定程度的危险性,因为数据在因特网上面试完全没有受到保护的明文传输方式
2、工作流程
FTP会话包含两个通道,控制通道和数据通道,FTP的工作有两种方式,主动模式和被动模式
以FTP服务器为参照物,
主动模式,客户端提供数据端口,服务器主动连接客户端数据端口,
被动模式,客户端发送PASV命令,服务器提供数据端口,客户端连接服务器数据端口
a、主动模式
b、被动模式
3、vsftp传输模式
Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等
ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符
linux的红帽发行版中VSFTP默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用
二、试验
1、环境介绍
基础环境:
192.168.10.132 ftp服务器
yum install -y vsftpd
192.168.10.131 ftp客户端
yum install -y ftp
环境要求
关闭防火墙:
systemctl stop firewalld ; systemctl disable firewalld
关闭selinux
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
配置文件介绍
/etc/vsftpd/vsftpd.conf:vsftpd 的核心配置文件
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP 服务器。 黑名单
/etc/vsftpd/user_list:指定允许使用vsftpd 的用户列表文件。 白名单
[root@k8s02 ~]# cat /etc/vsftpd/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.
# 如果userlist_deny= YES(默认),绝不允许在这个文件中的用户登录ftp,甚至不提示输入密码
#prompt 提示
/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd 操作的一些变量和设置脚本
/var/ftp/:默认情况下匿名用户的根目录
启动服务
systemctl start vsftpd
systemctl enable vsftpd
默认使用21端口
[root@k8s02 ~]# netstat -antup | grep ftp
tcp6 0 0 :::21 :::* LISTEN 8292/vsftpd
2、匿名用户
anonymous_enable=YES 是否允许匿名用户登录
write_enable=YES 是否允许登录用户有写权限
anon_root=/var/ftp 匿名用户登录后的目录,ftp目录不能是777权限属性,即匿名用户的家目录不能为777,(这个目录就是ftp用户的家目录)
[root@k8s02 ~]# cat /etc/passwd |grep ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
anon_mkdir_write_enable=YES 是否允许匿名用户创建目录
anon_upload_enable=YES 是否允许匿名用户有上传文件权限
anon_world_readable_only=YES 允许匿名用户下载可阅读的文档
anon_other_write_enable=YES 允许匿名用户删除,重命名,覆盖
no_anon_password=YES 匿名用户登录时,不会询问密码
chown_uploads=YES 是否修改匿名用户上传文件的属主
chown_username=tom 设置匿名用户上传文件的属主名为tom
anon_umask=077 匿名用户上传文件的权限为700
anon_max_rate=0 限制最大传输速率(0为不限制)
FTP的匿名登录一般有三种:
1、 用户名:anonymous 密码:Email或者为空
2、 用户名:FTP 密码:FTP或者为空
3、 用户名:USER 密码:pass
案例一、匿名上传下载
服务器:
允许所有员工上传和下载文件,并允许创建用户自己的目录
anonymous_enable=YES #允许匿名
anon_upload_enable=YES #允许上传
anon_mkdir_write_enable=YES #允许匿名创建目录
anon_other_write_enable=YES #允许匿名删除文件,覆盖文件 权限有点大
systemctl restart vsftpd
mkdir /var/ftp/xiangmu
chown ftp.ftp /var/ftp/xiangmu
客户端:
touch test1..10
[root@k8s01 ~]# ftp 192.168.10.132
Connected to 192.168.10.132 (192.168.10.132).
220 (vsFTPd 3.0.2)
Name (192.168.10.132:root): ftp
331 Please specify the password.
Password: ###密码处直接回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
服务器:
ftp> cd /var/ftp/xiangmu ##切换目录
ftp> put test1 ###上传文件
ftp> mkdir dir_a ##创建目录
ftp> rename test1 test2 ##更改名字
ftp> rm dir_a ##删除目录
ftp> delete test1 ##删除文件,用rm没法删除文件
计算ftp服务器数据端口
ftp> mput test*
mput test1? y
227 Entering Passive Mode (192,168,10,132,23,151).
227 Entering Passive Mode (192,168,10,132,60,189).
ftp服务器数据端口:60*253+189=15369
坑一,重新登录匿名用户无法登陆
[root@k8s01 ~]# ftp 192.168.10.132
Connected to 192.168.10.132 (192.168.10.132).
220 (vsFTPd 3.0.2)
Name (192.168.10.132:root): ftp
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
再次登录会显示匿名用户无法登录
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,可以用命令chmod a-w /var/ftp/去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加:
allow_writeable_chroot=YES
3、本地用户
connect_from_port_20=YES #使用20作为数据端口
listen_port=9999 ##连接端口
pasv_enable=YES #开启被动模式
pasv_min_port=35000 ##数据端口最小
pasv_max_port=36000 ##数据端口最大
file_open_mode=0755 ##本地用户上传文件后的文件权限
ftpd_banner=Welcome #用户登录时显示的欢迎信息
userlist_enable=YES & userlist_deny=YES #禁止/etc/vsftpd/user_list文件中出现的用户名登录FTP
userlist_enable=YES & userlist_deny=NO #只允许/etc/vsftpd/user_list文件中出现的用户名登录FTP
ftpusers #禁止/etc/vsftpd/ftpusers文件中出现的用户登录FTP,权限比user_list更高,即时生效
local_enable=YES:允许本地用户登录
local_root=/var/www/html:设置所有本地用户的根目录
chroot_list_enable=YES:激chroot 功能
chroot_list_file=/etc/vsftpd/chroot_list:设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名
allow_writeable_chroot=YES :允许锁定的用户有写的权限
chroot_local_user=YES 将用户锁定在自己的家目录
1、当chroot_list_enable=YES,chroot_local_user=YES时,chroot_list_file中的用户可以切换到其他目录,不在列表中的无法切换
2、当chroot_list_enable=YES,chroot_local_user=NO时,chroot_list_file中的用户不可以切换到其他目录,不在列表中的可以切换
3、当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不可以切换到其他目录
4、当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可以切换到其他目录
useradd -s /sbin/nologin team1
useradd -s /sbin/nologin team2
echo "123456" | passwd --stdin team1
echo "123456" | passwd --stdin team2
用户是/sbin/nologin,需要在vi /etc/shells下面添加一行/sbin/nologin,否则这个类型的无法登录
[root@k8s01 ~]# ftp 192.168.10.132
Connected to 192.168.10.132 (192.168.10.132).
220 (vsFTPd 3.0.2)
Name (192.168.10.132:root): team1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
案例一、本地用户锁家目录
服务器:
anonymous_enable=NO 关闭匿名用户
allow_writeable_chroot=YES :允许锁定的用户有写的权限
chroot_local_user=YES 将用户锁定在自己的家目录
systemctl restart vsftpd
touch /home/team1/b
客户端:
[root@k8s01 ~]# ftp 192.168.10.132
Connected to 192.168.10.132 (192.168.10.132).
220 (vsFTPd 3.0.2)
Name (192.168.10.132:root): team1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd ###还是会显示根目录
257 "/"
ftp> ls
227 Entering Passive Mode (192,168,10,132,143,6).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Jan 04 11:15 b
226 Directory send OK.
案例二、根目录限制
team1不做修改,team2工作目录限制为/var/www/html
服务器:
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_root=/var/www/html
mkdir /var/www/html -p
chmod a+w /var/www/html/ ##如果不加写入权限,会无法上传文件
touch /var/www/html/c ##方便查看当前目录下的文件
cat >/etc/vsftpd/chroot_list <<EOF
team2
EOF
systemctl restart vsftpd
客户端:
[root@k8s01 ~]# ftp 192.168.10.132
Connected to 192.168.10.132 (192.168.10.132).
220 (vsFTPd 3.0.2)
Name (192.168.10.132:root): team1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /home/team1 ###############会发现登陆以后也在新目录下面,只是没法切换目录
550 Failed to change directory.
[root@k8s01 ~]# ftp 192.168.10.132
Connected to 192.168.10.132 (192.168.10.132).
220 (vsFTPd 3.0.2)
Name (192.168.10.132:root): team2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /home/team2
ftp> cd /var/www/html/
ftp> put test1
ftp> delete test1
ftp> mkdir dir_a
ftp> rename dir_a dir_b
ftp> rm dir_b
案例三、开启被动模式,限制连接端口,数据端口
将原来的配置文件备份
cp vsftpd.conf vsftpd.conf.bk
配置连接端口为32000,数据端口限制到35000-36000
connect_from_port_20=NO
listen_port=32000
pasv_enable=YES
pasv_min_port=35000
pasv_max_port=36000
###如果最大端口和最小端口一致,那就数据端口限制死了只能通过指定端口
systemctl restart vsftpd
客户端:
[root@k8s01 ~]# ftp 192.168.10.132 32000
Connected to 192.168.10.132 (192.168.10.132).
220 (vsFTPd 3.0.2)
Name (192.168.10.132:root): team1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,10,132,139,126). ##自动就是被动模式,数据端口139*256+126=35710
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Jan 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.(代码片段