windows下filezilla server安装配置及安全加固

以  FileZilla_Server-0_9_41.exe 为例

1  安装
FileZilla_Server-0_9_41.exe

2  从开始菜单里停止Filezilla_server服务

3  到安装目录里改名备份(或直接删掉)文件 FileZilla server.exe
典型位置: "C:\Program Files (x86)\FileZilla Server" (64位机器上) 或 "C:\Program Files\FileZilla Server" (32位机器上)

4  从默认ansi编码的filezilla server补丁包里压缩出 FileZilla server.exe ,拷到如上安装目录里。

5  创建一个独立的windows用户、一个windows用户组,用于运行ftp服务,用户名为webftp
(默认情况下,windows服务以SYSTEM用户运行,几乎等同于管理员;这是重大安全隐藏,如果该服务有漏洞并被恶意利用,后果...)

6  到windows服务列表中,双击 "FileZilla Server FTP server",打开服务属性窗口 - 登录
“登录身份” - 选择 “此账户” - 浏览 - 选择到刚建立的独立用户webftp
回到“服务恢属性”窗口,输入账号密码,“应用”或“确定”

6  启动服务(从开始菜单或服务列表皆可),观察windows任务管理器中,进程"FileZilla server.exe" 的用户名是否是 webftp

7  修改将filezilla server安装目录权限:webftp用户有读取权限
只保留 SYSTEM, webftp, Administrators 三个用户的权限,其它删掉

修改安装目录中的 文件  "FileZilla Server.xml", "FileZilla Server Interface.xml" 权限,为webftp用户赋写入权限

8  windows默认对每个硬盘分区设置了较多权限,只保留administrator,system,users,其它删除(通常Users也可以删除)
(否则,权限极低的webftp用户将可以在相应目录的读取甚至写入的权限;或许是因为everyone用户的存在)

8  windows了防火墙,添加一条规则,按程序的规则添加规则(非按端口):allow_filezilla-server_in
新建入站规则- 规则类型:程序(P) - 此程序路径 - 浏览到 FileZilla server.exe - 允许连接

------------------------------------
* 关于ftp目录的权限设置
对于需要通过ftp管理(包括读取或删除写入等)的所有目录(文件)
检查是否有不该买有的权限,最好是严格按照“最低权限”原则进行设置。
对这些目录(文件),根据需要,赋给ftp用户权限,至少需要一个读取权限。
如果不需要通过ftp删除的文件(夹),可以不赋修改写入权限

ftp目录文件名乱码/使用原始ftp命令解决

对乱码的客户端,直接向服务器端发送原始的FTP命令:

opts utf8 off

对于flashFXT,可以按

菜单 - 命令 - 原始命令

输入

opts utf8 off

回车(或点确定)

再刷新服务端的目录列表,即正常显示

如果不行,可以试试发送ftp原始命令 opts utf8 on

原因解析:

按RFC 2610规定的方式,默认使用UTF-8。而某些服务器和客户端并不用此标准。即,server和client对话时,FTP服务器直接使用UTF-8发送数据,除非对方大喊一声opts  utf8 off ;而一些ftp产品则数默认使用本地编码对话,除非对方说一声opts  utf8 on 。所以,当服务器端与客户端不统一时,就出现了一个讲UTF8,一个用本地编码,就出现了乱码。

借用php脚本快速实现php站点数据迁移

一个朋友的网站,换web服务器,要我帮忙。朋友的网站原本在我的虚拟主机空间上,但嫌网通访问速度慢,自己买了个比较快一点的。要换的也还是虚拟主机,而且是超简单的那种,只有一个基于web的简单后台,文件管理都很不完善,连zip压缩解压缩的功能没有,也没有直接下载远程文件并解压的功能,更不用说ssh了。对于这样的虚拟主机最怕就是ftp服务器再有问题。

然而最怕的事情还是来了。

经常在虚拟主机上见到微软的msftp,那个烂啊,都没有可以形容的词了。上传或下载文件的过程中,会莫名其妙的连接中断,要重新连接,而且更可恶的是服务器在断开连接时,连个消息都不给,直接断掉了,ftp客户端还在等待服务器上回应,结果是超时,然后客户端才知道是连接断掉了。有时在上传或者下载一个队列时,上传了一个文件,在进行下一个时,提示消息“传输失败”,然后客户会跳过进行再下一下,再下一个......当然也传问是失败。这个最令人无法忍受的事情,只能强制断开ftp客户端,再重新传输队列。十分的没有效率,而且影响心情。这次的问题跟这个类似,但似乎这个服务器不是windows的,它使用的ftp服务器消息中声称是ProFTPD,看来应该是linux,而虚拟主机服务器的管理员能把linux也搞成这样,实在对不起linux. 以前还从来没有见过配置得这么烂的linux + ftpd!

然而骂归骂,事情还是得做。这次迁移的其实一个很小的网站,只有一千多个文件,跟一个mysql数据库。使用filezilla传输,已经设置文件覆盖规则,以免传输一半被服务器单方面断开、而导致文件重传时的“文件覆盖提醒”。但还是实在无法忍受,传了半个小时才传上了200多个文件,失败的队列文件数目已经涨到300多个,看来照这样的速度,要传不知道多久了,还得多次重置失败队列。于 是想需要用另外的方法来实现,而不能使用ftp了。最简单的php,它本身有文件管理的功能,网上有很多基于php的文件管理工具,下载了几个试用,要么功能太差,没有zip功能,或者文件太多,比朋友的这个小网站文件还多。 因为之前搞过一次php写的zip文件解压缩脚本,不过是使用别人写的。而php本身有从外部站点上下载文件的功能,像fopen, file_get_contents等函数都可以很容易实现。那与其找php文件管理工具,还不如写个简单的程序在目标主机上运行。程序非常简单:

<?php
$foo=__FILE__;
$bar=pathinfo($foo);
$file_path=$bar['dirname'].'/xxx.zip';
$data=file_get_contents("http://xxx.path8.net/xxx/xxx.zip");
$foo=file_put_contents($file_path,$data);
var_dump($foo);
?>

我的虚拟主机好歹有个ssh,可以很方便的压缩所有文件,并通过http访问。上面这段php脚本就可以实现从我的网站上通过http访问,并把整站的压缩文件下载到目标主机上(这里要注意目标主机上不否有写入权限,可以把目录设置777,迁移完成后再改回去)。然后,再使用一个zip解压工具,当然也要是php脚本编写的,网上有这个一个,有简单的页面设计,还比较直观,使用也较简单(附于本文后)。把这个工具也传到目标主机上,跟整站zip压缩包放在同一目录下,使用它解压缩zip,非常快,几秒钟就完成了,如果是使用ftp传输,那真不知道还要几个小时才能完成。

基于php的zip文件解压缩工具: unzip.php