阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 6.4 安装vsftpd

116次阅读
没有评论

共计 11521 个字符,预计需要花费 29 分钟才能阅读完成。

Vsftpd 原理

vsftpd 是 linux 发行版中的一款 ftp 服务器程序,它的全称是“very secure ftp daemon”, 号称是最安全的 ftp 服务器。它工作在 21,20 号端口,主要提供文件传输服务,可以跨越网络提供服务,非常好用。

本文主要内容:
一,ftp 的工作原理:
二,vsftpd 的配置文件:
三,vsftpd 的安装
四,vsftpd 的启动与关闭:
五,vsftpd 的配置文件 /etc/vsftpd/vsftpd.conf 解析:
六,用 tcp_wraper 来控制 vsftpd:
七,创建 ftp 虚拟用户
八,启用 ssl,建立安全的传输

————————————– 分割线 ————————————–

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

vsftpd 的安全配置案例分析 http://www.linuxidc.com/Linux/2012-12/76501.htm

————————————– 分割线 ————————————–

一,ftp 的工作原理:
 ftp 的两种工作模式:
 1,主动模式
工作原理:客户端从一个任意的非特权端口(大于 1024)N 连接到 FTP 服务器的命令端口,也就是 21 端口。然后客户端开始监听端口 N +1,并发送 FTP 命令“portN+1”到 FTP 服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)
 2,被动模式
工作原理:当开启一个 FTP 连接时,客户端打开两个任意的非特权本地端口(大于 1024)N 和 N +1。第一个端口连接服务器的 21 端口,但与主动方式的 FTP 不同,客户端不会 提交 PORT 命令并允许服务器来回连它的数据端口,而是提交 PASV 命令。这样做的结果是服务器会开启一个任意的非特权端口(大于 1024)P,并发送 PORT P 命令给客户端。然后客户端发起从本地端口 N + 1 到服务器的端口 P 的连接用来传送数据

主动模式与被动模式的比较:
主动 FTP 对 FTP 服务器的管理和安全很有利,但对客户端的管理不利,因为 FTP 服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端 的防火墙阻塞掉。被动 FTP 对 FTP 客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。目前,ftp 服务器一般工作在被动模式。

Last login: Wed Sep 11 19:46:41 2013 from192.168.2.2

[root@linuxidc ~]# rpm -qa | grep vsftpd

[root@linuxidc ~]# yum -y install vsftpddb4-devel db4 db4-utils pam-devel pam pam_pkcs11 ftp

[root@linuxidc ~]# service vsftpd start

为 vsftpd 启动 vsftpd:[确定]

[root@linuxidc ~]# chkconfig vsftpd on

第二步:配置 vsftpd 服务的宿主
#useradd vsftpdadmin -s /sbin/nologin
这个 vsftpdadmin 只是用来替换 root 的,并不需要登录

第三步:建立 ftp 虚拟宿主帐户
#useradd ftpuser-s /sbin/nologin
这 ftpuser 只个虚拟帐户的宿主,本身是不用登录的

[root@linuxidc ~]# cp -rf /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak // 备份一下,就算最后 vsftpd 搭建坏了,也可以恢复

[root@linuxidc ~]# grep -v “#”/etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf// 去除 #号重定向到 /etc/vsftpd/vsftpd.conf 文件中。

注:筛选目录一定和重定向目录不能相同,否则里面是空的。

[root@linuxidc ~]# cat /etc/vsftpd/vsftpd.conf

anonymous_enable=YES// 允许匿名访问

local_enable=YES// 允许本地用户访问,默认就是 YES,不用改

write_enable=YES// 允许写入,默认是 YES,不用改

local_umask=022// 上传后文件的权限掩码,不用改

dirmessage_enable=YES// 开启目录标语,默认是 YES,开不开无所谓,我是默认就行

xferlog_enable=YES// 开启日志,默认是 YES,不用改

xferlog_file=/var/log/vsftpd.log// 设定 vsftpd 的服务日志保存路径。注意,该文件默认不存在。必须要手动 touch 出来

connect_from_port_20=YES// 设定连接端口 20

xferlog_std_format=YES// 设定 vsftpd 的服务日志保存路径,不用改

listen=YES// 如果设置为 YES,则 vsftpd 将以独立模式运行,由 vsftpd 自己监听和处理连接请求

local_root=/var/ftp 锁定 ftp 访问目录

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

userlist_enable=YES// 拒绝登录用户名单,不用改

tcp_wrappers=YES// 限制主机对 VSFTP 服务器的访问,不用改(通过 /etc/hosts.deny 和 /etc/hosts.allow 这两个文件来配置)

以上除了日志那项外都是系统默认存在的

chroot_list_enable=YES// 不允许 FTP 用户离开自己主目录,默认是被注释掉的。

chroot_list_file=/etc/vsftpd/chroot_list// 如果开启了 chroot_list_enable=YES,那么一定要开启这个,这条是锁定登录用户只能家目录的位置,如果不开启用户登录时就会报 500 OOPS 的错。

注意:/etc/vsftp/chroot_list

本身是不存在的,这要建立 vim/etc/vsftp/chroot_list,然后将帐户输入一行一个,保存就可以了

[root@linuxidc etc]# vi /etc/vsftpd/chroot_list

virtual

这步如果不写的话,会报 500 OOPS: could notread chroot() list file:/etc/vsftpd/chroot_list

idle_session_timeout=600// 会话超时,客户端连接到 ftp 但未操作,默认被注释掉,可根据个人情况修改

#async_abor_enable=YES// 支持异步传输功能,默认是注释掉的

#ascii_upload_enable=YES// 支持 ASCII 模式的下载功能,默认是注释掉的

#ascii_download_enable=YES// 支持 ASCII 模式的上传功能,默认是注释掉的

#ftpd_banner=Welcometo blah FTP service//FTP 的登录欢迎语,本身是被注释掉的,去不去都行

#chroot_local_user=YES// 禁止本地用户登出自己的 FTP 主目录,本身被注释掉

以上都是配置文件里有,但都是被注释掉的……

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-08/105113p2.htm

还可以增加:

guest_enable=YES // 设定启用虚拟用户功能。
guest_username=ftpuser // 指定虚拟用户的宿主用户。
virtual_use_local_privs=YES // 设定虚拟用户的权限符合他们的宿主用户。
user_config_dir=/etc/vsftpd/vconf // 设定虚拟用户个人 Vsftp 的配置文件存放路径

建立日志文件
#touch /var/log/vsftpd.log // 日志文件
#chown vsftpdadmin.vsftpdadmin /var/log/vsftpd.log // 属于 vsftpdadmin 这个宿主

第六步:建立虚拟用户文件
#mkdir /etc/vsftpd/vconf/
#touch /etc/vsftpd/vconf/vir_user

第七步:建立虚拟用户
#vim/etc/vsftpd/vconf/vir_user
virtualuser // 用户名
123456 // 密码

注意:第一行用户名,第二行是上一行用户名的密码,其他人的以此类推

第八步:生成数据库
#db_load -T -t hash -f /etc/vsftpd/vconf/vir_user/etc/vsftpd/vconf/vir_user.db

第九步:设置数据库文件的访问权限
#chmod 600 /etc/vsftpd/vconf/vir_user.db
#chmod 600 /etc/vsftpd/vconf/vir_user

第十步:修改 /etc/pam.d/vsftpd 内容
authrequired/lib/security/pam_userdb.so db=/etc/vsftpd/vconf/vir_user

account required/lib/security/pam_userdb.so db=/etc/vsftpd/vconf/vir_user

第十步:创建用户的配置文件
注意:用户配置文件的名字要和创建的“虚拟用户”名字对应
#touch/etc/vsftpd/vconf/virtualuser
#vim /etc/vsftpd/vconf/virtualuser
输入:
local_root=/home/virtualuser // 虚拟用户的个人目录路径
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=1048576 // 本地用户的最大传输速度,单位是 Byts/s,我设定的是 10M

第十一步:建立虚拟用户目录
如果不建立虚拟用户的个人目录,那么所有的虚拟用户登录后所在的目录都是同一个目录下
# mkdir /home/virtualuser
# chown ftpuser.ftpuser ./virtualuser
# chmod 600 /home/virtualuser
配置就此完成,如果想增加新的用户,只要按照上面的第七步、第十步进行就可以了。

注意:我的 selinux 是关闭的……

重起

FTP 数字代码的意义

110 重新启动标记应答。

120 服务在多久时间内 ready。

125 数据链路埠开启,准备传送。

150 文件状态正常,开启数据连接端口。

200 命令执行成功。

202 命令执行失败。

211 系统状态或是系统求助响应。

212 目录的状态。

213 文件的状态。

214 求助的讯息。

215 名称系统类型。

220 新的联机服务 ready。

221 服务的控制连接埠关闭,可以注销。

225 数据连结开启,但无传输动作。

226 关闭数据连接端口,请求的文件操作成功。

227 进入 passive mode。

230 使用者登入。

250 请求的文件操作完成。

257 显示目前的路径名称。

331 用户名称正确,需要密码。

332 登入时需要账号信息。

350 请求的操作需要进一部的命令。

421 无法提供服务,关闭控制连结。

425 无法开启数据链路。

426 关闭联机,终止传输。

450 请求的操作未执行。

451 命令终止:有本地的错误。

452 未执行命令:磁盘空间不足。

500 格式错误,无法识别命令。

501 参数语法错误。

502 命令执行失败。

503 命令顺序错误。

504 命令所接的参数不正确。

530 未登入。

532 储存文件需要账户登入。

550 未执行请求的操作。

551 请求的命令终止,类型未知。

552 请求的文件终止,储存位溢出。

553 未执行请求的的命令,名称不正确。

常见 FTP 命令及其功能

FTP命令

功能

FTP命令

功能

ls

显示服务器上的目录

ls [remote-dir][local-file]

显示远程目录 remote-dir,并存入本地文件 local-file

get remote-file [local-file]

从服务器下载指定文件到客户端

mget remote-files

下载多个远程文件(mget 命令允许用通配符下载多个文件)

put local-file [remote-file]

从客户端上传指定文件到服务器

mput local-file

将多个文件上传至远程主机(mput 命令允许用通配符上传多个文件)

open

连接 FTP 服务器

mdelete [remote-file]

删除远程主机文件

close

中断与远程服务器的 ftp 会话(与 open 对应)

mkdir dir-name

在远程主机中创建目录

open host[port]

建立指定的 ftp 服务器连接,可指定连接端口

newer file-name

如果远程主机中 file-name 的修改时间比本地硬盘同名文件的时间更近,则重传该文件

cd directory

改变服务器的工作目录

rename [from][to]

更改远程主机的文件名

lcd directory

在客户端上 (本地) 改变工作目录

pwd

显示远程主机的当前工作目录

bye

退出 FTP 命令状态

quit

同 bye, 退出 ftp 会话

ascii

设置文件传输方式为 ASCII 模式

reget remote-file [local-file]

类似于 get, 但若 local-file 存在,则从上次传输中断处续传

binary

设置文件传输方式为二进制模式

rhelp [cmd-name]

请求获得远程主机的帮助

![cmd [args]]

在本地主机中交互 shell 后退回到 ftp 环境,如:!ls *.zip

rstatus [file-name]

若未指定文件名,则显示远程主机的状态,否则显示文件状态

accout

  此处含有隐藏内容,需要正确输入密码后可见!

提供登录远程系统成功后访问系统资源所需的密码

hash

每传输 1024 字节,显示一个 hash 符号(#)

append local-file [remote-file]

将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名

restart marker

从指定的标志 marker 处,重新开始 get 或 put,如 restart 130

bye

退出 ftp 会话过程

rmdir dir-name

删除远程主机目录

case

在使用 mget 命令时,将远程主机文件名中的大写转为小写字母

size file-name

显示远程主机文件大小,如:
size idle 7200

cd remote-dir

进入远程主机目录

status

显示当前 ftp 状态

cdup

进入远程主机目录的父目录

system

显示远程主机的操作系统

delete remote-file

删除远程主机文件

user user-name

  此处含有隐藏内容,需要正确输入密码后可见!

[account]

向远程主机表明自己的身份,需要密码时,必须输入密码,如:user anonymous my@email

dir [remote-dir][local-file]

显示远程主机目录,并将结果存入本地文件

help [cmd]

显示 ftp 内部命令 cmd 的帮助信息,如 help get

常见错误:

1.500 OOPS: vsftpd: refusing to run withwritable anonymous root

vsftpd 是对安全性要求较高的 ftp server,所以不允许匿名写 ftp 主目录。基本是因为对 ftp 的主目录执行过 chmod 777 导致。所以,再用 chmod 命令改变权限即可,一般 chmod 750 就可以,亦或解决的方法是: chown root ftp; chmod -w ftp。如果想创建一个允许匿名访问可读写的,就在主目录下再创建一个文件夹,设置成 777 的权限,修改 vsftpd.conf 就 ok 了。

2.ftp:connect: 链接被拒绝

原因:服务没启动

解决:chkconfig vsftpd on

3.could not open chroot() listfile:/etc/vsftpd.chroot_lis

这个问题挺简单,纯属我没有好好动脑,对 vsftpd.conf 中的个别选项没有比较清楚的理解导致……解决办法把 chroot_list_enable=YES 改成 no 或者 comment 掉就可以。

4.530 permission denied

Login failed

原因:“/etc/vsftpd.user_list”文件中不存在当前登录用户

解决:echo virtual >> /etc/vsftpd/virtual_user

5.530 Login incorrect

login incorrect

原因:你的 CentOS 是 64 位,所以要在 pam 的那个位置把 lib 改成 lib64

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/ftpusr

account required /lib/security/pam_userdb.so db=/etc/vsftpd/ftpusr

改为:

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

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

5.500 00PS:unrecognized variable in configfile

Connection closed by remote host

原因:参数前有空格

解决:将参数前空格删除

更多 CentOS 相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14

Vsftpd 原理

vsftpd 是 linux 发行版中的一款 ftp 服务器程序,它的全称是“very secure ftp daemon”, 号称是最安全的 ftp 服务器。它工作在 21,20 号端口,主要提供文件传输服务,可以跨越网络提供服务,非常好用。

本文主要内容:
一,ftp 的工作原理:
二,vsftpd 的配置文件:
三,vsftpd 的安装
四,vsftpd 的启动与关闭:
五,vsftpd 的配置文件 /etc/vsftpd/vsftpd.conf 解析:
六,用 tcp_wraper 来控制 vsftpd:
七,创建 ftp 虚拟用户
八,启用 ssl,建立安全的传输

————————————– 分割线 ————————————–

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

vsftpd 的安全配置案例分析 http://www.linuxidc.com/Linux/2012-12/76501.htm

————————————– 分割线 ————————————–

一,ftp 的工作原理:
 ftp 的两种工作模式:
 1,主动模式
工作原理:客户端从一个任意的非特权端口(大于 1024)N 连接到 FTP 服务器的命令端口,也就是 21 端口。然后客户端开始监听端口 N +1,并发送 FTP 命令“portN+1”到 FTP 服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)
 2,被动模式
工作原理:当开启一个 FTP 连接时,客户端打开两个任意的非特权本地端口(大于 1024)N 和 N +1。第一个端口连接服务器的 21 端口,但与主动方式的 FTP 不同,客户端不会 提交 PORT 命令并允许服务器来回连它的数据端口,而是提交 PASV 命令。这样做的结果是服务器会开启一个任意的非特权端口(大于 1024)P,并发送 PORT P 命令给客户端。然后客户端发起从本地端口 N + 1 到服务器的端口 P 的连接用来传送数据

主动模式与被动模式的比较:
主动 FTP 对 FTP 服务器的管理和安全很有利,但对客户端的管理不利,因为 FTP 服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端 的防火墙阻塞掉。被动 FTP 对 FTP 客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。目前,ftp 服务器一般工作在被动模式。

Last login: Wed Sep 11 19:46:41 2013 from192.168.2.2

[root@linuxidc ~]# rpm -qa | grep vsftpd

[root@linuxidc ~]# yum -y install vsftpddb4-devel db4 db4-utils pam-devel pam pam_pkcs11 ftp

[root@linuxidc ~]# service vsftpd start

为 vsftpd 启动 vsftpd:[确定]

[root@linuxidc ~]# chkconfig vsftpd on

第二步:配置 vsftpd 服务的宿主
#useradd vsftpdadmin -s /sbin/nologin
这个 vsftpdadmin 只是用来替换 root 的,并不需要登录

第三步:建立 ftp 虚拟宿主帐户
#useradd ftpuser-s /sbin/nologin
这 ftpuser 只个虚拟帐户的宿主,本身是不用登录的

[root@linuxidc ~]# cp -rf /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak // 备份一下,就算最后 vsftpd 搭建坏了,也可以恢复

[root@linuxidc ~]# grep -v “#”/etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf// 去除 #号重定向到 /etc/vsftpd/vsftpd.conf 文件中。

注:筛选目录一定和重定向目录不能相同,否则里面是空的。

[root@linuxidc ~]# cat /etc/vsftpd/vsftpd.conf

anonymous_enable=YES// 允许匿名访问

local_enable=YES// 允许本地用户访问,默认就是 YES,不用改

write_enable=YES// 允许写入,默认是 YES,不用改

local_umask=022// 上传后文件的权限掩码,不用改

dirmessage_enable=YES// 开启目录标语,默认是 YES,开不开无所谓,我是默认就行

xferlog_enable=YES// 开启日志,默认是 YES,不用改

xferlog_file=/var/log/vsftpd.log// 设定 vsftpd 的服务日志保存路径。注意,该文件默认不存在。必须要手动 touch 出来

connect_from_port_20=YES// 设定连接端口 20

xferlog_std_format=YES// 设定 vsftpd 的服务日志保存路径,不用改

listen=YES// 如果设置为 YES,则 vsftpd 将以独立模式运行,由 vsftpd 自己监听和处理连接请求

local_root=/var/ftp 锁定 ftp 访问目录

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

userlist_enable=YES// 拒绝登录用户名单,不用改

tcp_wrappers=YES// 限制主机对 VSFTP 服务器的访问,不用改(通过 /etc/hosts.deny 和 /etc/hosts.allow 这两个文件来配置)

以上除了日志那项外都是系统默认存在的

chroot_list_enable=YES// 不允许 FTP 用户离开自己主目录,默认是被注释掉的。

chroot_list_file=/etc/vsftpd/chroot_list// 如果开启了 chroot_list_enable=YES,那么一定要开启这个,这条是锁定登录用户只能家目录的位置,如果不开启用户登录时就会报 500 OOPS 的错。

注意:/etc/vsftp/chroot_list

本身是不存在的,这要建立 vim/etc/vsftp/chroot_list,然后将帐户输入一行一个,保存就可以了

[root@linuxidc etc]# vi /etc/vsftpd/chroot_list

virtual

这步如果不写的话,会报 500 OOPS: could notread chroot() list file:/etc/vsftpd/chroot_list

idle_session_timeout=600// 会话超时,客户端连接到 ftp 但未操作,默认被注释掉,可根据个人情况修改

#async_abor_enable=YES// 支持异步传输功能,默认是注释掉的

#ascii_upload_enable=YES// 支持 ASCII 模式的下载功能,默认是注释掉的

#ascii_download_enable=YES// 支持 ASCII 模式的上传功能,默认是注释掉的

#ftpd_banner=Welcometo blah FTP service//FTP 的登录欢迎语,本身是被注释掉的,去不去都行

#chroot_local_user=YES// 禁止本地用户登出自己的 FTP 主目录,本身被注释掉

以上都是配置文件里有,但都是被注释掉的……

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-08/105113p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计11521字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中