vsftpd程序实现ftp

一、ftp工作原理简介

ftp是工作于应用层的协议,21/tcp端口,ftp是C/S的模型,数据分为两种连接,分别是命令连接数据连接,命令连接是文件管理类命令,始终在线的连接;数据连接是数据传输,是按需创建及关闭的连接。数据在传输格式根据文件类型进行选择传输格式,有文件传输、二进制传输。

ftp有两连接模式主动和被动模式,在主动模式中由服务器创建连接,客户端响应连接的方式,服务器选择21/tcp端口,客户端在响应连接选择一个随机端口的与服务器进行通信,在传输文件时服务器将使用20/tcp端口与客户端的随机端口加1进行数据传输;在被动模式中客户端选择一个随机端口请求服务器的21/tcp端口,服务器用21号端口响应客户端的请求,当文件传输时客户端使用在随机端口上加1的端口请求服务器的文件数据,服务器选择一个随机端口响应客户端的文件传输请求。

二、ftp软件种类

ftp的服务器和客户端的软件种类有很多软件可以实现的

服务器端软件:wu-ftpd、proftpd、pureftp、vsftpd、ServU

客户端软件:ftp、lftp、lftpget、wget、curl、filezilla、gftp

三、ftp响应码

ftp和Web服务软件一样有请求响应码,可以根据响应码来确认故障;

1xx:信息

2xx:成功类的状态码

3xx:提示需进一步提供补充信息的状态码

4xx:客户端错误

5xx:服务端错误

[[email protected] ~]# ftp172.16.9.28
Connected to172.16.9.28 (172.16.9.28).
220 (vsFTPd 2.2.2)                 #:状态码
Name (172.16.9.28:root): ftp        #匿名用户被映射成为ftp
331 Please specifythe password.
Password:
230 Loginsuccessful.
Remote system typeis UNIX.
Using binary mode totransfer files.
ftp> ls
227 Entering Passive Mode (172,16,9,28,254,240).     #被动模式,172.16.9.28:(254+150+1)*240)   IP:端口
150 Here comes thedirectory listing.
drwxr-xr-x    2 0       0            4096 Aug 04  2014 pub
226 Directory sendOK.

四、ftp实现软件vsftpd

ftp可以使用登录的用户认证类型有虚拟用户、系统用户、匿名用户。

在CentOS 6.6中安装vsftpd还是很方便的,直接yum install vsftpd就可以了。安装完后生成的文件如下:

用户认证配置文件:/etc/pam.d/vsftpd

服务脚本:/etc/rc.d/init.d/vsftpd

日志滚动程序:/etc/logrotate.d/vsftpd

配置文件:/etc/vsftpd

主配置文件:/etc/vsftpd/vsftpd.conf

匿名用户(映射为ftp用户)共享资源位置:/var/ftp

系统用户通过ftp访问的资源的位置:用户自己的家目录

虚拟用户通过ftp访问产资源的位置:给虚拟用户指定的映射在为成系统用户的家目录

五、vsftpd的配置说明

(1)匿名用户的配置

anonymous_enable=YES     #启用匿名用户

anon_upload_enable=YES       #启用匿名用户上传功能

anon_mkdir_write_enable=YES    #启用匿名用户创建目录功能

anon_other_write_enable=YES      #启用匿名用户删除文件功能

注意:上传的功能取决于系统的权限和是否有上传的权限

(2)系统用户的配置

local_enable=YES     #开启系统用户

write_enable=YES             #开启写的权限

local_umask=022     #系统用户上传文件完文件的权限

禁锢所有的ftp本地用户其家目录中

chroot_local_user=YES

禁锢指定的ftp本地用户其家目录中

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

(3)虚拟用户

所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为系统账号的家目录;各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定;虚拟用户账号可存储在文件和关系型数据库表中。

(4)其它配置信息说明

开启目录消息,就是切换此目录时,会显示此目录中以.message文件的内容,此.messages是隐藏文件

dirmessage_enable=YES

日志

xferlog_enable=YES       #开启上传,下载日志

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

改变上传文件的属主

chown_uploads=YES

chown_username=whoever

会话:

idle_session_timeout=600    #空闲会话超时时长

data_connection_timeout=120   #数据连接超时时长

vsftp使用pma完成使用认证,其用到的pam配置文件

pam_service_name=vsftpd

是否启用控制用户登录的列表文件

userlist_enable=YES

userlist_deny=YES|NO

默认的文件为/etc/vsftpd/user_list

连接限制:

max_clients:最大并发连接数;

max_per_ip:每个IP可同时发起的并发请求数;

传输速率:

anon_max_rate:匿名用户的最大传输速率,单位是“字节/秒”

local_max_rate:本地用户的最大传输速率,单位是“字节/秒”

六、实现vsftp+pam+mysql

通过pam_mysql模块实现把用户名和密码存储在MySQL数据库,当客户端登录进行认证时就在MySQL数据库进行查找,以实现用户的管理。

1、安装所需要程序

1)安装mysql和pam_mysql

# yum -y install vsftpd mysql-servermysql-devel pam_mysql

注意:pam_mysql由epel源提供。

2、准备数据库及相关表

1)准备数据库和表

首先请确保mysql服务已经正常启动,而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftp数据库

MariaDB [(none)]> CREATE DATABASE vsftp
 
MariaDB [vsftp]> grant select on vsftp.*to [email protected]‘172.16.%.%‘ identified by ‘vsftpd‘;
Query OK, 0 rows affected (0.04 sec)
 
MariaDB [vsftp]> flush privileges;
Query OK, 0 rows affected (0.00 sec) 
 
MariaDB [vsftp]> CREATE TABLE users (id  INT UNSIGNED NOT NULL AUTO_INCREMENTPRIMARY KEY, name VARCHAR(50) BINARY NOT NULL, password CHAR(48)BINARY NOTNULL);

2)添加测试的虚拟账号

根据需要添加所所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储;

MariaDB [vsftp]> INSERT INTO users(name,password) VALUES (‘tom‘,password(‘ftp‘)),(‘jerry‘,password(‘vsftp‘));
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0  Warnings: 0
 
MariaDB [vsftp]> select * from users;
+----+-------+-------------------------------------------+
| id | name | password                                  |
+----+-------+-------------------------------------------+
|  1| tom   |*89DED2CC215FEBF4D5077792E8CBF7B3A3CE6A53 |
|  2| jerry | *EDE7E32F5C826747A362F47049DF433214ADBFE6 |
+----+-------+-------------------------------------------+

3、配置vsftpd

1)建立pam认证所需文件

#vi /etc/pam.d/vsftpd.mysql

添加如下两行

auth required pam_mysql.so user=vsftppasswd=vsftpd host=172.16.9.20 db=vsftp table=users usercolumn=namepasswdcolumn=password crypt=2
 
account required pam_mysql.so user=vsftppasswd=vsftpd host=172.16.9.20 db=vsftp table=users usercolumn=namepasswdcolumn=password crypt=2

注意:由于mysql的安装方式不同,pam_mysql.so基本unix sock连接mysql服务器时可能会出问题,此时建议授权一个远程连接的mysql并访问vsftpd数据库的用户;

2)修改vsftpd的配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录

[[email protected] ~]# mkdir /ftpserver
[[email protected] ~]# useradd -s /sbin/nologin  -d /ftpserver/pub  vuser

请确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

而后添加以下选项

guest_enable=YES
guest_username=vuser

并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql

3)重启vsftpd服务

4、配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

1)配置vsftpd为虚拟用户使用配置文件目录

#vim vsftpd.conf

添加如下选项

user_config_dir=/etc/vsftpd/vuser_config

2)创建所需要目录,并为虚拟用户提供配置文件

mkdir /etc/vsftpd/vuser_config/
cd /etc/vsftpd/vuser_config/
touch tom jerry

3)配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的的相关指令进行的,比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vuser_config/tom文件,在里面添加如下选项即可。

anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable=(YES|NO}
时间: 2024-10-13 16:29:18

vsftpd程序实现ftp的相关文章

CentOS 安装vsftpd并建立ftp服务

一.安装vdftpd yum install vsftpd 二.配置vsftpd 1.修改/etc/vsftpd/vsftpd.conf #[a]开启匿名登录 # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES #[b]允许修改root目录 # You may specify an explicit list of local users to chr

Ubuntu下VSFTPD(六)(常见FTP命令及其功能) (

常见FTP命令及其功能  FTP 命令 功能  FTP 命令 功能  ls 显示服务器上的目录 ls [remote-dir][local-file] 显示远程目录remote-dir,并存入本地文件local-file get remote-file [local-file] 从服务器下载指定文件到客户端 mget remote-files 下载多个远程文件(mget命令允许用通配符下载多个文件) put local-file [remote-file] 从客户端上传指定文件到服务器 mput

Ubuntu下VSFTPD(五)(匿名FTP设置方法)

匿名FTP设置方法: 通常在登录FTP服务器的用户不确定的情况下,应将FTP服务器设置为允许匿名账号登录的FTP服务器 1.启用匿名帐号   anonymous_enable=YES   local_enable=YES   write_enable=YES   listen=YES 设置完成后,重启vsftd.将允许匿名账号和本地账号登录FTP服务器,同时允许匿名用户具有对FTP服务器文件的写权限,并且只能下载文件而不能上传,不允许匿名账号创建文件夹,匿名用户的口令为一个E-mail地址. 2

Python 程序:ftp

Python 程序:ftp 1.ftp实现功能 2.目录结构 3.代码 4.效果展示 一.ftp实现功能 1.用户登陆认证 2.多用户同时登陆 3.不同用户家目录不同 4.查看目录下文件 5.用户可以在家目录下切换目录 6.用户可以在家目录下创建目录 7.用户可以在家目录下删除文件或目录 8.用户磁盘配额(不同用户配额可不同,当文件大小超出服务器分配空间大小拒绝上传) 9.上传:支持断点续传 10.下载:支持断点续传和进度条显示 二.目录结构 三.代码 1 import socket,os,js

无需安装 vsftpd , 直接使用 FTP 来管理 docker 容器中的文件

无图无真相,先放个效果图: 背景 使用 docker 来跑一些服务很方便,但是有的时候想管理容器里面的文件却很麻烦 -- 一般常规做法有3种: 通过数据卷或数据卷容器的方式 启动容器的时候时候启动 vsftpd 或者 sshd 等服务,并开启端口映射,然后通过 ftp/sftp 连上去管理 进入容器的终端,通过命令行管理 但是这些做法都有一定的缺陷和不便: 1和2都是需要在启动容器的时候做一些配置,如果容器已经启动了就歇菜了.而且2需要额外的端口映射,占用主机的端口.3的做法比较 geek ,而

Ubuntu 16.04安装vsftpd 并开启ftp服务

sudo apt-get install vsftpd ftp的配置文件在 /etc/vsftpd.conf 可以使用下列命令来打开,关闭,重启ftp服务 sudo /etc/init.d/vsftpd start sudo /etc/init.d/vsftpd stop sudo /etc/init.d/vsftpd restart 使用下列命令,可以看到系统中多了ftp用户组和ftp用户 cat /etc/group cat /etc/passwd ftp服务器的目录位置在 /srv/ftp

Linux下使用docker 拉取 vsftpd 镜像搭建 Ftp 服务器,连接 Ftp 时遇到的错误(425 Failed to establish connection)

Ftp踩坑系列: Linux上的ftp服务器 vsftpd 之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传 ftp服务器Serv-U 设置允许自动创建不存在的目录 FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接 一.前言 出现这个问题,在docker这类容器出现之前,原因可能是防火墙的问题: FTP服务器一般默认使用被动模式,即,客户端一般会和服务端的21端口建立连接,该连接用来传输命令.真正传输数据时,服务端会返回一个随机端口,告诉客户端新建

ubuntu16.04.01解决安装vsftpd服务,ftp连接后无法展示目录,连接失败的问题

ubuntu版本:[email protected]:/home/itgo# uname -aLinux ubuntunanjing 4.15.0-58-generic #64~16.04.1-Ubuntu SMP Wed Aug 7 14:10:35 UTC 2019 x86_64 x86_64 x86_64 GNU/Linuxvsftpd版本:Version: 3.0.3-3ubuntu2现象:1 使用ftp图形客户端界面,可以连接到服务器,但是总是报目录浏览失败,导致无法连接2 在linu

Linux下 vsftpd安装配置 ftp服务器

1.安装vsftpd #  yum install vsftpd 2.启动vsftpd #  service vsftpd start 3.关闭防火墙 #  service iptables stop 这个时候就可以匿名登录了 4.关闭selinux #  vi /etc/selinux/config SELINUX=disabled #  setenforce 0 5.创建用户 因为vsftpd默认是不允许使用root用户登录的,所以得新建用户 #  useradd doiido #  pas