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