Linux 服务——FTP
FTP
服务
- FTP (File Transfer Protocol) 是一种标准网络协议,用于在计算机之间 传输文件。它基于客户端-服务器架构,允许客户端通过网络连接到服务器,并上传、下载或管理服务器上的文件。
[!CAUTION]
FTP 服务的安全隐患:
- 明文传输
- 支持匿名登录
文件传输的方法
sftp
:端口22
,是 windterm 等第三方连接工具默认自带的文件传输功能。http
:端口80
。python -m http.server
vmtools
:VM 虚拟机自带的复制粘贴。FTP
服务:端口21、20
,文件传输协议。SMB
服务:端口445、139
,文件共享服务。
安装 FTP
法一:使用 yum 进行安装。
yum install vsftpd apt install vsftpd
法二:下载安装包安装。
下载 rpm 安装包。
wget ftp://ftp.icm.edu.pl/vol/rzm7/linux-centos-vault/7.7.1908/cr/x86_64/Packages/vsftpd-3.0.2-27.el7.x86_64.rpm
安装
rpm -ivh vsftpd-3.0.2-27.el7.x86_64.rpm
使用 FTP
启动
vsftpd
systemctl start vsftpd
确认是否启动成功(查看
21
端口是否开启)netstat -anltup | grep 21
配置文件——(匿名登录)
编辑配置文件
vim /etc/vsftpd/vsftpd.conf #CentOS 路径 vim /etc/vsftpd.conf #kali 路径 anonymous_enable=YES #是否运行匿名登录? #在 CentOS 中默认开启匿名,在 kali 中默认关闭匿名 anon_root=/var #设置使ftp只能传输 /var 里面的文件或文件夹
登陆 FTP
ftp #Windows CMD 登录 ftp> open 192.168.85.128 anonymous 任意密码 quit #退出
在 CentOS 系统中,可能会出现登录不上去的命令,因为 Centos 系统默认防火墙是开启的。
systemctl stop firewalld #关闭防火墙
若
ls
出现 425 报错,就是 CentOS 系统防御机制selinux
拦截了流量。setenforce 0 #关闭 selinux
配置文件——(安全登录)
取消匿名登录
vim /etc/vsftpd/vsftpd.conf #CentOS 路径 vim /etc/vsftpd.conf #kali 路径 anonymous_enable=NO #取消匿名登录
创建一个低权限的用户专门用于文件传输
useradd ftp_test -d /opt/tools passwd ftp_test
确认创建的家目录的属主
编辑配置
user_list
/etc/vsftpd/user_list #CentOS 路径 /etc/vsftpd.user_list #kali 路径,该文件默认不会自动创建,可手动创建 ftp_test #在文件中添加用户
编辑配置文件
#添加如下配置 local_enable=YES #允许本地用户登录 userlist_deny=NO #user_list文件中写的用户原本为禁止登录,设为 NO 后其中的用户即可登录
重启服务并登录
systemctl restart vsftpd ftp #Windows CMD 登录 ftp> open 192.168.85.128 ftp_test 密码
配置文件——(限制目录)
以上配置只是限制了只有用户
ftp_test
可以登录,但是没有限制文件的传输路径,即仍可以直接看到如根目录这样的其他文件。修改配置文件
chroot_local_user=Yes #把 ftp_test 用户的家目录当作是 / 目录使用 allow_writeable_chroot=YES #允许 ftp_test 用户的家目录具有可写权限
ftp
服务器默认要求:/opt/tools
不能具有写权限,只有/opt/tools
的子文件夹才能具有写权限。如果不满足,则会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决方法:
法一:去除写权限。
chmod u-w /opt/tools
法二:在配置文件中加上配置
allow_writeable_chroot=YES
快速打开 FTP 服务
在当前目录打开端口 21 的 ftp 服务(匿名)。
python -m pyftpdlib -p 21
在当前目录打开端口 21 的 ftp 服务(指定用户名、密码)。
python -m pyftpdlib -p 21 -u zhangsan -P 123 #-u 指定用户名 #-P 指定密码
遇到 python 没有相关模块的报错。
python -m pip install pyftpdlib --break-system-packages -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple