centos安装vsftpd,部署ftp服务器

Posted 码农下的天桥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos安装vsftpd,部署ftp服务器相关的知识,希望对你有一定的参考价值。

Vsftp 安装配置



1.查看是否安装vsftp
rpm –qa|grep vsftpd
如果出现 vsftpd-2.0.5-16.el5_5.1 说明已经安装 vsftp

安装vsftp

yum -y install vsftpd



2.测试 是否安装成功 (ip 改成自己啊,不要用俺的此次登录为匿名登录 user: anonymous 密码为空 如果成功登录会有下面内容 这说明vsftpd安装成功)

[root@localhost ~]#service vsftpd start

为 vsftpd 启动 vsftpd:[确定]

[root@localhost ~]#ftp 192.168.1.107

Connected to192.168.1.107.

220 (vsFTPd 2.0.5)

530 Please loginwith USER and PASS.

530 Please loginwith USER and PASS.

KERBEROS_V4 rejectedas an authentication type

Name(192.168.1.107:root): anonymous

331 Please specifythe password.

Password:

230 Loginsuccessful.

Remote system typeis UNIX.

Using binary mode totransfer files.

ftp> bye

221 Goodbye.

[root@localhost ~]#





3.修改配置文件/etc/vsftpd/vsftpd.conf

[root@localhost ~]#vi /etc/vsftpd/vsftpd.conf



取消下面内容前面的注释或添加

anonymous_enable=YES/NO 是否允许匿名用户访问

chroot_list_enable=YES   限定用户不可以离开主目录

chroot_list_file=/etc/vsftpd/chroot_list 

loca_enable=YES/NO 本地用户是否可以访问 注:如果为NO 则所有虚拟用户都将不能访问原因:虚拟用户访问在主机上其实是以本地用户访问的

pam_service_name=vsftpd pam认证文件名 在/etc/pam.d/vsftpd

guest_enable=YES 启用虚拟用户功能

guest_username=ftp 指定虚拟用户的宿主用户 –centos 里面已经有内置的ftp用户了(注:此用户在chroot_list_file=/etc/vsftpd/chroot_list文件里所指定的用户)

user_config_dir=/etc/vsftpd/vuser_conf 设置虚拟用户个人vsftp的服务配置文件

(此文件后面不能出现空格)



4.查看是否安装 db4 db4-utils

[root@localhost ~]#rpm -qa|grep db4 运行后出现下面内容 说明已经安装可以使用db_load命令(主要是 db4-utils)

db4-devel-4.3.29-10.el5_5.2

db4-4.3.29-10.el5_5.2

db4-devel-4.3.29-10.el5_5.2

db4-4.3.29-10.el5_5.2

db4-tcl-4.3.29-10.el5_5.2

db4-utils-4.3.29-10.el5_5.2

[root@localhost ~]#



如果没安装则要安装db4-utils

4.1安装db4-utils

[root@localhost ~]#yum -y install db4-utils



5. 创建 chroot_list_file=/etc/vsftpd/chroot_list文件

[root@localhost ~]#vi /etc/vsftpd/chroot_list (编辑文件把 /etc/vsftpd/vsftpd.conf 中guest_username的值写到文件中本例中为 ftp)

或者直接按下面进行操作

[root@localhost ~]#touch /etc/vsftpd/chroot_list

[root@localhost ~]# echoftp >> /etc/vsftpd/chroot_list (此处ftp 也要是/etc/vsftpd/vsftpd.conf中的guest_username的值)





6.创建虚拟用户目录(密码文本)

[root@localhost ~]#vi /etc/vsftpd/vftpuser.txtx (奇数行为用户名 ,偶数行为密码)

本文中添加如下(用cat 命令查看)

[root@localhost ~]#cat /etc/vsftpd/vftpuser.txtx

zz

aaaaa

ftp1

zzzzz

[root@localhost ~]#



7.生成虚拟用户的db文件

[root@localhost ~]#db_load -T -t hash -f /etc/vsftpd/vftpuser.txtx /etc/vsftpd/vftpuser.db



8.生成虚拟用户的认证文件

[root@localhostvsftpd]# vi /etc/pam.d/vsftpd



#%PAM-1.0

session optional pam_keyinit.so force revoke

auth required pam_listfile.so item=user sense=denyfile=/etc/vsftpd/ftpusers onerr=succeed

auth required pam_shells.so

auth include system-auth

account include system-auth

session include system-auth

session required pam_loginuid.so



注释掉/etc/pam.d/vsftpd中所有的内容 反正已经不要本地用户的认证了

特别注意 以下区别
32位系统增加以下两句:
auth required pam_userdb.so db=/etc/vsftpd/vftpuser
account required pam_userdb.so db=/etc/vsftpd/vftpuser
64位系统增加以下两句:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser

account required /lib64/security/pam_userdb.sodb=/etc/vsftpd/vftpuser



注:db=/etc/vsftpd/vftpuser 中的vftpuser 是你生成的虚拟用户的db文件



9.创建每个虚拟用户自己的配置文件,配置文件的路径是/etc/vsftpd/vsftpd.conf中的

user_config_dir=/etc/vsftpd/vuser_conf路径

在 /etc/vsftpd/vuser_conf/下面创建以用户名为名称的文件(名称是/etc/vsftpd/vftpuser.txtx 下面的奇数行)



[root@localhostvsftpd]# cat /etc/vsftpd/vftpuser.txtx

zz

aaaaa

ftp1

zzzzz



[root@localhostvsftpd]# mkdir vuser_conf

[root@localhostvsftpd]# vi /etc/vsftpd/vuser_conf/zz



内容如下

local_root=/var/www(虚拟用户的根目录根据实际修改)
write_enable=YES (可写)
download_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022



10.给文夹权限(否则不能上传 权限可自定 本人给的是 777)

[root@localhostvsftpd]# chmod 777 /var/www/



11.重启vsftpd

[root@localhostvsftpd]# service vsftpd restart



到此安装配置完成 如果出现连接被 同位体重置 或其它错误 请查看SELinux的当前模式





12.登录测试

[root@localhost vsftpd]# ftp192.168.1.107

Connected to 192.168.1.107.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as anauthentication type

Name (192.168.1.107:root): zz

331 Please specify the password.

Password:

500 OOPS: cannot changedirectory:/var/www

Login failed.

ftp>



查看方法

[root@localhost vsftpd]# getenforce

Enforcing 如果出现(Enforcing )

关闭方法:[root@localhost vsftpd]#setenforce 0 (0|1 开|关)



再次测试 登录成功

[root@localhost vsftpd]# chmod 777/var/www/

[root@localhost vsftpd]# ftp192.168.1.107

Connected to 192.168.1.107.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as anauthentication type

Name (192.168.1.107:root): zz

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>



查看系统是多少位的命令

[root@bogon ~]# getconf LONG_BIT

64 (64|32)



1.查看有没有安装vsftpd:
rpm -qa | grep vsftpd

2.yum安装vsftpd:
yum install vsftpd

3.rpm安装vsftpd:
    可以从下面两个地方获得最新的vsftpd的RPM包https://www.redhat.com/或者http://www.rpmfind.net/

安装命令:

rpm -Uvh vsftpd-1.1.3-8.i386.rpm

4.设置每次开机时自动运行及手工启动它:
chkconfig vsftpd on
service vsftpd start
netstat -tl 可以查看ftp端口是否在侦听了!

5.为vsftpd添加ftp账号
用useradd建立的用户,如果后面不加参数,建立的用户为普通用户,有系统登陆权限,所以要在useradd命令后面加上参数,为虚拟主机添加不可以登录系统的ftp专用账号,命令如下: 
# useradd –s /sbin/nologin –d /var/www   -g ftp ftpadmin

如果显示如下信息:
Creating mailbox file: File exists
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

表示用户家目录已经存在(/var/www),不可再新建此目录,并非添加用户失败,接下来给用户设置密码,否则此账号不能使用,命令如下:
# passwd ftpadmin

这样就为linux系统添加用户ftpadmin,用户目录指定为/var/www,属于ftp用户组,且此用户不能登陆系统。

注:
-s /sbin/nologin是让其不能登陆系统
-d 是指定用户目录为/var/www
-g ftp 把用户加入到ftp组中

修改/var/www目录属性:
chmod -R 777 /var/www 递归地给此目录下所有文件和子目录的读、写、执行权限
$ chgrp -R ftp   /var/www 递归地把此目录及该目录下所有文件和子目录的组属性设置成ftp组 

6.配置etc/vsftpd/vsftpd.conf文件:

nano -w /etc/vsftpd/vsftpd.conf
注:用nano编辑配置文件要加参数“-w”,用于取消自动换行,否则有可能会出错。

配置文件范例:

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and 
# listens on IPv4 sockets. This directive cannot be used in conjunction 
# with the listen_ipv6 directive.
listen=YES
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd whith two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES

pam_service_name=vsftpd
chroot_local_user=YES
userlist_enable=YES
tcp_wrappers=YES

注:此配置文件仅在默认配置文件基础上修改为如下两项:

anonymous_enable=NO #禁止匿名登录

chroot_local_user=YES     #把系统内所有的FTP用户都限制在家目录中

7.查看谁登陆了FTP,并杀死它的进程
ps –xf |grep ftp
kill 进程号 

8.使vsftp下root登录:
1)编辑两个FTP配置文件:/etc/vsftpd.ftpusers和/etc/vsftpd.user_list,将root那一行删掉或#注释掉; 

2)重启vsftpd服务:

service vsftpd restart

设置虚拟目录

# cd /var/ftp

# mkdir v1

# mount --bind /sourcedir /var/ftp/v1

# vi /etc/fstab

在最后增加一行:

/sourcedir /var/ftp/v1 none ro,bind 0 0 # /etc/init.d/vsftpd restart






架设ftp服务器

1.安装vsftp

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

yum install vsftpd
touch /var/log/vsftpd.log #创建vsftp的日志文件

CentOS中,这样就可以完成了一个简单的匿名FTP的搭建。你可以通过访问ftp://yourip来进行,不过这个FTP没有任何权限。
2.启动/重启/关闭vsftpd服务器

[root@localhost ftp]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]

OK表示重启成功了.
启动和关闭分别把restart改为start/stop即可.
如果是源码安装的,到安装文件夹下找到start.shshutdown.sh文件,执行它们就可以了.
3.与vsftpd服务器有关的文件和文件夹
vsftpd服务器的配置文件的是: /etc/vsftpd/vsftpd.conf
vsftpd服务器的根目录,即FTP服务器的主目录:/var/ftp/pub
如果你想修改服务器目录的路径,那么你只要修改/var/ftp到别处就行了

4.添加FTP本地用户(即虚拟用户,简单方案)
有的FTP服务器需要用户名和密码才能登录,就是因为设置了FTP用户和权限.
FTP用户一般是不能登录系统的,只能进入FTP服务器自己的目录中,这是为了安全.
这样的用户就叫做虚拟用户了.实际上并不是真正的虚拟用户,只是不能登录SHELL了而已,没权限登录系统.

/usr/sbin/adduser -d /opt/test_ftp -g ftp -s /sbin/nologin test

这个命令的意思是:
使用命令(adduser)添加test用户,不能登录系统(-s /sbin/nologin),自己的文件夹在(-d /opt/test_ftp)),属于组ftp(-g ftp)
然后你需要为它设置ftp登录密码 passwd test

passwd test
Changing password for user test.
New UNIX password:
Changing password for user test.New UNIX password:

注意:这里的密码要求为字母和数字的组合才可以,如果不符合密码验证机制的话就修改不成功,会有各种报错,“BAD PASSWORD: it's WAY too short”,这是报密码太短,不符合/etc/login.defs的设置,“BAD PASSWORD: it is based on your username”,这是密码与帐号不能同名,这是不符合/etc/pam.d/passwd的设置。“BAD PASSWORD: it is based on a dictionary word”这是因为出现了字典里的字符串,如果你英文与数字组合使用,就不会报错。

----------------------------------------------------------------------------------------------------------
1)我们在/etc/vsftpd/vsftpd.conf中做如下CentOS FTP服务配置:(复杂方案)
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进行认证
以下这些是关于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服务文件(配置文件名=虚拟用户名)
2)创建chroot list,将用户ftp加入其中:

touch /etc/vsftpd/chroot_list
echo test >> /etc/vsftpd/chroot_list

3)进行认证(可以不认证):
首先,安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包。

yum install db4 db4-utils

然后,创建用户密码文本/etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码
ftpuser1
ftppass1
ftpuser2
ftppass2
接着,.生成虚拟用户认证的db文件

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

随后,编辑认证文件/etc/pam.d/vsftpd,全部注释掉原来语句
再增加以下两句

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

最后,创建虚拟用户个性CentOS FTP服务文件

mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/ftpuser1

内容如下:

local_root=/opt/var/ftp1 虚拟用户的根目录(根据实际修改)
write_enable=YES 可写
anon_umask=022 掩码
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

-------------------------------------------------------------------------------------------------------------------------

5、常见错误:

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

他的系统是CentOS,是RH派系的。我把vsftpd安装配置好了,以为大功告成,但客户端访问提示如下错误:
500 OOPS: cannot change directory:/home/ftp
原因是他的CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。
//查看SELinux设置

# getsebool -a|grep ftp
ftpd_disable_trans --> off
ftp_home_dir-->off

//使用setsebool命令开启

# setsebool ftpd_disable_trans 1
# setsebool ftp_home_dir 1

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

//setsebool使用-P参数,无需每次开机都输入这个命令

# 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

# service vsftpd restart

有关selinux的配置

如关闭,仅仅警告,强制等等 需要编辑/etc/sysconfig/selinux 默认是强制。

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

setsebool -P ftpd_disable_trans 1
service vsftpd restart

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查看执行模式;

 关闭selinux命令:setenforce 0

我的FTP无法访问提示ftp: connect :未知错误号

以前问过这个问题,朋友们说是LINUX的防火墙没有关闭
请问在字符方式下如何关闭我LINUX上的防火墙?
yongpeng 我的FTP无法访问提示ftp: connect :未知错误号

service iptables stop
or
/etc/rc.d/init.d/iptables stop
nios 我的FTP无法访问提示ftp: connect :未知错误号

谢谢你了,
LINUX 默认会起这个防火墙吗??
顺便说一下刚才发现一个查看服务的命令

/sbin/service --status-all

ftp:connect:未知错误号

可能的原因是ftp服务没有真正启动成功,可以做以下几步

1、查看两台机器间能否ping通

2、关闭防火墙:service iptables stop (也可以chkconfig iptables off 这样启动是就关闭了,其他服务类似)

3、查看21端口,有没有被其他暂用:netstat -ano | grep 21

如果被暂用,就修改ftp的默认端口



最近需要一个ftp,正好借着正在学习centOS的机会配置一个vsftpd。

配置的过程中遇到了不少错误,这里记录下正确的完整的过程,以供大家分享。

首先下载vsftpd 

yum install vsftpd,然后确认一下选项是都正确,按照下图所示,特别是前三行,没有的话手动添加。



可以现在如果你尝试ftp的话还是不行,是因为你的pubs上传文件夹的权限不对。

新建文件夹在/var/ftp/目录下,pubs

查看他的权限ls -l,如果不是下面的
则使用chown ftp pubs 命令,修改权限。
如果还是不行的话,那是因为你的SELINUX是打开的,最简单直接的办法就是关闭SELINUX。 SELINUX的配置文件位于/etc/selinux/config 将config文件修改为


至此,基本已经完成。匿名 可上传,可下载,可修改。


如果还是有问题的话,请查看下你的防火墙是否阻止了。

只要输入service iptables stop 关闭防火墙后,如果能打开ftp了就说明防火墙阻止了。

可惜暂时不会修改防火墙的规则,先将就着把防火墙关了吧!!!!以后再补充!!!


还有就是提醒一点,vsftpd的根目录的权限是755,不可修改。

出于安全性的而考虑,根目录下是不可以上传文件的,只能新建一个单独的文件夹用于上传。


同时在实际的配置中我发现,可以同时实现只能下载不能上传和修改。

还是因为归属权限的问题。

我新建一个文件夹,将其设置为

chown ftp downloadONLY

上传一些常用的文件,然后将其权限设置回

chown root downloadONLY

这样,就实现了只能匿名下载,而不能修改或上传在这个目录上,而不影响pubs可上传同时可下载的目录。

但是有一个问题是,不能管理员在系统内复制文件到downloadONLY文件件,因为这样文件的归属权就不是ftp了,就不能下载了。

只能下修改权限,然后上传,在把权限改回来,从而只能实现匿名下载功能。



以上是关于centos安装vsftpd,部署ftp服务器的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7部署vsftpd服务

CentOS7.2部署FTP

linux(centos)部署ftp服务

centos 7 最小安装后 安装FTP服务器 vsftp

vsftp部署和优化(CentOS自带的ftp软件)

vsftp部署和优化(CentOS自带的ftp软件)