vsFTPd 服务器配置大全

一、vsFTPd,目前经常使用FTP服务器套件;php

vsFTPd是一款在Linux发行版中最受推崇的FTP服务器程序;特色是小巧轻快,安全易用;能让其自身特色得发发挥和掌握,也然最主要的是会用;node

目前在开源操做系统中经常使用的FTPD套件主要有ProFTPD、PureFTPd和wuftpd等;至于哪一个FTP服务器套件更好,哪一个是你最熟悉的,哪一个就是最好的;linux

二、ftp 用户管理解说;apache

FTP服务器对用户的管理,在默认的状况下是根据 /etc/passwd及/etc/group 来进行的,因此咱们必定要了解Linux系统用户和用户组的管理,用户和用户组的管理是一切应用的的基础,有的弟兄不想去了解基础的东西,就想一步成架好各类服务器,事实证实这种学习方法是最不明智的;虽然在您可能在几分钟启动了ftp服务器,但遇到问题时,您不必定能知道是哪里出错;因此基础仍是极为重要的;浏览器

推荐文章: 《Linux 用户(user)和用户组(group)管理概述》安全

2.一、匿名ftp 用户和用户组的理解;bash

当咱们访问各大FTP上访问时,可能咱们不去想咱们以什么身份登陆的,若是他的FTP容许匿名登陆的话;好比咱们在浏览器上打入;服务器

 

ftp://mirrors.kernel.org

ftp://ftp:ftp@mirrors.kernel.org

 

咱们会发现上面的两行最终都能访问,并且显示的结果也彻底同样,最终都跳到 ftp://mirrors.kernel.org 地址;那咱们访问这个FTP时,是否是有用户和密码呢?是的,也是须要在的,只是在服务器端容许匿名访问,而匿名访问的用户名和密码都是ftp,只是咱们由于匿名访问,没有感受到他有用户名和密码罢了。第二个地址就是以ftp用户,密码也是ftp来访问 ftp://mirrors.kernel.org;网络

若是咱们以ftp命令链接 mirrors.kernel.org 时,咱们会发现须要输入用户ftp,密码ftp才能访问;ssh

在FTP服务器中,匿名用户的用户名和密码都是ftp ;这个用户能够在您的操做系统中的 /etc/passwd 中能找获得;可能有相似下面的一行;

 

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

 

说明:

/etc/passwd 是系统用户的配置文件;/etc/group是系统用户组配置文件,您能够经过 《Linux 用户(user)和用户组(group)管理概述》 及其相关文档中了解一些用户管理的一些基础知识;

在ftp用户这行中,咱们看到七个字段,每一个字段写字段之间用:号分割;

ftp 是用户名
x 是密码字段,是隐藏的;
14 是用户的UID字段,能够本身来设定,不要和其它用户的UID相同,不然会形成系统安全问题;
50 用用户组的GID,能够本身设定,不要和其它用户组共用FTP的GID,不然会形成系统全全问题;
FTP User 是用户说明字段;
/var/ftp 是ftp用户的家目录,能够本身来定义;
/sbin/nologin 这是用户登陆SHELL ,这个也是能够定义的,/sbin/nologin 表示不能登陆系统;系统虚拟账号(也被称为伪用户)通常都是这么设置。好比咱们把ftp用户的/sbin/nologin 改成 /bin/bash ,这样ftp用户经过本地或者远程工具ssh或telnet以真实用户身份登陆到系统。这样作对系统来讲是不安全的;若是您认为一个用户没有太大的必要登陆到系统,就能够只给他FTP账号的权限,也就是说只给他FTP的权限,而不要把他的SHELL设置成 /bin/bash 等;

关于ftp用户组的理解:

咱们查看 /etc/group 的时候,会发现相似这样一条;

 

ftp:x:50:

 

/etc/group 是用户组的管理配置文件,上面这行表示用户组ftp,x是密码段,50是GID;咱们对照在/etc/passwd中的ftp那行得知ftp用户是属于ftp用户组的,由于ftp用户那行中的GID和ftp用户组的GID是相同的;

2.二、匿名ftp 用户和ftp用户组是否能够删除

在通常状况下是不能把/etc/passwd和/etc/group 中有把ftp用户和用户组的行删除的,由于FTP服务器是须要他们来对FTP用户实现管理,在默认的状况下。

虽然不能删除,但对/etc/passwd及/etc/group中的ftp用户及ftp用户组的一些相关的东西是能修改的;好比咱们能够把ftp用户的家目录改掉,也能够把ftp用户的UID改掉 ... ... 前提是你对用户管理有所了解,系统用户管理是一切应用基础之一,可能初学Linux的弟兄并不了解用户管理的重要性,但慢慢您就会发现这个道理;

三、vsFTPd的安装;

在最新的各大发行版中的安装盘中都有vsFTPd的软件包,您用相应发行版提供的软件包管理工具就能安装上;固然您能够到各大发行版的FTP镜像中找到vsftpd的软件包;固然也能用软件包的管理工具在线安装;vsftpd的软件包原本不大,花不了多长时间,两分钟就够了吧;由于本文是初学者教程,我严重推荐您用发行版提供的软件来安装,不推荐您本身来编译源码包的安装方式;

若是您用的是Fedora 或Redhat 系统,能够用下面的命令在线安装;

 

[root@localhost ~]# yum install vsftpd

 

若是是debian 类系统,能够用apt 来在线安装;

 

[root@localhost ~]# apt-get install vsftpd

 

若是您是RPM的系统,也能够找到vsftpd-xxxx.rpm 的包来经过rpm命令来安装;

 

[root@localhost ~]# rpm -ivh vsftpd*.rpm

 

您能够下载源码包来安装

好比咱们下载的是 vsftpd-2.0.3.tar.gz ;

 

[root@localhost ~]# tar zxvf vsftpd-2.0.3.tar.gz
[root@localhost ~]# cd vsftpd-2.0.3
[root@localhost ~]# make ;make install
[root@localhost ~]# cp vsftpd.conf /etc

 

而后修改/etc/vsftpd.conf ,在配置文件的最后一行加入下面一行;

 

listen=yes

 

源码包安装的方法,若是您的系统是RPM包管理的系统,能够删除/etc/xinetd.d/vsftpd 这个文件;而后启动xinetd 服务器;

 

[root@localhost ~]# /etc/init.d/xinetd restart
中止 xinetd:                                              [  肯定  ]
启动 xinetd:                                              [  肯定  ]

 

vsFTPd运行有两种模式,在RPM包管理的系重审统,大可能是由Fedora/Redhat 开发而来,对于这样的系统有xinted服务器一说;对于非RPM包管理的系统,通常没有xinted这一说。为了保证本文档的统一,咱们都不要用xinetd模式,而用initd运行模式来启动和管理服务器,也就是独立运行模式; 至于什么是xinted和inted 模式,您能够参考《 用vsFTPd自架Linux网络安装服务器》

四、vsFTPd的服务器的启动和关闭;

vsFTPd服务器启动和关闭是极容易的;咱们能够直接把服务器运行调到后台运行;这是几乎全部服务器管理的运行方式;

4.一、vsFTPd服务器启动和关闭的通用方法;

运行vsftpd命令,要用到root权限,若是您当前操做用户并不是是root,能够用su切换到root权限;关于root权限的切换,您有两种方式,一种是su,另外一种是sudo;请参考: 《Linux 系统中的超级权限的控制》

vsFTPd服务器的运行;

 

[root@localhost ~]# /usr/sbin/vsftpd &
[root@localhost ~]# /usr/local/sbin/vsftpd &

 

vsFTPd服务器是否运行起来;

咱们能够经过pgrep vsftpd 来查看vsftpd是否运行起来;

 

[root@localhost ~]# pgrep vsftpd
4248

 

上面显示vsFTPd服务器运行起来了,您能够经过ftp命令、lftp工具或gftp或其它的FTP客户端来测试链接;

vsFTPd 服务器关闭:

咱们用pkill vsftpd 来杀死vsftpd进程,这样就把vsFTPd关闭,用psgrep vsftpd 来查看进程,若是没有进程,证实vsFTPd已经关掉;固然也要用到root权限。

 


[root@localhost ~]# pkill vsftpd
[root@localhost ~]# pgrep vsftpd



 

 

4.二、在Fedora/Redhat/CentOS中vsFTPd 服务器的启动和关闭:

在Fedora/Redhat/CentOS中,也能够用下面的方法来启动vsFTPd;固然也要用到root权限;

 

[root@localhost beinan]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd:                                    [  肯定  ]

 

从新启动vsFTPd用下面的命令;

 

[root@localhost beinan]# /etc/init.d/vsftpd restart
关闭 vsftpd:                                              [  肯定  ]
为 vsftpd 启动 vsftpd:                                    [  肯定  ]

 

关掉vsFTPd服务器,应该用下面的命令;

 

[root@localhost beinan]# /etc/init.d/vsftpd stop
关闭 vsftpd:                                              [  肯定  ]

 


五、vsFTPd的服务器和防火墙及SELINUX的关系;(重要)

我在论坛上看到有些弟兄说vsFTPd服务器启动正常,但却不能访问或用户不能上传文件,我感受应该是防火墙或SELINUX的事;可能FTPD服务器被防火墙或SELINUX的安全机制防住了。因此您必需要让防火墙经过ftp,固然也要让SELINUX经过ftp服务器才行;

在Fedora/Redhat/CentOS中,您要设置一下防火墙,能够把防火墙关掉,或者在自定义中让ftp “经过”防火墙;

 

[root@localhost ~]# system-config-securitylevel-tui

 

或者运行一下以下的命令,清除防火墙规则(通用);

 

[root@localhost beinan]# iptables -F

 

关于SELINUX服务器的解说 ,可能老手或新手对SELINUX都有点麻烦,建议您SELINUX;或者让vsFTPd服务器跳过SELINUX启动;也就是说要用到 4.一、vsFTPd服务器启动和关闭的通用方法;;这在Fedora/Redhat/CentOS中这样启动vsFTPd服务器是有效的;

固然您可也能够关掉SELINUX,在/etc/selinux/config 配置文件以下;

 

/etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=Disabled  #这样就把SELINUX服务器关掉了,请从新启动系统;
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

 


六、500 OOPS: vsftpd: refusing to run with writable anonymous root

若是咱们已经把vsFTPd服务器启动好了,但登陆测试是会出现相似下面的提示;

500 OOPS: vsftpd: refusing to run with writable anonymous root

这表示ftp用户的家目录的权限不对,应该改过才对;

 

[root@localhost ~]# more /etc/passwd |grep ftp
ftp:x:1000:1000:FTP User:/var/ftp:/sbin/nologin

 

咱们发现ftp用户的家目录在/var/ftp,就是这个/var/ftp的权限不对所致,这个目录的权限是不能打开全部权限的;是您运行了chmod 777 /var/ftp所致;若是没有ftp用户这个家目录,固然您要本身建一个;

以下FTP用户的家目录是不能针对全部用户、用户组、其它用户组彻底开放;
 

[root@localhost ~]# ls -ld /var/ftp
drwxrwxrwx  3 root root 4096 2005-03-23  /var/ftp

 

修正这个错误,应该用下面的办法;

 

[root@localhost ~]# chown  root:root /var/ftp
[root@localhost ~]# chmod  755 /var/ftp

 

有的弟兄可能会说,那匿名用户的可读、可下载、可上传怎么办呢?这也简单,在/var/ftp下再建一个目录,权限是777的就好了,再改一改vsftpd.conf就OK了;没有什么难的;

vsFTPd出于安全考虑,是不许让ftp用户的家目录的权限是彻底没有限制的,您能够去读一下vsFTPd的文档就明白的了;不然也不能称为最安全的FTP服务器了,对不对?

 

七、关于vsFTPd配置文件的说明;

vsftpd.conf是vsFTPd服务器的配置文件,此文件通常是/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf ,以系统为准吧。。

vsftpd.conf配置文件就是vsFTPd服务器的全局控制文件,此配置文件中,每行应该算作一个规则;前面带有#号的服务器不会解释,这和apache 的配置文件相似;#后所接的内容通常是说明性的,或者是关掉某些功能的选项;

vsftpd.conf 这个配置文件并不包括全部您想实现的功能,有些功能的实现,咱们要本身动手来解决,咱们要学会查vsFTPd的文档和FAQ等,虽然是英文的,但都是比较简单的;咱们要习惯看洋文文档,为何呢?由于Linux原本就是洋人厉害,重量级的软件都是洋人的。呵,兄弟不要抱怨,谁让咱们落后了呢?

注意:修改完配置文件后,必定要重启vsFTPd服务器才能生效,切记~~


 

八、关于vsFTPd服务器的一些经常使用功能的实现;

8.一、关于匿名上传下载的实现;

关于匿名上传,其实也比较简单,首先咱们要修改一下vsftpd.conf ,此文件位于 /etc/目录下,多是/etc/vsftpd.conf,也多是/etc/vsftpd/vsftpd.conf文件。以您的系统环境为准;

首先:咱们要改一下vsftpd.conf,确保有如下几行;

 

anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022

 

其次:在ftp用户家目录的下建一个文件夹,并修改其权限为彻底开放;

ftp用户的家目录在哪?咱们前面已经说了,要经过/etc/passwd来查看;也能够经过finger ftp来查看;

 

[root@localhost beinan]# finger ftp
Login: ftp                              Name: FTP User
Directory: /var/ftp                     Shell: /sbin/nologin

 

这说明ftp用户的家目录在/var/ftp ,咱们要在这个目录下建一个目录,而后把他的权限设置为任何用户可读可写可执行就好了;通常的状况下,在发行版中,有一个/var/ftp/pub的目录,若是没有,您也能够本身建一个;把配置文件改好后,只要把/var/ftp下的任何一个目录的权限打开,均可以用来匿名上传和下载;

好比您想让匿名用户上传和下载都在/var/ftp/pub,就能够把/var/ftp/pub的权限打开,若是没有这个目录,您要本身建一个;

 

[root@localhost ~]# mkdir /var/ftp/pub
[root@localhost ~]# chmod 777 /var/ftp/pub

 

这样上传的时候传到pub目录就OK了,对不对??

8.二、关于添加本地用户及打开读写权限示例;

FTP用户通常是不能登陆系统的,这也是为了安全。在系统中,没有权限登陆系统的用户通常也被称之为虚拟用户;虚拟用户也是要写进/etc/passwd中;这只是一种虚拟用户的方法,但说实在的并非真正的虚拟用户,只是把他登陆SHELL的权限去掉了,因此他没有能力登陆系统;

若是咱们想把beinan这个用户目录定位在/opt/beinan这个目录中,而且不能登陆系统;咱们应该以下操做

 

[root@localhost ~]# adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan
[root@localhost ~]# passwd beinan
Changing password for user beinan.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#

 

其实这仍是不够的,还要改一下配置文件vsftpd.conf ,以确保本地虚拟用户能有读写权限;

 

local_enable=YES
write_enable=YES
local_umask=022

 



8.四、如何实现虚拟路径?

好比:
 

/home/a 映射为 ftp://localhost/a
/home/b/c 则为 ftp://localhost/c

 

其实这个不能说是vsFTPd的内容,其实咱们早就接触过了,可能咱们没有注意,咱们能够经过以下的方法来实现。
 

[root@localhost ~]# mount --bind [原有的目录] [新目录]

 

好比个人ftp的默认目录是/var/ftp,我想把/mnt/LinG/WinSoft文件夹,映射到/var/ftp目录中,我就以下操做

咱们要先在/var/ftp目录中建一个目录
 

[root@localhost ~]# mkdir /var/ftp/WinSoft

 

而后执行mount命令
 

[root@localhost ~]# mount --bind /mnt/LinG/WinSoft /var/ftp/WinSoft

 

这样就OK了。

8.五、打开vsFTP服务器的日志功能;

把下面xferlog_file前面的#号对掉,也就是把vsftp的log功能打开,这样咱们就能在/var/log目录下查看vsftpd.log。这是vsFTP的日志功能,这对于咱们来讲是极为重要的。
 

xferlog_file=/var/log/vsftpd.log

 



8.六、如何定制欢迎信息;

如何定制欢迎信息,也就是咱们登入有些FTP以后,会出现相似:欢迎您来到LinuxSir FTP,在这里,您会获得最真诚的帮助,若是有什么问题和建议,请来信,多谢。

实现这个并不难,咱们能够查看vsftpd.conf文件中,是否有这行。

 

dirmessage_enable=YES
message_file=.message

 

若是没有就加上,若是dirmessage_enable=YES前面有#号,就把#号去掉。其实FTP信息默认的就是.message,因此能够不加 message_file= 来指定。本身指定也行,无所谓的事;

而后咱们制定一个.message文件,写上您想要写的东西,好比是.message的内容是以下的:

 

--欢迎您来到LinuxSir FTP!
--在这里,您会获得最真诚的帮助;
--若是有什么问题和建议,请来信,多谢。

 

咱们能够用编辑器来写这个.message,我想这个过程就不用说了吧。

而后咱们把.message这个文件复制到各个用户的家目录中。好比个人FTP的一个用户是beinan,这个用户所在的家目录是/opt/beinan
咱们就要把.message放在/opt/beinan这个目录下。若是系统用户ftp,他的目录就是/var/ftp这个目录,这个是默认的,当匿名用户登入时就访问的是/var/ftp这个目录。咱们要让匿名用户能看到欢迎信息。就要把.message放在/var/ftp目录中。其它的用户,也无非就是相似的操做。

8.七、硬盘空间有限,如何把账号ftp默认的家目录更改到别处?

个人硬盘空间有限,如何把账号ftp默认的路径/var/ftp更改到别处?或者是,个人linux全部的目录都放在/根分区,由于空间紧张,我可否把ftp这个用户的默认路径放到别的分区??

对于ftp这个用户的管理,咱们应该查看/etc/passwd ,而后修改ftp用户那行;

 

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

 

好比咱们想把ftp用户的家目录改成/opt/ftp,则要把相似上一行改成

 

ftp:x:14:50:FTP User:/opt/ftp:/sbin/nologin

 

而后咱们要创建ftp用户的新的家目录;

 

[root@localhost ~]# mkdir /opt/ftp
[root@localhost ~]# chmod 755 /opt/ftp
[root@localhost ~]# chown root:root /opt/ftp

 

若是默认的ftp磁盘空间紧张,咱们其实也能够用虚拟路径映射的方法来解决;也就是mount --bind的办法;看状况吧,哪一个适合就是最好的方法;

8.八、如何让vsFTP服务器限制连接数,以及每一个IP最大的连接数?

应该改vsFTPd服务器的配制文件vsftpd.conf,加入下面的两行:

 

max_clients=数字
max_per_ip=数字

 

举例:我想让个人vsFTP最大支持连接数为100个,每一个IP,最多能支持5个连接,因此我应该在vsftpd.conf中加上以下的两行:

 

max_clients=100
max_per_ip=5


改好了配制文件,不要忘记启动vsftp服务器。


8.九、如何限制传输速度?


 

anon_max_rate=数字

 

注:这是匿名的速度
 

local_max_rate=数字


注:这是vsFTP服务器上本地用户的速度

 

注:这个数字的单位是byte,因此咱们要计算一下。好比我想让匿名用户和vsFTP上的用户都以80KB下载,因此这个数字应该是1024x80=81920
因此咱们要在vsftpd.conf中加入下面的两行

 

anon_max_rate=81920
local_max_rate=81920

 


8.十、如何有选择的把用户限制在家目录中呢?

咱们要本身建一个文件,在/etc目录中或/etc/vsftpd目录中(假如您的vsftpd配置文件都是放在这个目录的话);
 

#touch /etc/vsftpd.chroot_list


以beinan和nanbei这两个用户限制在他们所在的家目录中,而其它的FTP用户不作此限制。

 

在vsftpd.chroot_list这个文件中,把beinan和nanbei添上去就行,注意,每一个用户占一行。
 

beinan
nanbei

 

而后改/etc/vsftpd/vsftpd.conf文件,找以下的两行

 

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

 

若是没有这样的两行,就能够本身添加上去也是同样的。

设置好后,从新vsFTPD服务器。

补充一之补充:如何把系统内全部的FTP用户都限制在家目录中呢??经juliaugong兄的提示,我查找了vsFTPd的洋文说明,证实这个选项是一刀切的解决全部的用户都能限制在家目录中

咱们能够经过更改vsftpd.conf文件,加入以下的一行
 

chroot_local_user=YES

 

改完配制文件,不要忘记重启vsFTPd服务器;

8.十一、如何让绑定IP到vsFTPd?

如何让绑定IP到vsFTPd?也就是说,如何让用户只能经过某个IP来访问FTP。其实这个功能颇有意思。若是绑定的是内网的IP,外部是没有办法访问的。若是绑定的是对外服务的IP,内网也只能经过对外服务的IP来访问FTP

在vsftpd.conf中加一行,以个人局域网为例,请看第一帖中的操做环境,这样外网就不能访问个人FTP了,内网也可能经过192.168.0.2来访问FTP;

 

listen_address=192.168.0.2
相关文章
相关标签/搜索