码迷,mamicode.com
首页 > 其他好文 > 详细

vsftpd

时间:2015-05-17 23:44:44      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:vsftpd   ftp   

ftp简介

FTP是一个C/S架构的服务。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的 机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。

 

常见的ftp工具:

Server程序:

   Linux:wu-ftpd,proftpd,pureftp,vsftpd

   Windows:Serv-U,IIS

Client程序:

   Linux:ftp,lftp,wget,curl

   Windows:filezilla,cuteftp

 

数据连接&命令连接:

tcp/21:命令连接,文本管理类命令,服务器端监听,始终在线的连接

tcp/20:数据传输,传输数据时启用,数据传输完成拆除连接

 

数据传格式(自动协商):

       二进制(ASCII):一般用只用于纯文本文件的传输

       文本(Binary):这种模式更适合程序、图片等为纯文本格式的文件

 

主动被动模式

   主动:由服务器创建连接

       命令连接:Client使用随机端口连接Server端的21端口

       数据连接:Server端的20端口连接Client端的随机端口+1的端口;如果是和命令连接相关联的数据连接,Client端防火墙不会阻止

   被动:由客户端创建连接

       命令连接:Client使用随机端口连接Server端的21端口

       数据连接:Client使用随机端口+1连接服务器的20端口,然后服务器创建一个子进程和一个随机端口,让客户端连接进行传输数据

 

响应码:

1xx:信息

2xx:成功类的状态码

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

4xx:客户端错误

5xx:服务端错误

 

用户认证:

匿名用户:登录ftp时不需要输入用户名和密码,或者输入ftp或anonymous,密码为空即可登录ftp,这种用户就是匿名用户。一般只对此类用户提供下载

系统用户:直接使用本机系统用户进行验证,资源目录为用户家目录。

虚拟用户:用户帐号和密码信息存储在一份独立的用户数据文件中,而不是直接使用系统帐号。这些位于独立数据库文件中的用户,就是虚拟用户。

安装vsftpd

yum -y install vsftpd

vsftpd配置文件

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

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

配置文件目录: /etc/vsftpd

主配置文件:vsftpd.conf

主程序:/usr/sbin/vsftpd

匿名用户共享资源位置:/var/ftp/pub

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

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

 

ftp安装完成启动服务器就可以工作了。

放置一个测试文件到ftp服务器的匿名共享位置

[root@vsftpd ~]# cp /etc/fstab /var/ftp/pub/

示例连接服务器下载文件

[root@client ~]#  lftp 172.16.4.100
lftp 172.16.4.100:~> ls
drwxr-xr-x   2 0        0            4096 Apr 23 04:20 pub
lftp 172.16.4.100:/> cd pub/
lftp 172.16.4.100:/pub> ls
-rw-r--r--   1 0        0             921 Apr 23 04:20 fstab
lftp 172.16.4.100:/pub> get fstab   #进入pub目录使用get命令下载fstab文件
921 bytes transferred

使用系统用户登录

[root@client ~]# cp /etc/fstab /home/centos/
[root@client ~]# lftp centos@172.16.4.100
Password:
lftp centos@172.16.4.100:~> ls      
-rw-r--r--   1 0        0             921 Apr 23 04:40 fstab

vsftpd.conf配置文件解释

匿名用户

anonymous_enable=YES    //是否启用匿名用户

anon_umask=022          //设置匿名用户所上传文件的默认掩码权限值

anon_root=/var/ftp      //设置匿名用户的FTP根目录

anon_upload_enable=YES  //是否允许匿名用户上传文件

anon_mkdir_write_enable=YES  //是否允许匿名用户有创建目录的权限

anon_other_write_enable=YES  //是否允许匿名用户有写入权限,如对文件的修改,覆盖及删除文件

anon_max_rate=0              //限制匿名用户的最大传输速率(0为无限制),单位为字节/秒

 

示例:设置匿名用户可以上传文件

[root@vsftpd vsftpd]# vim vsftpd.conf
anon_upload_enable=YES    #配置文件中取消注释
[root@vsftpd vsftpd]# service vsftpd restart
[root@vsftpd vsftpd]# chown ftp /var/ftp/pub/   #设置pub目录属主为ftp用户,否则用户没有本地上传权限
[root@vsftpd vsftpd]#ll -d /var/ftp/pub/
drwxr-xr-x 2 ftp root 4096 Apr 23 12:20/var/ftp/pub/
[root@client ~]# lftp 172.16.4.100   #客户端匿名登录并且上传文件
lftp 172.16.4.100:~> cd pub/
lftp 172.16.4.100:/pub> put anaconda-ks.cfg
2856 bytes transferred       
lftp 172.16.4.100:/pub> ls
-rw-------   1 14       50           2856 Apr 23 04:49 anaconda-ks.cfg
-rw-r--r--   1 0        0             921 Apr 23 04:20 fstab

设置匿名用户可以创建目录

[root@vsftpd vsftpd]# vim vsftpd.conf
anon_mkdir_write_enable=YES
[root@vsftpd vsftpd]# service vsftpd restart
[root@client ~]# lftp 172.16.4.100   
lftp 172.16.4.100:~> cd pub/
lftp 172.16.4.100:/pub> mkdir testdir   #创建目录
mkdir ok, `testdir‘ created
lftp 172.16.4.100:/pub> ls
-rw-------   1 14       50           2856 Apr 23 04:49 anaconda-ks.cfg
-rw-r--r--   1 0        0             921 Apr 23 04:20 fstab
drwx------   2 14       50           4096 Apr 23 04:54 testdir

设置匿名用户可以删除文件

[root@vsftpd vsftpd]# vim vsftpd.conf
anon_other_write_enable=YES
[root@vsftpd vsftpd]# service vsftpd restart
[root@client ~]# lftp 172.16.4.100
lftp 172.16.4.100:~> cd pub/
lftp 172.16.4.100:/pub> ls
-rw-------   1 14       50           2856 Apr 23 04:49 anaconda-ks.cfg
-rw-------   1 14       50            921 Apr 23 05:00 fstab
drwx------   2 14       50           4096 Apr 23 04:54 testdir
lftp 172.16.4.100:/pub> mrm fstab  #删除文件
rm ok, `fstab‘ removed
lftp 172.16.4.100:/pub> ls
-rw-------   1 14       50           2856 Apr 23 04:49 anaconda-ks.cfg
drwx------   2 14       50           4096 Apr 23 04:54 testdir

 

本地用户

local_enable=YES      //是否启用系统用户

write_enable=YES      //本地用户是否有写入权限,同时还包括删除权限

local_umask=022       //设置本地用户所上传权限的掩码值,和系统umask没有关系

local_root=/var/ftp   //设置本地用户根目录(不填为家目录)

deny_email_enable=YES   //禁锢用户在家目录,需列表

banned_email_file=/etc/vsftpd/chroot_list  //禁锢那些用户在家目录的列表(文件不存在需要手动创建)

chroot_local_user=YES //将所有用户禁锢在家目录

local_max_rate=0      //限制本地用户的最大传输速率(0为无限制),单位为字节/秒

 

示例:将所有用户禁锢在家目录

[root@vsftpd vsftpd]#  vim vsftpd.conf
chroot_local_user=YES
[root@vsftpd vsftpd]#  service vsftpd restart
[root@client ~]# lftp centos@172.16.4.100
Password:
lftp centos@172.16.4.100:~> pwd     
ftp://centos@172.16.4.100
lftp centos@172.16.4.100:~> cd /etc
cd: Access failed: 550 Failed to change directory.(/etc)

 

全局配置

listen_address=0.0.0.0    //设置监听FTP的IP地址

listen_port=21            //设置监听FTP端口号

 

write_enable=YES          //启用任何形式的写入权限(如上传、删除文件等)都需要开启此项

download_enable=YES       //是否允许下载文件

chown_uploads=YES         //是否允许上传文件

chown_username=whoever    //是否改变上传文件的属主

 

dirmessage_enable=YES     //是否显示欢迎信息(需要在目录下面添加一个.message的文件,在里面输入欢迎信息)

 

xferlog_enable=YES          //是否打开传输日志

xferlog_file=/var/log/vsftpd.log //传输日志文件路径

xferlog_std_format=YES    //启用标准的xferlog日志格式,若禁用此项,将使用xferlog自己的日志格式

 

connect_from_port_20=YES   //允许服务器主动模式(从20端口建立数据连接)

pasv_max_port=24600        //设置被动模式的服务器最大端口号

pasv_min_port=24500        //设置被动模式服务器最小端口号

 

pam_service_name=vsftpd   //设置用户认证的PAM文件位置(/etc/pam.d目录中对应的文件名)

userlist_enable=YES       //启用userlist文件控制登陆

userlist_deny=NO   //允许userlist列表中的用户登录,如果是Yes就是拒绝登陆

tcp_wrappers=YES   //是否启用TCP_Wrappers主机访问控制

 

max_client=0     //最多允许多少客户端同时连接(0为无限制)

man_per_ip=0    //对于同一个Ip地址的客户端最多允许多少并发连接(0为无限制)

idle_session_timeout=600     //定义空闲会话超时时长

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

 

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

local_max_rate  //本地用户最大传输速率


基于MySQL的虚拟用户配置

Mysql服务器配置

安装mysql数据库

[root@mysql ~]#  yum -y install mysql-server

创建存储虚拟用户的数据库,并对用户进行授权

mysql> create database vsftpd;
mysql> GRANT select ON vsftpd.* TO vsftpd@‘172.16.%.%‘ IDENTIFIED BY ‘centos‘;

创建表

mysql> use vsftpd;
mysql> CREATE TABLE users (
    -> idINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->name VARCHAR(50) BINARY NOT NULL,
    ->password CHAR(48) BINARY NOT NULL );
mysql> DESC users;
+----------+------------------+------+-----+---------+----------------+
| Field    |Type             | Null | Key | Default |Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       |int(10) unsigned | NO   | PRI | NULL   | auto_increment |
| name     |varchar(50)      | NO   |    | NULL    |                |
| password | char(48)         | NO  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

向表中插入两个用户

mysql> INSERT INTO users (name,password) VALUES(‘zhangsan‘,password(‘centos‘)),(‘lisi‘,password(‘centos‘));
mysql> SELECT * FROM users;
+----+----------+-------------------------------------------+
| id | name    | password                                 |
+----+----------+-------------------------------------------+
|  1 |zhangsan | *128977E278358FF80A246B5046F51043A2B1FCED |
|  2 |lisi     |*128977E278358FF80A246B5046F51043A2B1FCED |
+----+----------+-------------------------------------------+

 

Vsftpd服务器配置

安装pam_mysql

[root@vsftpd ~]# yum -y install pam_mysql

修改pam文件

[root@vsftpd ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpdpasswd=centos host=172.16.4.136 db=vsftpd table=users usercolumn=namepasswdcolumn=password crypt=2
account required pam_mysql.so user=vsftpdpasswd=centos host=172.16.4.136 db=vsftpd table=users usercolumn=namepasswdcolumn=password crypt=2

auth:认证   crypt:说明加密方式

account:检查用户帐号是否在有效期内

 

还原备份的配置文件,避免以前的更改影响实验效果

[root@vsftpdvsftpd]# mv vsftpd.conf vsftpd.first
[root@vsftpdvsftpd]# cp vsftpd.conf.bak vsftpd.conf

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

useradd -s /sbin/nologin -d /var/ftproot vuser
chmod go+rx /var/ftproot/

修改vsftpd配置文件,添加允许来宾帐号访问,来宾帐号映射为vuser用户

guest_enable=YES
guest_username=vuser

设置认证文件为vsftpd.mysql

pam_service_name=vsftpd.mysql

注意:设置pam认证之后,系统用户将无法登录

可选配置

chroot_local_user=YES

配置完成之后重启vsftpd服务器,然后使用虚拟用户登录即可

[root@localhost ~]# lftp zhangsan@172.16.4.100
Password:
lftp zhangsan@172.16.4.100:~> ls

设置不同用户不同权限

设置用户权限存放目录

[root@localhost vsftpd]# vim vsftpd.conf
 user_config_dir=/etc/vsftpd/vuser
[root@localhost vsftpd]# mkdir /etc/vsftpd/vuser

创建用户权限文件,文件名需要和用户名保持一致

[root@localhost vsftpd]# cd /etc/vsftpd/vuser/
[root@localhost vuser]# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

设置完成重启服务

 

验证,使用zhangsan用户登录,可以上传文件

[root@localhost ~]# lftp zhangsan@172.16.4.100
Password:
lftp zhangsan@172.16.4.100:~> putanaconda-ks.cfg
2856 bytes transferred                            
lftp zhangsan@172.16.4.100:/> ls
-rw-------   1 501      501          2856 Apr 23 08:36 anaconda-ks.cfg

使用lisi用户上传则没有权限

[root@localhost ~]# lftp lisi@172.16.4.100
Password:
lftp lisi@172.16.4.100:~> ls        
-rw-------   1 501      501          2856 Apr 23 08:36 anaconda-ks.cfg
lftp lisi@172.16.4.100:/> put install.log
put: Access failed: 550 Permission denied.(install.log)

本文出自 “梅花香自苦寒来” 博客,请务必保留此出处http://ximenfeibing.blog.51cto.com/8809812/1652139

vsftpd

标签:vsftpd   ftp   

原文地址:http://ximenfeibing.blog.51cto.com/8809812/1652139

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!