免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4826 | 回复: 1
打印 上一主题 下一主题

[FTP] CygWin+ OpenSSH + Pure-Ftp【原创】申请加精 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-02 10:57 |只看该作者 |倒序浏览
可以任意转载,转载请注明出处:

http://blog.muduo.net/blog.php?job=art&articleid=a_20041201_131804

目前大部分windows的服务器都是通过server-u来作ftp服务器,而近一年来server-u狂出数十个漏洞,实在是让我们这些使用windows系统做服务器的管理员感到心惊胆战,没准哪一天自己的server-u就被搞掉了.通过研究cygwin,完成了cygwin+openssh+Pureftp打包工作,希望尽可能的给管理员们提供一个简单便捷且安全可靠的方案.

在操作这项工程的过程中,我感觉pure-ftp到cygwin的移植是最困难的,首先pure-ftp的core Team并不推荐在windows上运行pure-ftp,因而,关于cygwin下使用pure-ftp的资料也就自然少的可怜了。不过,幸运的是pure-ftp的移植性并不差!

OK,下面我来说说具体的过程:我将从安装cygwin开始这个工程:
1,最小化安装cygwin,并安装openssh所需要的安装包。由于,我们期望的pure-ftp以windows服务的方式运行,所以,这里面我们需要安装cygrunsrv.exe。首先在cygwin选择安装包的界面中,all->;uninstall,OK,这样所有的程序包默认都不会安装;然后选择我们需要的包:(见图1)
我们需要的包有:Admin、Base、Net->;Openssh、Net->;Openssl这样,然后点击下一步。
这样我们就安装好了一个基本的cygwin系统,并且,包含了pure-ftp(TLS)需要的openssl包,我们还将在后面使用openssl来进行windows的远程管理。

2,编译pure-ftp。我是在另外一个cygwin的环境中编译它的,因为我想这样编译后直接移至1中我安装的cygwin环境中就可以了,而不是让1这个环境也有gcc。
在pure-ftp的文档(README.Windows)中还是提了一些关于在cygwin上编译pure-ftp:
{ { {  ------------------------ COMPILATION ENVIRONMENT ------------------------


The Win32 version of Pure-FTPd has been configured with the following
command-line, using the Cygnus Win32 environment:

env CFLAGS="-O2 -march=pentium -pipe" LDFLAGS="-static -s" \
./configure --with-everything --with-brokenrealpath \
               --without-shadow  --with-nonroot --with-tls \
               --with-probe-random-dev --without-ascii
               
All these switches (except --with-everything and --with-tls) are highly
recommended to compile Pure-FTPd on Windows.               

Needed packages are: base, gcc (+ dependencies), make and the crypt
library. All of these can be installed with the standard Cygwin32
installer (http://www.cygwin.com/) .
} } }
这里,我是用的是:
ster@chunshengster ~
$ ./configure --prefix=/usr/local/pureftp --with-everything --with-brokenrealpath --without-shadow  --with-nonroot --with-tls -with-probe-random-dev --without-ascii
这个也是文档中需要的的最小的限制,如果你想有其他的设置,可用通过:./configure --helpl来查看选项。

接下来运行:make && make install && make clean
少待一会儿,就可以发现在cygwin的目录下的/usr/local/多了一个pureftp的目录,这就是我们编译好的了pure-ftp

3,配置pure-ftp实现TLS
现在,要实现在cygwin上运行pure-ftp是相当容易的,熟悉linux或者用过cygwin的人都会知道,这一节主要提一下pure-ftp的配置。
pure-ftp的配置是很简单的,只需要一个用户数据库(因为这里我们使用puredb,puredb是pure-ftp自带的虚拟用户数据库,类似于server-u的虚拟用户)所有的配置都是这里面配置的。
配置pure-ftp用户使用这个命令,如果你使用上面我们编译的包的话,路径是/usr/local/pureftp/bin/pure-pw.exe

{ { {
$ /usr/local/pureftp/bin/pure-pw.exe

Usage :

pure-pw useradd <login>; [-f <passwd file>;] -u <uid>; [-g <gid>;]
               -D/-d <home directory>; [-c <gecos>;]
               [-t <download bandwidth>;] [-T <upload bandwidth>;]
               [-n <max number of files>;] [-N <max Mbytes>;]
               [-q <upload ratio>;] [-Q <download ratio>;]
               [-r <allow client ip>;/<mask>;] [-R <deny client ip>;/<mask>;]
               [-i <allow local ip>;/<mask>;] [-I <deny local ip>;/<mask>;]
               [-y <max number of concurrent sessions>;]
               [-z <hhmm>;-<hhmm>;] [-m]

pure-pw usermod <login>; -f <passwd file>; -u <uid>; [-g <gid>;]
               -D/-d <home directory>; -[c <gecos>;]
               [-t <download bandwidth>;] [-T <upload bandwidth>;]
               [-n <max number of files>;] [-N <max Mbytes>;]
               [-q <upload ratio>;] [-Q <download ratio>;]
               [-r <allow client ip>;/<mask>;] [-R <deny client ip>;/<mask>;]
               [-i <allow local ip>;/<mask>;] [-I <deny local ip>;/<mask>;]
               [-y <max number of concurrent sessions>;]
               [-z <hhmm>;-<hhmm>;] [-m]

pure-pw userdel <login>; [-f <passwd file>;] [-m]

pure-pw passwd  <login>; [-f <passwd file>;] [-m]

pure-pw show    <login>; [-f <passwd file>;]

pure-pw mkdb    [<puredb database file>; [-f <passwd file>;]]

pure-pw list    [-f <passwd file>;]

-d <home directory>; : chroot user (recommended)
-D <home directory>; : don't chroot user
-<option>; '' : set this option to unlimited
-m : also update the /usr/local/pureftp/etc/pureftpd.pdb database
For a 1:10 ratio, use -q 1 -Q 10
To allow access only between 9 am and 6 pm, use -z 0900-1800

} } }

这里我们只使用简单的设置来验证其功能:

{ { {
admin@VHOST-W2K01 /bin$ pure-pw useradd upload -f /etc/pureftp.pw -d /cygdrive/c/upload -m
Password:
Enter it again:

} } }
上面的命令的意思是增加一个 upload的用户,将用户增加到/etc/pureftp.pw文件中,upload用户的的根目录是/cygdrive/c/upload,pureftp.pw文件是一个类似linux系统中的passwd的文件。
光有这个pw的文件还不可以,因为pure-ftp运行中需要的是一个为puredb的文件,为此,我们使用pure-pw.exe生成一个:{ { { /usr/local/pureftp/bin/pure-pw.exe mkdb /etc/pureftp.pdb -f /etc/pureftp.pw } } }
有了用户数据库,我们就可以启动pure-ftp了。
在cygwin的控制台中执行:{ { { /usr/local/pureftp/sbin/pure-ftpd.exe -lpuredb:/etc/pureftp.pdb & } } }
OK,现在我们要实现TLS了,关于pure-ftp的TLS,在pure-ftp的文档中有(README.TLS),或者到pure-ftp的网站上看(国内可能需要代理服务器才能上),在我的blog里面保存了一份(http://blog.muduo.net/blog.php?job=art&articleid=a_20041130_153506);
在README.TLS中是这样描述的:
{ { {
To create a self-signed certificate, you can use the following commands :

mkdir -p /etc/ssl/private

openssl req -x509 -nodes -newkey rsa:1024 -keyout \
/etc/ssl/private/pure-ftpd.pem \
-out /etc/ssl/private/pure-ftpd.pem

chmod 600 /etc/ssl/private/*.pem
} } }
好的,我们按照它的要求,生成了pure-ftpd.pem,我们依旧在控制台中启动pure-ftp服务
{ { { /usr/local/puerftp/sbin/pure-ftpd.exe -lpuredb:/etc/pureftp.pdb -Y 2 } } }
-Y参数是用来控制TLS的,关于这个参数pure-ftp的文档中有这样的描述:
{ { {
     -Y tls behavior
    -Y 0 (default) disables SSL/TLS security mechanisms.
    -Y 1 Accept both normal sessions and SSL/TLS ones.
    -Y 2 refuses connectionsthat  aren't  using  SSL/TLS  security
    mechanisms, including anonymous ones.
    The  server  musthave been compiled with SSL/TLS support and a
    valid certificate must be in place to accept encrypted sessions. } } }


4,cygwin+pure-ftp实现windows服务启动
这个要求个人感觉是花费时间最多的,尝试了很多次,后来,通过调试其程序代码才最终解决。这里我们暂且不谈解决的过程,感兴趣的同事可以跟我联系
cygwin提供了一个 叫cygrunsrv.exe的东东可以帮忙,现在我们先来看看这个工具的手册页:
值得注意的有下面几点:
{ { {
-I, --install <svc_name>;  Installes a new service named <svc_name>;.
-p, --path <app_path>;     Application path which is run as a service.
-a, --args <args>;         Optional string with command line options which
                          is given to the service application on startup.
-t, --type [auto|manual]  Optional start type of service. Defaults to `auto'.
} } }

这个已经足够了,我们需要的是把pure-ftp做成自动启动的windows服务,以后即使重启机器,pure-ftp的服务都是自动启动的,减轻管理员的负担。
OK,我们试着在控制台输入下面的命令:
{ { {
admin@VHOST-W2K01 ~$ cygrunsrv.exe -I pureftpd -p /usr/local/pureftp/sbin/pure-ftpd.exe -a "-lpuredb:/usr/local/etc/pureftp.pdb -Y 2" -t auto
} } }
好了,如果前面的操作步骤都正确的话,现在你已经可以通过启动windos服务来启动pure-ftp服务了,打开window的“服务”控制台,找到"pureftpd"右键点击,然后“启动”。
现在可以了么?这个项目之所以停滞了2天时间也正是出现在这!
你可以通过ftp的客户端来尝试登陆,一定是不成功的 :)
是什么问题呢?通过调试其代码告诉我,是文件权限的问题,确切的说是我们前面建立的pureftp.pdb 及pureftp.pw文件的权限读取问题。插一句windows的服务是以system的权限启动的(默认),而通过pure-pw建立的两个数据库文件的权限是这样的:
{ { {
admin@VHOST-W2K01 /usr/local/etc$ ls -l
total 4
-rwx------+   1 sinaadmi None         2189 Nov 30 12:15 pureftp.pdb
-rw-------+   1 sinaadmi None          113 Nov 30 12:13 pureftppw
} } }
看出玄机来了么?
现在我们通过windows的文件属性工具给这两个文件增加system可读属性。差点忘记了,还有另外一个文件就是openssl生成的pem证书文件,在/etc/ssl/private/pure-ftpd.pem,给它也增加system权限。OK,让我们来体验一下cygwin+pure-ftp+OpenSSL吧。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-12-02 14:08 |只看该作者

CygWin+ OpenSSH + Pure-Ftp【原创】申请加精

不错,看弄一个Linux下的Pureftpd+openssh那就更好了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP