Ftp:file transfer protocol 文件传输协议

应用层协议:tcp/21

ftp服务器默认使用tcp协议的20,21端口与客户端进行通讯,21端口用于建立控制连接,并传输ftp的控制指令;20端口用于建立数据连接,并传输文件数据。

 根据ftp服务器在建立数据库连接过程中的主 被动模式关系,ftp数据连接分为主动模式和被动模式,二者主要区别如下:

主动模式:这种模式下服务器主动发起数据连接,首先由客户端向服务端的21端口建立ftp的控制连接,当需要传输数据时,客户端以port命令告知服务器。 我打开了某个端口,你来连我。于是服务器从20端口向客户端的该端口发送请求并建立数据连接。

被动模式:这种模式下,服务器被动等待数据连接,如果客户端所在的网络的防火墙禁止主动模式连接,通常会使用被动模式,首先由客户端向服务端21端口建立ftp控制连接,当需要传输数据之后,服务器以PASV命令告知客户端,我打开某端口,你过来连我…于是客户端向服务器的某端口发送请求并建立数据连接。

实际上20端口是复制建立数据连接的端口,当多用户发起连接请求的时候,是由任意端口进行数据传输的。

命令连接:文件管理类命令,始终在线的连接。

数据连接:数据传输,按需创建及关闭的连接。

响应码:

1xx:信息

2xx:成功类信息

3xx:提示需进一步提供补充类信息

4xx:客户端错误

5xx:服务端错误

用户认证三种方式:

虚拟用户:

Nsswitch:名称解析框架

  配置文件:/etc/nsswitch..conf

  模块:/lib64/lib/libnss*,/usr/lib64/libnss*

Pam用户认证框:

模块:/lib64/security/

配置文件:/etc/pam.conf,/etc/pam.d/*

系统用户,匿名用户,都是映射到系统用户来登录的。

一, 安装vsftp
[[email protected] pam.d]# yum -y install vsftpd
配置文件:查看生成的配置文件
[[email protected] pam.d]# rpm -ql vsftpd
/etc/pam.d/vsftpd用户认证配置文件
/etc/rc.d/init.d/vsftpd 服务脚本
/etc/logrotate.d/vsftpd 日志滚动
/etc/vsftpd  配置文件目录
vsftpd.conf 主配置文件
/var/ftp/pub 匿名用户的共享资源位置 ,
2,启动服务:
[[email protected] pub]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
[[email protected] pub]# ss -ntl
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      32                        *:21                       *:*    ,
3, copy配置文件并进一步配置
[[email protected] vsftpd]# cp vsftpd.conf  vsftpd.conf.bak
[[email protected] vsftpd]# vi vsftpd.conf,
匿名用户配置:anonymous_enable=YES yes或者NO表示启用或者禁用。
系统用户配置:local_enable=YES 系统用户访问默认是自己的家目录。#注意仍可以访问其他目录。#
anon_upload_enable=YES  是否可以上传文件
anon_mkdir_write_enable=YES   是否可以创建文件
anon_other_write_enable=YES   是否可以删除文件

/var/ftp 目录属组属主不可修改,若修改将无法启动vsftp服务。只可以在/var/ftp/下创建其他目录
[[email protected] upload]# setfacl  -m u:ftp:rwx ../upload/
[[email protected] upload]# getfacl  ../upload/
# file: ../upload/
# owner: root
# group: root
user::rwx
user:ftp:rwx
group::r-x
mask::rwx
other::r-x
本地用户配置:
local_enable=YES 本地用户是否开启
write_enable=YES 本地用户是否可写
local_umask=022 本地用户上传之后的默认权限  反向掩码
chroot_local_user=YES 禁锢所有的ftp的本地用户在家目录中
chroot_list_enable=YES  是否开启指定home目录列表
chroot_list_file=/etc/vsftpd/chroot_list禁锢文件中制定ftp本地用户用于其家目录
新建用户:liangqi1并设置密码
去添加chroot_list 文件内容:
liangqi1
#!ser 重启之后输入账号密码登录测试
[[email protected] ~]# ftp 172.16.249.75
ftp> pwd
257 "/"

dirmessage_enable=YES  开启用户登录之后提示信息

[r[email protected] vsftpd]# cd /var/ftp/upload/

[[email protected] upload]# ls

system.ini

[[email protected] upload]# vim .message

编辑登录信息… 重启服务之后生效。

用户登录之后,进upload目录之后,可以看到刚才的登录提示消息。

xferlog_enable=YES  启用日志

xferlog_std_format=YES  启用标准和传输日志

xferlog_file=/var/log/xferlog 日志文件的路径

chown_uploads=YES 是否改变上传目录

chown_username=whoever  改变上传文件的属主,whoever为系统用户

idle_session_timeout=600 超时时长

data_connection_timeout=120 数据连接时长

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

pam_service_name=vsftpd  pam模块。指定的模块/etc/pam.d/vsftpd

userlist_enable=YES  ftp自带的控制登陆,

userlist_deny=YES|NO yes是黑名单,no是白名单

serlist_enable=YES

tcp_wrappers=YES

/etc/vsftpd/user_list  默认的配置文件

ftpusers文件,用户将无法登陆ftp. 黑名单文件. 这个是pam实现的。

优化其他参数:

max_clients 最大并发链接

max_pre_ip 每个ip可同时发起的并发请求数

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

local_max_rate 本地用户的传输速率,但是字节/秒

虚拟用户:

所有的系统用户会被统一影射为指定的系统账号,访问的共享位置即为此系统账号的家目录 ,各虚拟用户可被赋予不同的访问权限。通过匿名用户的权限控制参数进行指定:

虚拟用的账号存储方式:

  文件编辑:奇数行为用户名,偶数行为密码。

此文件需要被编码为hash格式。

用关系型数据库去存储,这用pam-mysql

一)安装所需程序

Pam-mysql在本地yum里面没有,需要第三方epel支持,在yum配置文件添加下面即可。

[epel]

name=san

baseurl=http://172.16.0.1/fedora-epel/6/x86_64/

enabled=1

gpgcheck=0

 [[email protected] yum.repos.d]# yum install  pam_mysql.x86_64 mysql-server mysql-devel -y

二)创建虚拟用户账号

准备数据库以及相关表:

首先确保mysql启动,然后建立存储虚拟用户的数据库,这里数据库叫vsftpd数据库

 

mysql> create database vsftpd;

Query OK, 1 row affected (0.16 sec)

mysql> grant select on vsftpd.* to [email protected] identified by 'passwd';

Query OK, 0 rows affected (0.33 sec)

mysql> grant select on vsftpd.* to [email protected] identified by 'passwd';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.07 sec)

mysql> use vsftpd;

mysql> create table users (id int unsigned not null auto_increment primary key,name varchar(50)binary not null,password char(48) binary not null);

Query OK, 0 rows affected (0.45 sec)

三)添加测试的虚拟用户test1和2,并设置加密密码为pass123

mysql> use vsftpd; 设置默认数据库

mysql> insert into users (name,password)  values ('test1',password('pass123')) , ('test2',password('pass123'));

Query OK, 1 row affected (0.07 sec)

查看添加的用户

mysql> select * from users;

+—-+——-+——————————————-+

| id | name  | password                                  |

+—-+——-+——————————————-+

|  1 | test1 | *FB6E1F205D675BC29B052DB14CCEFE7759C5FF7E |

|  2 | test2 | *FB6E1F205D675BC29B052DB14CCEFE7759C5FF7E |

+—-+——-+——————————————-+

2 rows in set (0.03 sec)

 

四)配置vsftpd

1,建立pam认证所需的文件添加两行:

[[email protected] yum.repos.d]# vi  /etc/pam.d/vsftpd.mysql

auth  required  pam_mysql.so user=vsftpd passwd=passwd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account   required  pam_mysql.so user=vsftpd passwd=passwd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

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

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

[[email protected] yum.repos.d]# useradd  -s /sbin/nologin  -d /var/ftppub vuser

[[email protected] yum.repos.d]# chmod  go+rw /var/ftppub/

确保/etc/vsftpd/vsftpd.conf配置文件中启用以下选项:

anonymous_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

五,启动vsftp服务

[[email protected] yum.repos.d]# service vsftpd restart

[[email protected] yum.repos.d]# tail /var/log/messages 查看日志文件有没有报错

[[email protected] yum.repos.d]# tail /var/log/secure 查看启动之后认证过程

[[email protected] yum.repos.d]# chkconfig   vsftpd on 添加到开机启动

添加好之后测试即可~

/usr/share/doc/pam_mysql-0.7/README 说明文档。

六,配置虚拟用户具有不同的访问权限

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

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

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

============== finger 命令扩展=====================

[[email protected] pub]# yum install finger

[[email protected] pub]# finger   mysql

Login: mysql                    Name:

Directory: /mydata/data                 Shell: /sbin/nologin

Never logged in.

No mail.

No Plan.

=============== axel 下载工具=支持续下载===========

安装包名称:

axel-2.4.tar.gz

下载地址:http://yunpan.cn/cjIydRLZcUxVX  访问密码 8ab7

编译安装

[[email protected] axel-2.4]# ./configure  –script=0

[[email protected] axel-2.4]#make

[[email protected] axel-2.4]# cp axel /bin/ 复制到bin

[[email protected]cal /]# axel -n 3 -o /root ftp://172.16.0.1/pub/ISOs/CentOS-5.11-i386-bin-DVD-1of2.iso 测试下载

[[email protected] /]# axel –help

Usage: axel [options] url1 [url2] [url…]

–max-speed=x       -s x    Specify maximum speed (bytes per second)

–num-connections=x -n x    Specify maximum number of connections

–output=f      -o f    Specify local output file

–search[=x]        -S [x]  Search for mirrors and download from x servers

–header=x      -H x    Add header string

–user-agent=x      -U x    Set user agent

–no-proxy      -N  Just don't use any proxy server

–quiet         -q  Leave stdout alone

–verbose       -v  More status information

–alternate     -a  Alternate progress indicator

–help          -h  This information

–version       -V  Version information

Visit http://axel.alioth.debian.org/ to report bugs

 

发表评论

后才能评论