Centos 6.3安装配置vsFTPd环境的FTP服务器

2012.10.11更新,增加 vsftpd 配置文件说明。
2013.07.03更新,对文中一些字符被代码插件转义的错误。

我的电脑系统是win7 64bit,用virtualbox安装了一个最小化版的centos 6.3 64位的系统。最近特意想搭建一个FTP的服务器,所以,就有了如下的过程。备忘,方便你我他。

注:文章最后会附上 vsftpd 服务器配置文件的选项说明。

关于vsftpd介绍如下:

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

OK !现在进入安装配置。

1、安装vsftp

因为,我采用的yum命令安装,不是源码包安装。所以,安装和配置都非常的方便。

在这里,我要架设的是虚拟用户。所谓虚拟用户就是没有使用真实的账户,只是通过某种技术手段达到映射账户和设置权限的目的。

执行如下代码进行安装vsftpd:

yum -y install vsftpd

如果,你不确定自己的系统是否已经安装vsftpd,请用以下命令检测:

rpm -qa | grep vsftpd

如果输出类似以下内容:

vsftpd-2.2.2-11.el6.x86_64

说明你当前的系统已经安装了。这是基于yum命令进行安装的检测方法,使用源码包编译安装的检测方法不知道是不是这样,如果你知道,请留言告诉我。谢谢。

如果,什么都没有输出,说明你的系统没有安装。

因为,接下来配置 vsftpd 的需要,所以,要事先创建一个文件,命令如下:

touch /var/log/vsftpd.log

2、启动/重启/停止 vsftpd 服务器

刚才我们安装了vsftpd 服务器,但是,这个时候,还没有启动 vsftpd 服务。以下命令启动:

service vsftpd start

会出现一行启动成功的提示信息:

Starting vsftpd for vsftpd: [ OK ]

如果,你与我一样是安装的中文语言的Centos,那么提示信息将是中文的。如果,提示信息里面没有OK出现,也没有“确定”这样的字眼出现,说明启动失败了。反正,按照我的方式,不会出现失败。

vsftpd 的 重启命令:

service vsftpd restart

vsftpd 的 停止命令:

service vsftpd stop

如果,你希望下次系统启动的时候,自动启动 vsftpd 服务器,执行以下命令:

chkconfig vsftpd on

3、与 vsftpd 服务器有关的文件和文件夹

vsftpd服务器的配置文件的是: /etc/vsftpd/vsftpd.conf
vsftpd服务器的根目录,即FTP服务器的主目录:/var/ftp/pub

4、添加FTP本地用户(即虚拟用户,简单方案)

FTP大家可能都用过,通过给定的HOST、账号、密码就可以访问服务器对应的目录空间了。但是,这个FTP账号只能访问FTP服务,不能登录服务器系统,只能访问自己的目录。这样的用户就叫虚拟用户,本质上这不叫虚拟用户,仅仅只是不能通过终端等一系列途径登录服务器系统而已。

创建一个FTP用户的命令如下:

adduser -d /opt/ftp_dir/ftp001 -g ftp -s /sbin/nologin ftp001

此命令的含义:
使用shell命令adduser添加一个ftp001的系统账户,但是,不能登录系统(-s /sbin/nologin),该账户的主目录在(-d /opt/ftp_dir/ftp001),属于ftp这个用户组(-g ftp)。

我们创建了一个FTP账户,现在来设置账户的密码,命令如下:

passwd ftp001

接着会要求你输入两次密码确认。为了避免出现不要求的错误,请尽量保证自己的密码长度大于6个字符,且是字母与数字的混合的字符串。如我的密码是:ftp123456。

5、vsftpd 配置文件的调整

anonymous_enable=NO 设定不允许匿名访问

local_enable=YES
设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问。

chroot_list_enable=YES 使用户不能离开主目录

xferlog_file=/var/log/vsftpd.log
设定vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来。我们已经一开始就已经创建了。

ascii_upload_enable=YES

ascii_download_enable=YES 设定支持ASCII模式的上传和下载功能。

pam_service_name=vsftpd PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证

chroot_list_file 将这个配置前面的#号去掉。

以下这些是关于Vsftpd虚拟用户支持的重要CentOS FTP服务配置项目。

默认vsftpd.conf中不包含这些设定项目,需要自己手动添加CentOS FTP服务配置。

guest_enable=YES 设定启用虚拟用户功能。

guest_username=ftp 指定虚拟用户的宿主用户。-CentOS中已经有内置的ftp用户了

user_config_dir=/etc/vsftpd/vuser_conf
设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)

这个目录可以这样理解,针对每一个FTP账号,我们可以在此目录下创建一个与账号同名的文件(必须同名,这是规定)。然后,在里面配置一些特殊的信息。比如:这个账号是否能上传文件,是否能下载文件,所能访问的目录空间是什么等。

6、创建chroot list,将FTP用户加入其中:

我们有了FTP账号,但是,这个时候 vsftpd 服务器并不知道。所以,我们要告诉它。
执行如下命令:

touch /etc/vsftpd/chroot_list
echo ftp001 >> /etc/vsftpd/chroot_list

如果,你有多个FTP账户,那么请将这些账户以每行一个的方式配置在此文件中即可。

7、账户认证:

首先,我们要安装Berkeley DB工具,很多人找在接下来执行db_load命令的时候,会发生找到不此命令的错误就是因为没有安装这个包。

首先查看系统中是否已经安装,命令如下:

rpm -qa|grep db4

安装即会输出类似以下的信息:

db4-4.7.25-17.el6.x86_64
db4-utils-4.7.25-17.el6.x86_64

反之,则没有安装。执行以下命令进行安装:

yum -y install db4 db4-utils

安装完毕。然后我们创建用户密码文本,命令如下:

vi /etc/vsftpd/vuser_passwd.txt

将我们的FTP账号密码配置进去。注意奇行是用户名,偶行是密码。如:

ftp001
ftp123456

接着,生成虚拟用户认证的db文件,执行如下命令:

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

随后,编辑 vsftpd 认证文件:/etc/pam.d/vsftpd.
将此文件中所有代码注释掉,注释请用#号。然后,在文件最后增加如下两句:

auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd

以上两句是32位系统的添加内容,64位的系统是如下:

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

8、最后配置每个FTP用户的配置文件

因为,我们要将所有与用户FTP配置文件放到如下目录下,所以,我们要创建它:

mkdir /etc/vsftpd/vuser_conf/

然后,在此目录中为每个FTP用户创建一个配置文件,以我们创建和ftp001账户为例:

vi /etc/vsftpd/vuser_conf/ftp001

在文件中配置如下内容:

local_root=/opt/ftp_dir/ftp001
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022

local_root是告诉FTP账户只能访问此目录。

以上配置完成之后,记得关闭系统防火墙。

————————-以下是常见错误与解决方案—————–

安装完以后,可能发现连接ftp服务器,一般是由于SELinux的问题,原因如下:

CentOS系统是Rad Hat派系的,把vsftpd安装配置OK之后,但客户端访问提示如下错误:

500 OOPS: cannot change directory:/opt/ftp_dir/ftp001

原因是CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。

查看SELinux设置,命令如下:

getsebool -a|grep ftp

Centos6系列以前的版本在输出的结果中会有如下信息:

ftpd_disable_trans --> off
ftp_home_dir-->off

Centos 6系列是没有ftpd_disable_trans的。

通过查看得到,ftp是关掉了。

使用setsebool命令开启,Centos 6不需要执行第一句shell命令:

setsebool ftpd_disable_trans 1 setsebool ftp_home_dir 1

由于操作系统一旦重启后,这种设置需要重新设置,这里使用-P参数实现.

setsebool使用-P参数,无需每次开机都输入这个命令,Centos 6版本不需要执行第一句shell命令:

setsebool -P ftpd_disable_trans 1 setsebool -P ftp_home_dir 1

查看当前状态是否是on的状态,命令如下:

getsebool -a|grep ftp

结果如下:
ftpd_disable_trans –> on
ftp_home_dir–>on

这时候重启 vsftpd 服务器,命令如下:

service vsftpd restart

1.553 Could not create file

一般都是SELinux的问题,设置SELinux的一个值,重启服务器即可。

setsebool -P ftpd_disable_trans 1
service vsftpd restart

还有可能是所设置的目录,FTP账户没有权限访问。我在亲测的过程中就遇到过这样的问题。

2.500 OOPS: bad bool value in config file for: write_enable

注意你的CentOS FTP服务文件中保证每一行最后没有任何空格,一般出错就是在多余的空格上。

打开/etc/selinux/config

将selinux=enforcing 改成permissive 或disabled。

•enforcing强制模式,只要SELinux不允许,就无法执行;
•permissive警告模式,将该事件记录,依然允许执行;
•disabled关闭SELinux;
•停用、启用需要重启计算机;
•使用setenforce切换enforcing与permissive模式不需要重启计算机;
•getenforce及sestatus查看执行模式;

 

——————————————– vsFTPd 配置选项说明 ——————————————-
在默认的配置文件中,并不会列出所有的配置项。所以,接下来可能会碰到一些在默认配置文件中没出现的配置选项,你可以根据需要自行配置使用。



#设定不允许匿名访问:YES允许、NO不允许 
anonymous_enable=NO 
#设定本地用户是否可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。 
local_enable=YES 
#设定可以进行写操作。 
write_enable=YES 
#设定上传后文件的权限掩码,默认值是077。 
local_umask=022 
#匿名用户是否可以上传:YES可以 NO不可以。 
anon_upload_enable=NO 
#匿名用户是否可以建目录:YES可以 NO不可以。 
anon_mkdir_write_enable=NO 
#匿名用户其它的写权利(更改权限?) 
anon_other_write_enable=NO 
#匿名登入者是否允许下载可阅读的档案:YES允许、NO拒绝。 
anon_world_readable_only=YES 
#所有非匿名登陆的用户名是否被切换成guest_username指定的用户名。 
guest_enable=NO 
#所有匿名上传的文件的所属用户将会被更改成chown_username 
chown_uploads=YES 
#匿名上传文件所属用户名 
chown_username=lightwiter 
#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录,一般情况下,我们都不会允许用户更改根目录。 
chroot_list_enable=YES 
#允许使用"async ABOR"命令,一般不用,容易出问题,最好设置为NO。 
async_abor_enable=YES 
#是否可用ASCII 模式上传。默认值为NO,即不允许。 
ascii_upload_enable=YES 
#是否可用ASCII 模式下载。默认值为NO,即不允许。 
ascii_download_enable=YES 
#定义匿名登入的使用者名称。默认值为ftp。 
ftp_username=ftp 
#本地用户主目录,当前用户必须具有此目录的操作权限,否则会连接FTP会提示没有权限操作。 
local_root=(none) 
#空闲连接超时,单位(秒)。 
idle_session_timeout=600 
#数据传输超时,单位(秒)。即传输超过2分钟即超时断开。如果是上传大文件,请将此值设置得更大一些即可。如:3600秒。 
data_connection_timeout=120 
#PAVS请求超时。 
accept_timeout=60 
#PROT模式连接超时。 
connect_timeout=60 
#开启日记功能。 
xferlog_enable=YES 
#使用标准格式。 
xferlog_std_format=YES 
#当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用。 
log_ftp_protocol=NO 
#允许使用pasv模式。 
pasv_enable=YES 
#关闭安全检查。 
pasv_promiscuous=NO 
#允许使用port模式。 
port_enable=YES 
#开启tcp_wrappers支持。 
tcp_wrappers=YES 
#定义PAM 所使用的名称,预设为vsftpd。 
pam_service_name=vsftpd 
#当服务器运行于最底层时使用的用户名。 
nopriv_user=nobody 
#是否能使用ls -R命令以防止浪费大量的服务器资源。 
ls_recurse_enable=YES 
#是否使用单进程模式。 
one_process_model=NO 
#绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式。 
listen=YES 
#当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。 
text_userdb_names=NO 
#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果 
use_localtime=NO 
#测试平台优化 
#use_sendfile=YES 
#login时显示欢迎信息.如果设置了banner_file则此设置无效。不知道怎么回事,我设置中文会乱码。知道的朋友留言告诉我一下。谢谢! 
ftpd_banner=PHP初学者网站欢迎您使用FTP。 
#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 
dirmessage_enable=YES 
#显示会话状态信息。 
setproctitle_enable=YES 
#定义不能更改用户主目录的文件。 
chroot_list_file=/etc/vsftpd/chroot_list 
#定义限制/允许用户登录的文件。 
userlist_file=/etc/vsftpd/vsftpd.user_list 
#定义登录信息文件的位置。 
banner_file=/etc/vsftpd/banner 
#禁止使用的匿名用户登陆时作为密码的电子邮件地址。 
banned_email_file=/etc/vsftpd.banned_emails 
#日志文件位置。 
xferlog_file=/var/log/vsftpd.log 
#目录信息文件。 
message_file=.message 
#定义用户配置文件的目录。 
user_config_dir=/etc/vsftpd/vuser_conf 
#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的。 
local_root=/opt/ftp_dir/ftp001 
#匿名用户登陆后的根目录。 
anon_root=/var/ftp 
#可接受的最大client数目。 
max_clients=100 
#每个ip的最大client数目。 
max_per_ip=5 
#使用标准的20端口来连接ftp。 
connect_from_port_20=YES 
#绑定到某个IP,其它IP不能访问。 
listen_address=10.0.2.15 
#绑定到某个端口。 
#listen_port=2121 
#数据传输端口。 
#ftp_data_port=2020 
#pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。 
pasv_max_port=0 
#pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。 
pasv_min_port=0 
#匿名用户的传输比率(b/s)。 
anon_max_rate=51200 
#本地用户的传输比率(b/s)。 

local_max_rate=5120000



登陆FTP后,不难发现,我们可以进入用户目录更上层的目录,虽然无法修改读取文件,但是也造成一定的安全问题。我们可以如下设置:

以下两种方法可以实现。

修改 /etc/vsftpd/vsftpd.conf 文件,增加:

1
2
3
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

这样配置,凡是写在/etc/vsftpd/chroot_list中的用户都是不受限制的用户。

因此我们还需要创建一个空白的文件,否则FTP登陆不上

1
touch/etc/vsftpd/chroot_list

1
cat/dev/null>/etc/vsftpd/chroot_list

另外还有这样的配置方法:

1
2
3
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

这样配置, 凡是写在/etc/vsftpd/chroot_list中的用户都是受限制的用户。

chroot_list文件的格式很简单,一行一个用户名。

推荐使用第一种方法。

————————————————————————————————————————————————————————————————————————

以上部分都是转载的,非常详细,按步骤来就可以了,但是你可能会做完上面的任务的时候,ftp依然用不了

我列举自己遇到的几个问题

1.就是你输入密码后,拒绝你的登录,你查看/var/log/vsftpd.log里面什么都没,怎么办呢?你查看/var/log/secure,你会发现“PAM unable to dlopen(/lib64/security/pam_userdb.so): /lib64/security/pam_userdb.so: cannot open shared object file: No such file or directory”因为你根据上面vsftpd 认证文件来设置的 /lib64 可能你的电脑是/lib,你自己查看下就知道了。把这个改好就可以登录了

2.可是你发现登录后你上传不了,ftp报出553 Could not create file.这样的错误

那么你就要改变ftp的用户目录/opt/ftp_dir/ftp001 权限改写“rwxrwxrwx”可能你还要把ftp目录改写成只有ftp001专用 应该是“drwxrwxrwx. 4 ftp001 ftp 4096 11月 21 20:13 ftp001”

可能到这步你还是不能上传,那么这可能还是由于selinux引起的,通过命令 getsebool -a|grep ftpd 查看。

allow_ftpd_anon_write –> off

allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off

ftpd_connect_db –> off
httpd_enable_ftp_server –> off
sftpd_anon_write –> off
sftpd_enable_homedirs –> off
sftpd_full_access –> off
sftpd_write_ssh_home –> off
tftp_anon_write –> off
  www.2cto.com  
红色的要为on才行,更改命令:

通过这些,应该不会有问题了吧?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值