设为首页 收藏本站
查看: 1266|回复: 0

[经验分享] vsftpd程序实现ftp

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-14 08:21:28 | 显示全部楼层 |阅读模式
一、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:服务端错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@stu09 ~]# 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
wKioL1VTXYKRyf_LAAVl4L7hqOU793.jpg
  通过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数据库
1
2
3
4
5
6
7
8
9
MariaDB [(none)]> CREATE DATABASE vsftp
  
MariaDB [vsftp]> grant select on vsftp.*to vsftp@'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函数加密后存储;
1
2
3
4
5
6
7
8
9
10
11
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
添加如下两行
1
2
3
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认证
建立虚拟用户映射的系统用户及对应的目录
1
2
[iyunv@stu09 ~]# mkdir /ftpserver
[iyunv@stu09 ~]# useradd -s /sbin/nologin  -d /ftpserver/pub  vuser




请确保/etc/vsftpd.conf中已经启用了以下选项
1
2
3
4
5
6
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES




而后添加以下选项
1
2
guest_enable=YES
guest_username=vuser




并确保pam_service_name选项的值如下所示
1
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)创建所需要目录,并为虚拟用户提供配置文件
1
2
3
mkdir /etc/vsftpd/vuser_config/
cd /etc/vsftpd/vuser_config/
touch tom jerry



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

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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-66721-1-1.html 上篇帖子: windows 2012 r2 ftp用户隔离目录站点 下篇帖子: 创建vsftpd服务器基于mysql的虚拟用户认证 程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表