VSFTPD服务配置实例

2012-1-8 王健宇 Linux

概述:
FTP(File Transfer Protocol)文件传输协议,它能够在两个系统(可以是异构系统)之间传输文件,是比较古老的协议之一,客户端可以随时随地访问装有FTP服务的主 机,它也是一种标准的C/S(客户端/服务器)模式,有自己的标准文件处理命令,唯一不同的是服务端工作时需开启两个进程(两个端口),标准数据控制端口 为TCP协议的21口,而数据传输端口为TCP协议的20口。互联网上存在各种各样的工作平台,为使各平台能互相传输文件,就需要共同遵守一个约定,它就 是协议,用于文件传输的协议叫"文件传输协议",由于这样的协议的存在,各平台之间就能相互传送文件,从本地传送文件到远程计算机上叫“上传”,从远程计 算机上把文件传输到本地计算机叫“下载”,用户操作文件上传或下载之前必須登录远程计算机(服务器),也就是说必须授权后才能对服务器进行操作。那为什么 很多FTP服务只要输入地址后就能上传或下载文件了呢?我没有登录也能下载文件啊?没错,互联网上有很多这样的服务器,它并不是不需要登录,而是默认连接 的时候就用某个“用户“登录服务器,当然权限也受某个“用户“权限约束,一般情况下这个用户叫“匿名”用户(anonymous) ,多数时候匿名用户是不开放上传权限,只能下载指定的文件,它是发布共享软件的好方法。习惯上我们把这个匿名用户的密码写成自己的邮件地址(不写也行),
作用:
实现远程文件传输功能,跨平台工作而不受平台之间的差异约束,有自己一套标准处理命令结构
FTP文件的传输方式:ASCII传输模式和二进制数据传输模式。
1、ASCII传输方式:传输ASCII字符组成的文件,由回车和换行符分开,主要用来传输文件文件
2、二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的,主要用来传输可执行文件、压宿文件等,它也可以传输ASCII字符
FTP的工作方式
一种方式叫做PORT(主动)方式
Port模式的客户端首先和FTP服务器的TCP 21端口建立控制连接,并通过此连接通道发送控制命令,当有数据传输时客户端通知服务器自己用什么端口(通常大于1024)接收数据,服务器收到命令后通 过自己的TCP 20端口主动连接客户端的指定端口,简单地说就是服务器主动来连接客户端
一种方式叫做PASV(被动)方式
PASV建立控制连接的时候和Port模式类似,当控制连接发送控制命令时,会在服务器打开一个端口(通常大于1024)并通知客户端自己用此端口来传输数据,客户端连接FTP服务器的指定端口,然后就通过此端口传输数据,简单地说就是服务器被动等待客户端连接自己
很多位于防火墙后面的服务器都不支持PASV,因为客户端无法打开防火墙面的FTP服务器的端口,也有很多内网用户不能用PORT模式登录FTP服务器,因为FTP服务器的20端口无法通过防火墙与内部用户建立连接
FTP常用命令:
1、FTP服务器的登陆
ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名
2、显示文件信息:ls/dir
3、下载文件:get 文件名 (下载到当前目录)
4、上传文件:put 文件名 (上传到当前目录)
5、多文件下载:mget
6、多文件上传:mput
7、退出:bye
8、帮助:help
原理:
安装FTP:
因为在Linux中VSFTP(very secure FTP daemon")非常安全文件传输,它本身目标定位在非常安全的基础上,同时具备高速与高性能特点,它的特色如下:
# Virtual users //支持虚拟用户
# Standalone or inetd operation //支持两种方式操作
# Powerful per-user configurability //强大的单用户配置性
# Bandwidth throttling //宽带节流
# Per-source-IP configurability //单个源IP配置
# Per-source-IP limits //单个源IP限制
# IPv6 //支持IPv6
# Encryption support through SSL integration //支持SSL加密
# etc...
我们就选择VSFTP作为FTP服务器
首先挂载光盘:
mount -t iso9660 /dev/cdrom /mnt/cdrom
clip_image002
mount用法:
格式:mount [-参数] [设备名称] [挂载点]
其中常用的参数有:
-a 安装在/etc/fstab文件中类出的所有文件系统
-n 不把安装记录在/etc/mtab 文件中
-r 把文件系统安装为只读
-v 详细显示安装信息
-w 将文件系统安装为可写
ro 以只读方式挂载
rw 以读写方式挂载
remount 重新安装已经安装了的文件系统
-t <文件系统类型> 指定设备的文件系统类型,常见的有:
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT/2000/XP的文件系统
auto 自动检测文件系统
安装VSFTP:
如果以前有安装过VSFTP就不用再装了,如果是用rpm的方式安装的话,可以用如下方式删除再安装:
rpm -qa|grep vsftpd //确定是否有安装过vsftpd
rpm -e vsftpd //删除VSFTP
rpm -ivh /mnt/cdrom/Server/vsftpd-2.0.5-10.el5.i386.rpm //安装VSFTP
clip_image004
启动FTP命令:
1、service vsftpd start
2、/etc/rc.d/init.d/vsftpd start
启动:
service vsftpd start
clip_image006
看到“OK”了没?说明成功启动了,也可以查看运行状确认
查看运行状态:
1、netstat -anp |grep vsftpd //查看VSFTP运行端口和程序
2、ps -qux |grep vsftpd //查看运行进程是否有vsftpd
clip_image008
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 10791/vsftpd
tcp表示运行协议,0.0.0.0:21是本地地址和端口号,0.0.0.0:*是外部地址和端口号,LISTEN是协议状态,表示监听状态,10791/vsftpd表示vsftpd的进程号
既然成功运行了VSFTP服务器,我们就先看看它的运行效果吧
clip_image010
直接连接就可以看到FTP共享的文件,此时默认系统建立了一个叫pub的文件夹,它允许匿名用户的读取
至此这个简单的匿名FTP就建立好了,默认情况下匿名的权限是什么呢?我们上传文件、删除已有文件试试看
clip_image012
上传文件权限被拒绝
clip_image014
删除文件也被拒绝了
如何设置允许匿名用户呢?
把/etc/vsftpd/vsftpd.conf里的匿名选项 anon_upload_enable=YES前面“#”去掉即允许匿名上传文件了,如果允许匿名用户建立文件夹,则把 anon_mkdir_write_enable=YES前面的“#“去掉,也可以加入参数:anon_other_write_enable=YES来 允许匿名用户执行如文件重命名、删除文件等操作,如下:
clip_image016
别忘记重启或重装载才生效啊!
clip_image018
再试试看能不能上传文件
clip_image020
还是不行,看看本地文件夹的权限
clip_image022
呵呵,果然是本地文件夹不允许其它用户写入操作 rwxr-xr-x 3 root root 4096 Jun 2 08:55 .,根文件夹属主、组都是root的,我们修改pub文件夹,允许其它用户上传文件
clip_image024
看到最后一行没,我把pub修改成757(drwxr-xrwx)了
chmod 用法:
chmod XXX文件
×××(所有者组用户其他用户)
×=4 读的权限
×=2 写的权限
×=1 执行的权限
常用修改权限的命令:
 chmod 600 ××× (只有所有者有读和写的权限)
 chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)
chmod 700 ××× (只有所有者有读和写以及执行的权限)
chmod 666 ××× (每个人都有读和写的权限)
chmod 777 ××× (每个人都有读和写以及执行的权限)
再试试能不能上传文件了?
clip_image026
哈哈!上传成功了,不过我是操作pub文件夹的,在ftp下的根目录的安全属性(权限)没有改变,如果在ftp目录下上传文件是不成功的,还是适合安全要求:)
再删除刚才上传的文件试试看:
clip_image028
真该大笑三声哈哈哈,成功了!
开机自启动:
1、chkconfig --level 345 vsftpd on
2、ntsysv
clip_image030
用chkconfig –list |grep vsftpd 查看是否设置成自启动,级别3、4、5都是on说明设置成功
配置文件:
listen=yes|no //是否以独立模式运行vsftp
listen_address=192.168.2.126 //FTP主机的IP地址,如果不设置则默认监听所有IP地址(如果有多个IP的话)
listen_port=21 //FTP主机监听21号端口
write_enable=yes|no //是否允许写操作
ascii_upload_enable=yes|no //是否允许使用ascii模式上传文件
ascii_download_enable=yes|no //是否允许使用ascii模式下载文件
port_enable=yes|no //是否取消port模式
connect_from_port=20 //以port模式进行数据传输时是否使用20端口
ftp_data_port=20 //ftp数据传输时的端口号
data_connection_timeout=300 //数据连接超时时间
accept_timeout=60 //接受连接时超时时间
connect_timeout=60 //响应连接超时时间
idle_session_timeout=300 //用户空闲超时时间
nopriv_user=vsftp //设定服务执行者为vsftp,默认为nobody,推荐使用一个权限低的用户(useradd -g vsftpd -d /dev/null -s /sbin/nologin vsftpd)
max_clients=500 //同时允许500用户登录
max_per_ip=200 //每个IP同时允许200连接
pasv_enable=yes|no //是否启用pasv模式
pasv_promiscuous=yes|no //默认为no,是否关闭pasv模式的安全检查
pasv_min_port=5000
pasv_max_port=6000 //将pasv模式的数据传输端口改在5000-6000之间
tcp_wrappers=yes|no //是否在vsftpd中使用tcp_wrappers远程访问机制。默认为yes
Is_recurse_enable=yes|no //是否允许用户遍历目录(如果开启会影响性能)
pam_service_name=vsftpd //使用pam认证的PAM文件名
userlist_enable=yes|no //是否限制用户访问FTP
userlist_deny=no //userlist_file文件内的用户是否允许访问
userlist_file=/etc/vsftpd/userlist//指出用户列表
chroot_local_user=yes|no //是否开启限制用户根目录功能
chroot_list_enable=yes|no //是否限制具体用户
chroot_list_file=/etc/vsftpd/chroot_list//指出用户列表
dirmessage_enable=yes|no //是否开启切换目录提示信息功能
message_file=.message //开启目录提示功能后,这里就是提示文件内容
ftpd_banner=welcome to here //登录时显示的欢迎语
banner_file=/directory/vsftpd_banner_file //以文件形式显示用户登录时的欢迎语
xferlog_enable=yes|no //是否记录使用者所有上传、下载信息
xferlog_std_format=yes|no //是否使用标准xferlog格式记录
xferlog_file=/var/log/vsftpd.log//将上传、下载记录到/var/log/vsftpd.log
anonymous_enable=yes|no //是否允许匿名用户登录
anon_upload_enable=yes|no //是否允许上传文件(如果是,必须把write_enable设为yes)
anon_mkdir_write_enable=yes|no //是否允许新建目录
anon_other_write_enable=yes|no //是否允许新建目录以外的操作(如删除、重命名)
anon_world_readable_only=yes|no //是否只允许用户下载文档、匿名浏览服务器的文件系统
anon_umask=022 //匿名用户上传文件后的权限
anon_root=/var/ftp //匿名用户登录的根目录
anon_max_rate=30000 //匿名用户下载速率
no_anon_password=yes|no //匿名用户是否需要密码
local_enable=yes|no //是否允许本地用户登录
local_max_rate=500000 //本地用户下载速率
local_root= //本地用户登录根目录(默认为无)
local_umask=033 //本地用户上传文件后的权限
guest_enable=yes|no //是否允许虚拟用户登录
guest_username=ftp //虚拟用户名为ftp(默认)
注意安全相关:
1、/etc/vsftpd/ftpuser里的用户是默认不允许登录服务器的,可以把禁止的用户写入文件内
2、userlist_enable=yes|no
userlist_deny=yes|no
userlist_file=/etc/vsftpd/user_list
如果userlist_enable=yes说明开启禁上某用户登录,如果userlist_deny=yes,说明userlist_file里的用户不能登录,为no时只允许userlist_file里的用户登录,userlist_file说明用户列表的存放位置
推荐使用只允许某用户登录(提高安全性),它是vsftpd自己的安全文件
3、chroot_local_user=yes|no
chroot_list_enable=yes|no
chroot_list_file=/etc/vsftpd/user_list
设置是否允许用户离开家目录,一般设置只有某用户才能离开家目录。chroot_list_enable=yes开启限制用户不能离开家目录,chroot_list_user=yes时,指定的用户可以离开家目录,为no时,指定的用户不能离开家目录
推荐使用只允许某用户可以离开家目录,即:
chroot_list_enable=yes
chroot_local_user=yes
chroot_list_file=/etc/vsftpd/chroot_list
4、使用tcp_wrappers功能:
在/etc/hosts.allow里加入: vsftpd:192.168.2.0/255.255.255.0 202.173.237.26/255.255.255.252:allow
在/etc/hosts.deny里加入: vsftpd:all:deny
只允许上面两段地址登录vsftp服务器
5、把is_recurse设置为no
6、使用pam_service_name=vsftpd,即PAM认证
在使用时正确登录,但却遇到cannot change directory错误,因为是selinux关闭FTP,可以把selinux关闭
7、启用iptalbes规则允许FTP连接端口:
-A RH - Fireware -1 -INPUT -m state --state NEW -m -tcp --dport 21 -j ACCEPT
8、virtual_use_local_privs=yes|no VSFTPD-1.2.0以后的版本添加了此参数,为yes时虚拟用户拥有与本地用户相同的权限,当为no时,虚拟用户拥有与匿名用户相同的权限
(当virtual_use_local_privs=yes,write_enable=yes,虚拟用户具有上传、下载、删除、重命名权限,
而virtual_use_local_privs=no,write_enable=yes,anon_world_readable_only=yes,anon_upload_enable=yes时,虚拟用户只能上传文件
而virtual_use_local_privs=no,write_enable=yes,anon_world_readable_only=no,anon_upload_enable=no时,虚拟用户只能下载文件
而virtual_use_local_privs=no,write_enable=yes,anon_world_readable_only=no,anon_upload_enable=no时,虚拟用户只能上传和下载文件
而virtual_use_local_privs=no,write_enable=yes,anon_world_readable_only=no,anon_mkdir_write_enable=yes时,虚拟用户只能下载和创建文件
而virtual_use_local_privs=no,write_enable=yes,anon_world_readable_only=no,anon_other_write_enable=yes时,虚拟用户只能下载、删除、重命名文件)
生成证书命令:
[root@mail vsftpd]# openssl req -new -x509 -nodes -out /etc/vsftpd/vsftpd.pem -keyout /etc/vsftpd/vsftpd.pem Generating a 1024 bit RSA private key ..............++++++ ........++++++ writing new private key to '/etc/vsftpd/vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:cn    定义国家 State or Province Name (full name) [Berkshire]:guandong               定义省 Locality Name (eg, city) [Newbury]:heyuan   定义城市 Organization Name (eg, company) [My Company Ltd]:xlb 定义组织名称 Organizational Unit Name (eg, section) []:it                 定义单位名称 Common Name (eg, your name or your server's hostname) []:wuzhuangyan  定义公共名称 Email Address []:[email protected]             E-mail地址
简单例子:
利用虚拟账号提供文件下载服务,只允许下载不允许上传
建立虚拟用户对应的实体用户名
clip_image032
修改下载目录的权限
clip_image034
clip_image036
编辑主配置文件
clip_image038
clip_image040
创建虚拟用户
clip_image042
vi /etc/vsftpd/ftp_log
clip_image044
db_load -T -t hash -f /etc/vsftpd/ftp_log /etc/vsftpd/ftp_log.db
clip_image046
vi /etc/pam.d/vsftpd.vu
clip_image048
启动服务器
clip_image050
客户端登录测试
clip_image052
被拒绝了?看看配置文件,有这么一条userlist_deny=no,这条表示只有userlist_file=/etc/vsftpd/user_list列出的用户才能登录,OK,我们试试把test这个虚拟用户添加进去
clip_image054
重启
clip_image056
再登录
clip_image058
clip_image060
这一回OK了吧,哈哈,Maildir是系统用户默认的邮件目录,创建用户的时候自动创建的
上传文件试试
clip_image062
当然不能上传了,文件夹的本地权限为500(没有写入权限),不是吗?还有一个地方限制了
clip_image064
最后一句只有有写入权限时才有效,如果准备允许虚拟用户上传文件,则把/var/ftp/public修改成有写权限,再设置成允许匿名上传即可,如图:
clip_image066
好了,这次到此结束,“配置续”跟着就要出来了,希望大家关注
错误日记:
Could not open location 'ftp://192.168.2.126'Unknow internal error while displaying this location,默认login.db放在/etc/vsftpd目录文件错设置内容也会出错: 如把anon_mkdir_write_enable=yes写成:anon_mkdir_enable=yes,就会出现下面的错误
Can't display localtion 'ftp://[email protected]',Unknow internal error while displaying this location
The folder contents could not be displayed Sorry couldn't display all the contents of 'ftp://192.168.2.126'
总结:对于新手而言经常会犯常见的错误,如:
参数写错,tcp_wrappers=yes却写成tcp_wrapper=yes
idle_session_timeout=30写成idle-session_timeout=30
像我刚才那样忘记创建数据库文件等,数据库文件路径写错
userlist_enable=yes
userlist_deny=no
userlist_file=/etc/vsftpd/user_list
userlist_deny=no时,就是只允许userlist_file=/etc/vsftpd/user_list指定的用户登录(能提高安全必),但有时候会忘了把用户写进去,就登录不上FTP服务器了
有时候本地权限限制用户写入文件,那么用FTP登录的时候是不可能上传的(除非你是神)
为提高安全性可以启用SSL支持,下篇做示范
适当使用tcp_wrappers来限制登录来源地址



标签: VSFTPD实战

发表评论:

Powered by emlog sitemap