搭建linux vsftpd服务器

一、vsftpd简介

vsFTPd是一款在Linux发行版中最受推崇的FTP服务器程序;特点是小巧轻快,安全易用;能让其自身特点得发发挥和掌握,也然最主要的是会用;目前在开源操作系统中常用的FTPD套件主要有ProFTPD、PureFTPd和wuftpd等;至于哪个FTP服务器套件更好,哪个是你最熟悉的,哪个就是最好的。

二、vsftpd的两种工作模式

FTP的连接一般是有两个连接的,一个是用于客户程和服务器传输命令的,另一个是用于数据传送的连接。FTP服务程序一般会支持两种不同的模式,一种是Port模式,一种是Passive模式(Pasv Mode),我先说说这两种不同模式连接方式的分别。(先假设客户端为C,服务端为S)

主动模式(Port Mode):命令连接的建立是由客户端C的随机端口向服务端S的TCP 21端口请求连接产生;数据连接的建立是由:(命令端口的连接建立在成功后)客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口随机端口N在等着你进行数据连接),当服务端S收到这个Port命令后,就会利用服务器S自己的TCP 20端口向客户端打开的那个随机端口N进行请求连接,最终连接成功。

被动模式(Pasv Mode):命令连接的建立也是由客户端C的随机端口向服务端S的TCP 21端口请求连接产生;(命令端口的连接建立在成功后)服务端S会发信息给客户端C,这个信息内容是(服务端S在本地打开了一个高位端口M,你现在去连接我吧),当客户端C收到这个信息后,就利用客户端自己的随机端口向服务端S的M端口进行连接,进而数据连接建立成功。

三、vsftpd的安装与启动

Vsftpd的安装程序在RHEL5安装光盘的Server目录中,名称是:vsftpd-*(版本).rpm。在安装之前您可以先查看自己的服务器上是否已经安装。例如下所示:

#rpm -qa|grep vsftpd

vsftpd-2.0.5-10.e15

如果您的服务器上没有安装vsftpd的程序包,您可以使用以下命令安装:

#rpm -ivh vsftp-2.0.5-10.e15.i386.rpm

当您的vsftpd程序包安装上之后,就可以设置vsftpd服务开机自动启动。命令如下:

#chkconfig vsftpd on

并设置手工启动该服务,命令如下所示:

#service vsftpd start   或   #/etc/init.d/vsftpd start

四、vsftpd的用户

Vsftpd服务支持三种用户登录ftp服务器,包括:匿名用户、本地用户、虚拟用户。

匿名用户在text模式下,要用用户名ftp,密码也是ftp,来进行登陆;如果是用FTP工具来匿名登陆的话,用户名和密码都为:anonymous。默认情况下匿名用户可以访问和下载,但不能进行上传、删除、新建目录、执行文件等操作!默认情况下匿名用户登录之后访问的位置是/var/ftp目录

本地用户就是使用useradd手工建立的用户,这些用户的相关资料都存储在/etc/passwd与/etc/shadow文件中。当vsftpd的客户端利用本地用户的身份与口令登录vsftpd时,默认访问本地用户自己的家目录(主目录)。(提示:为了提高vsftpd服务器的安全性,我们可以把一些vsftpd的本地用户的shell设置为/sbin/nologin,表示这些用户不能在本地登录系统,但可以使用ftp的方式访问服务器上的资料)

虚拟用户:即客户端登录vsftpd服务器时输入的多个用户名在服务器上根本不存在,这些用户名都对应了一个vsftpd服务器上的本地用户。所以当这些虚拟用户在登录时看到的主目录都是相同的位置(就是对应的那个本地用户的家目录)。这样可以提高vsftpd的安装性。

五、vsftpd的配置文件:

Vsftpd相关的配置文件有:/etc/vsftpd/vsftpd.conf 、/etc/vsftpd/ftpusers、/etc/vsftpd/user_list三个。其中/etc/vsftpd/ftpusers为ftp黑名单文件,即此文件中存储的用户名都禁止访问vsftpd;/etc/vsftpd/vsftpd.conf是vsftpd的主配置文件;/etc/vsftpd/user_list文件比较灵活,它根据vsftpd.conf主配置文件的不同配置,即可以充当黑名单文件(默认即是),也可以充当白名称文件(即只允许该文件中存储的用户名访问vsftpd),具体设置详见本文相关介绍。

Vsftpd主配置文件/etc/vsftpd/vsftpd.conf的相关设置:

anonymous_enable=YES允许使用匿名用户

anon_upload_enable=YES允许匿名用户上传数据

anon_mkdir_write_enable=YES允许匿名用户创建目录并在新目录中写入数据

anon_world_readable_only=NO  允许匿名用户浏览已目录中已经存在的数据

anon_other_write_enable=YES允许匿名修改、删除文件

anon_umask=022设置匿名用户上传数据的默认权限

anon_max_rate=81920匿名用户的最大传输速度(80K/s)

local_enable=YES允许使用本地用户

write_enable=YES允许本地用户上传数据

local_umask=022设置本地用户上传数据的默认权限

local_max_rate=81920本地用户的最大传输速度(80K/s)

max_clients=数字允许最大连接客户端数量

max_per_ip=数字允许每个客户端的最多线程数量

chroot_local_user=YES         锁定所有本地用户只允许访问自己的家目录

chroot_list_enable=YES    锁定部分本地用户只允许访问自己的家目录(用户是手工指定的)

chroot_list_file=/etc/vsftpd.chroot_list  指定锁定用户的列表文件

userlist_enable=YES允许使用/etc/vsftpd/user_list文件

userlist_deny=YES            设置/etc/vsftpd/user_list文件中的用户拒绝访问ftp服务器;若为NO

则是设置只允许user_list文件中的用户访问ftp服务器。

tcp_wrappers=YES设置允许使用tcp_wrapper来控制vsftpd的访问

listen_port=21设置ftp服务的端口号默认为21

ftpd_banner=*****设置ftp的登录欢迎信息

六、创建vsftpd虚拟用户(说明:以下实验彩色字体中,颜色相同的部分内容必须相同)

1、建立虚拟用户列表文件  

例:#vim ~/login.txt  (文件中奇数行写虚拟用户名,偶数行写虚拟用户口令)

   tom

   1234

   jack

   123

2、利用虚拟用户列表文件生成虚拟用户数据库文件(rpm -ivh db4-util)

例:#db_load -T -t hash -f ~/login.txt/etc/vsftpd/vir_user.db

#chmod 600 /etc/vsftpd/vsfptd_login.db

说明:如果您的系统中没有db_load命令说明您需要安装db4-util的程序包,该程序包就RHEL5的系统安装盘上Server目录下。而且生成了虚拟用户数据库文件之后还需要将该数据库文件的权限设置为600。

3、为虚拟用户建立pam认证文件:

例:#vim /etc/pam.d/vsftpd.vu,内容如下:

   auth required pam_userdb.so db=/etc/vsftpd/vir_user

   account required pam_userdb.so db=/etc/vsftpd/vir_user

4、建立需要映射的本地账户

例:#useradd vitrual_user

5、配置vsftpd.conf文件(包括:禁用匿名用户相关项;启用虚拟用户功能;并指定映射账户;使用新的PAM文件)

例:#vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO (修改原文件中的相关行,禁用匿名用户)

guest_enable=YES(添加新行,启用虚拟用户功能)

guest_username=virtual_user(添加新行,指定映射账户为virtual_user)

pam_service_name=vsftpd.vu(修改原文件中的相关行,指定使用新的pam认证文件)

通过以上的操作虚拟用户已经可以使用,但每个虚拟用户登录到系统后所持有的权限是相同的,因为它们使用的配置文件都是/etc/vsftpd/vsftpd.conf。如果您希望不同的虚拟用户持有不相同的权限,您可以为虚拟用户建立自己的私有配置文件。但首先要在vsftpd的主配置文件中添加以下行,目的是指定虚拟用户私有配置文件的具体位置,然后再建立虚拟用户的私有配置文件。

例:#mkdir /etc/vsftpd/vu_user_conf_dir

#vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vu_user_conf_dir (添加新行,指定虚拟用户的配置文件存

储在vu_user_conf_dir)

#vim /etc/vsftpd/vu_user_conf_dir/tom(建立tom用户的私有配置文件,内容省略)

#vim /etc/vsftpd/vu_user_conf_dir/jack(建立jack用户的私有配置文件,内容省略)

七、关于iptables防火墙的设置

由于vsftpd服务使用TCP的21号端口输送指令,在主动模式下使用TCP的20号端口输送数据,但在被动模式下使用高位动态端口做为数据端口。这样防火墙的设置就比较麻烦一些,不仅需要开启tcp 21号端口,还需要开启防火墙的跟踪模式。操作如下:

#iptables -I INPUT -p tcp --dport 21 -j ACCEPT

#iptables -I INPUT -p tcp --dport 20 -j ACCEPT 支持主动模式

#iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 支持被动模式

#modprobe ip_conntrack_ftp  临时加载ip跟踪模块

当然也可以将跟踪模块加载到iptables的配置文件(/etc/sysconfig/iptables-config)中,这样它就永久生效了。操作如下:

#vim /etc/sysconfig/iptables-config

将IPTABLES_MODULES="ip_conntrack_netbios_ns" 行更改成为:

 IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp" 即可

由于时间关系本次关于vsftpd我就简单的介绍到这里,如果您有不同看法或意见,请跟我联系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vsftpd搭建步骤 1、首先安装vsftpd,并设置开机启动 yum -y install vsftpd chkconfig vsftpd on 2、基于虚拟用户配置,(所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统)  2.1 配置参数 [root@ftp vuser_conf]# sed -n '/^[^#]/P' /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES idle_session_timeout=600 data_connection_timeout=120 ascii_upload_enable=YES ascii_download_enable=YES chroot_list_enable=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES guest_enable=YEs guest_username=ftp user_config_dir=/etc/vsftpd/vuser_conf pasv_enable=YES pasv_min_port=40000 pasv_max_port=40080 pasv_promiscuous=YES accept_timeout=60 connect_timeout=60  2.2 参数解释 [root@ftp /]# sed -n '/^[^#]/P' /etc/vsftpd/vsftpd.conf #设定不允许匿名访问 anonymous_enable=NO #设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问 local_enable=YES #允许用户上传数据(包括文档与目录) write_enable=YES #建立新目录(775)与档案(644)的权限 local_umask=022 #若目录下有.message则显示该文档内容 dirmessage_enable=YES #启动登录文件记录,记录于 /var/log/xferlog xferlog_enable=YES #支持主动式联机功能 connect_from_port_20=YES #如果上一个xferlog_enable=YES的话,这可以设定了!这个是登录档案的档名。 xferlog_file=/var/log/xferlog #是否设定为 wu ftp 相同的登录档格式?预设为 NO ,因为登录档会比较容易读! 不过,如果你有使用 wu ftp 登录文件的分析软件,这才需要设定为 YES xferlog_std_format=YES #若匿名者发呆超过 10 分钟就断线 idle_session_timeout=600 #如果服务器与客户端的数据联机已经成功建立 (不论主动还是被动联机),但是可能由于线路问题导致 120 秒内还是无法顺利的完成数据的传送,那客户端的联机就会被我们的 vsftpd 强制剔除! data_connection_timeout=120 #如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII 格式上传文件。 ascii_upload_enable=YES #如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII 格式下载文件。 ascii_download_enable=YES #是否启用 chroot 写入列表的功能?与底下的 chroot_list_flie 有关!这个项目得要开启,否则底下的列表档案会无效。 chroot_list_enable=YES #若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的!预设是 NO !所以我们的 CentOS 将它改为 YES !这样才能使用 stand alone 的方式来唤醒。 listen=YES #这个是 pam 模块的名称,我们放置在 /etc/pam.d/vsftpd 即是这个。 pam_service_name=vsftpd #支持 /etc/vsftpd/user_list 档案内的账号登入管控! userlist_enable=YES #支持 TCP Wrappers 的防火墙机制 tcp_wrappers=YES #若这个值设定为 YES 时,那么任何实体账号,均会被假设成为 guest (所以预设是不开放的)! 至于访客在 vsftpd 当中,预设会取得 ftp 这个使用者的相关权限。但可以透过 guest_username 来修改。 guest_enable=YES #指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了 guest_username=ftp # FTP服务文件(配置文件名=虚拟用户名) user_config_dir=/etc/vsftpd/vuser_conf #支持数据流的被动式联机模式(passive mode),一定要设定为 YES pasv_enable=YES #在防火墙配置内开启40000到40080端口(没有测试过) -A INPUT -m state --state NEW -m tcp -p -dport 40000:40080 -j ACCEPT pasv_min_port=40000 pasv_max_port=40080 #是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用) pasv_promiscuous=YES #当用户以被动式 PASV 来进行数据传输时,如果服务器启用 passive port 并等待 client 超过 60 秒而无回应, 那么就给他强制断线!这个设定值与 connect_timeout accept_timeout=60 #单位是秒,在数据连接的主动式联机模式下,我们发出的连接讯号在 60 秒内得不到客户端的响应,则不等待并强制断线 connect_timeout=60  2.3 FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 一、PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了****端口,你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求,建立一条数据链路来传送数据。 二、PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了****端口,你过来连接我”。于是客户端向服务器的****端口发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。 3 进行认证  安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包 yum install db4 db4-utils  创建用户密码文本,注意奇行是用户名,偶行是密码 [root@ftp /]# cat /etc/vsftpd/vuser_passwd.txt lixiang 8qu.com.cn shuaicong 8qu.com.cn gaojingyuan 8qu.com.cn  生成虚拟用户认证的db文件 db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db 注:(每添加一用户和秘密就得生成一次)  编辑认证文件,全部注释掉原来语句,再增加以下两句 [root@ftp /]# cat /etc/pam.d/vsftpd #%PAM-1.0 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account required pam_userdb.so db=/etc/vsftpd/vuser_passwd  创建虚拟用户配置文件 mkdir /etc/vsftpd/vuser_conf/ -p [root@ftp /]# cd /etc/vsftpd/vuser_conf/  文件名等于vuser_passwd.txt面的账户名,否则下面设置无效 [root@ftp /]# cat /etc/vsftpd/vuser_passwd.txt lixiang 8qu.com.cn shuaicong 8qu.com.cn gaojingyuan 8qu.com.cn [root@ftp /]# cd /etc/vsftpd/vuser_conf/ [root@ftp vuser_conf]# ll total 12 -rw-r--r-- 1 root root 159 Apr 1 17:57 gaojingyuan -rw-r--r-- 1 root root 161 Apr 1 16:27 lixiang -rw-r--r-- 1 root root 161 Apr 1 17:00 shuaicong  虚拟用户根目录,根据实际情况修改 #指定虚拟用户的具体主路径。 local_root=/data/ftp #设定可以进行写操作 write_enable=YES # umask = 022 时,新建的目录 权限是755,文件的权限是 644 umask = 077 时,新建的目录 权限是700,文件的权限时 600。这应该是anonymous用户创建的文件权限。 anon_umask=022 #仅允许 anonymous 具有下载可读档案的权限 anon_world_readable_only=NO #是否让 anonymous 具有上传数据的功能,默认是 NO,如果要设定为 YES ,则 anon_other_write_enable=YES 必须设定 anon_upload_enable=YES #是否让 anonymous 具有建立目录的权限?默认值是 NO!如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES ! anon_mkdir_write_enable=YES #是否允许 anonymous 具有除了写入之外的权限?包括删除与改写服务器上的档案及档名等权限。预设当然是 NO!如果要设定为 YES, anon_other_write_enable=YES 4 设置FTP根目录权限  最新的vsftpd要求对主目录不能有写的权限所以ftp为755,主目录下面的子目录再设置777权限 mkdir /data/ftp chmod -R 755 /data chmod -R 777 /data/ftp [root@ftp data]# ls -ld /data/ drwxr-xr-x 3 root root 4096 Apr 1 16:25 /data/ [root@ftp data]# ll total 4 drwxrwxrwx 2 root root 4096 Apr 1 17:21 ftp  建立限制用户访问目录的空文件(不需要也得创建) touch /etc/vsftpd/chroot_list  如果启用vsftpd日志需手动建立日志文件 touch /var/log/xferlog touch /var/log/vsftpd.log  重启iptabls和vsftpd service iptables restart service vsftpd restart 5 Selinux和防火墙  该关闭的关闭,该放行的放行 1 2 3 4 5 #关闭selinux/iptables sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0 chkconfig iptables off service iptables stop 常见问题 如果登录时出现 500 OOPS: priv_sock_get_result. Connection closed by remote host. 这样的错误,需要升级pam yum update pam 6日志分析 vsftpd的两个日志文件分析如下: /var/log/xferlog 记录内容举例 /var/log/vsftpd.log Sat Apr 1 16:34:14 2017 1 10.13.98.101 55 /vsftpd(1).txt b _ i g lixiang ftp 0 * c /var/log/xferlog日志文件中数据的分析和参数说明 记录数据 参数名称 参数说明 Thu Sep 6 09:07:48 2007 当前时间 当前服务器本地时间,格式为: DDD MMM dd hh:mm:ss YYY 7 传输时间 传送文件所用时间,单位为秒 192.168.57.1 远程主机名称/IP 远程主机名称/IP 4323279 文件大小 传送文件的大小,单位为byte /home/student/phpMyadmin- 2.11.0-all-languages.tar.gz 文件名 传输文件名,包括路径 b 传输类型 传输方式的类型,包括两种: a以ASCII传输 b以二进制文件传输 – 特殊处理标志 特殊处理的标志位,可能的值包括: _ 不做任何特殊处理 C 文件是压缩格式 U 文件是非压缩格式 T 文件是tar格式 i 传输方向 文件传输方向,包括两种: o 从FTP服务器向客户端传输 i 从客户端向FTP服务器传输 r 访问模式 用户访问模式,包括: a 匿名用户 g 来宾用户 r 真实用户,即系统中的用户 student 用户名 用户名称 ftp 服务名 所使用的服务名称,一般为FTP 0 认证方式 认证方式,包括: 0 无 1 RFC931认证 * 认证用户id 认证用户的id,如果使用*,则表示无法获得该id c 完成状态 传输的状态: c 表示传输已完成 i 表示传输示完成

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值