您的位置:首页 > 编程语言 > PHP开发

RHEL5系统配置vsftpd以及启用加密传输

2009-03-09 20:04 253 查看
【数据资料来自互联网,个人收集总结



1、软件下载安装
vsftpd的官方网站: http://vsftpd.beasts.org/
下载当前最新版本: ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.1.0.tar.gz
RHEL5可能在安装的时候自带了一个vsftpd版本,采用rpm格式安装。我的RHEL5安装时候比较精简,所以没有rpm安装的vsftpd。下载的源码包版本比较新,安全性能肯定要好一些,因此这里就讨论使用源码包安装的情况。

2、安装
[root@pps vsftpd-2.1.0]# tar zxf vsftpd-2.1.0.tar.gz
[root@pps vsftpd-2.1.0]# cd vsftpd-2.1.0
[root@pps vsftpd-2.1.0]# make
[root@pps vsftpd-2.1.0]# make install
一般来说都可以make成功,如果不成功根据相应的出错信息来找解决办法。如果在make install 阶段出问题,比如我的出错:
install: 无法创建一般文件“/usr/local/man/man8/vsftpd.8”: 没有那个文件或目录
install: 无法创建一般文件“/usr/local/man/man5/vsftpd.conf.5”: 没有那个文件或目录
make: *** [install] 错误 1
我就先来到 /usr/local/man/ 目录,发现没有 man8 和 man5 目录,自己建立就OK了
[root@pps man]# mkdir man8 man5
然后回到 make 目录再执行一次 make install 即可。
以下是完整的 make install 信息:
[root@pps vsftpd-2.1.0]# make install
if [ -x /usr/local/sbin ]; then \
install -m 755 vsftpd /usr/local/sbin/vsftpd; \
else \
install -m 755 vsftpd /usr/sbin/vsftpd; fi
if [ -x /usr/local/man ]; then \
install -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \
install -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \
elif [ -x /usr/share/man ]; then \
install -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \
install -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \
else \
install -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \
install -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
if [ -x /etc/xinetd.d ]; then \
install -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
可见 vsftpd 安装在 /usr/local/sbin/ 目录下,但是,make install 只是安装了二进制的 vsftpd 可执行文件和man手册,没有配置文件!
我来到源码目录下找到 vsftpd.conf 配置文件,并复制到 /etc 位置
[root@pps vsftpd-2.1.0]# cp vsftpd.conf /etc

3、配置vsftpd
我要求的权限如下:
1)允许匿名登录,但是匿名登录用户只可以访问某一位置的文件共享,而且只能读取
2)允许Linux系统用户登录,不同的用户登录,只可以访问各自的目录,可以读写
具体来说如下:
我的系统有 zhaozh hoho 两个用户,ftp登录后分别能访问各自主目录下myftp_root的内容
zhaozh 登录后根目录在 /home/zhaozh/myftp_root ,能读写
hoho 登录后根目录在 /home/hoho/myftp_root ,能读写
匿名用户登录后根目录在 /var/ftp/anonymous ,只读

下面是我的 /etc/vsftpd.conf 文件配置内容:
#这些都比较简单易懂
#---------------------------------------
anonymous_enable=YES // 允许匿名用户
local_enable=YES // 本地用户可以使用
write_enable=YES // 允许全局可写
local_umask=022 // 用户上传档案权限的掩码
dirmessage_enable=YES // 告诉用户他们当前进入的目录
xferlog_enable=YES // 启用传输日志
connect_from_port_20=YES // 20端口传输数据
xferlog_file=/var/log/vsftpd.log // 传输日志文件
idle_session_timeout=600 // 客户端空闲600秒就断开连接
data_connection_timeout=120 // 数据传输连接超时时间120秒
nopriv_user=ftp // 匿名用户登录具有ftp用户权限
ftpd_banner=Welcome to HoHo's FTP service. // 欢迎信息
listen=YES // Standalone 模式
#下面这几项配置是重点
#---------------------------------------
chroot_local_user=YES
// 默认设置每个登录的用户都chroot,此时
// chroot_list_enable 如果是YES的话,
// chroot_list_file=/etc/vsftpd.chroot_list
// 里面的用户是不用chroot的。

anon_root=/var/ftp/anonymous
// 这里是我设置的匿名用户登录后的根目录
user_config_dir=/etc/vsftpd_user_conf
// 这里是每个用户登陆后的各自配置文件的地址
// 比如我用hoho用户登录就找这个目录下的 hoho 同名文件
// 【注意】这是实现改变各用户根目录的必要配置
#---------------------------------------

上面配置指示的目录如果不存在,则需要建立它们。
[root@pps ~]# mkdir -p /var/ftp/anonymous
[root@pps ~]# mkdir -p /etc/vsftpd_user_conf
然后在 /etc/vsftpd_user_conf 目录下建立 hoho zhaozh 两个文件,内容如下:
[root@pps ~]# cat /etc/vsftpd_user_conf/hoho
local_root=/home/hoho/myftp_root //改变用户hoho登录后的ftp根目录
[root@pps ~]# cat /etc/vsftpd_user_conf/zhaozh
local_root=/home/zhaozh/myftp_root //改变用户zhaozh登录后的ftp根目录

【注意】要为anonymous用户也建立一个名字为ftp的配置文件(空文件即可),否则匿名登录时报找不到ftp配置文件错误。因为我们上面设置了nopriv_user=ftp。匿名登录用户,vsftpd会启动一个进程用户为ftp的vsftpd进程来处理匿名用户请求。
[root@pps anonymous]# touch /etc/vsftpd_user_conf/ftp
各个ftp目录的位置以及权限如下:
[root@pps ~]# ls -ld /home/zhaozh/myftp_root/
drwxr-xr-x 2 zhaozh zhaozh 4096 03-09 15:19 /home/zhaozh/myftp_root/
[root@pps ~]# ls -ld /home/hoho/myftp_root/
drwxr-xr-x 2 hoho hoho 4096 03-09 15:10 /home/hoho/myftp_root/
[root@pps ~]# ls -ld /var/ftp/anonymous/
drwxr-xr-x 2 root root 4096 03-09 14:02 /var/ftp/anonymous/
【注意】这里的用户主说root,因此即使设置了匿名用户可以上传文件,实际还是不可以的,因为匿名用户具有ftp用户权限,在这里只有读取和执行权限罢了。
【注意】如果用 passwd -l user 那么 user 将不能通过ftp登录。

4、防火墙设置
开通外界访问21端口即可(20数据端口不需要开通)

5、启动vsftpd
[root@pps ~]# vsftpd &
查看是否真的在监听21端口了
[root@pps anonymous]# netstat -an |grep ":21 "
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
6、在Windows下用ftp客户端软件连接测试
分别使用 anonymous hoho zhaozh 用户分别登录,测试读写权限。
【注意】更详细的vsftpd.conf配置介绍可以man vsftpd.conf

上面的配置我没有参考网络上的文档,都是man着办的。弄完基本的ftp服务器搭建后,再网上搜索一下vsftpd的详细配置,感觉以下这篇文章还不错(自己没有看,但感觉不错):
http://hi.baidu.com/xootus/blog/item/5247b0248329d66734a80fbe.html

########################################
SSL-FTP 加密传输
########################################
参考文章:
http://www.chinaznet.com/read.php?206
http://blog.chinaunix.net/u/6098/showart_194375.html

1、生成密钥和证书
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout server.key -out server.crt
根据提示输入相关信息即可生成 server.key 密钥和 server.crt 证书

2、将密钥和证书加在一起生成vsftpd需要的pem文件
# cat server.key > /etc/vsftpd/server.pem
# cat server.crt >> /etc/vsftpd/server.pem

3、配置SSL
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/server.pem
这里只强制本地用户使用SSL登录,没有强制匿名用户使用SSL登录。

4、重启vsftpd
如果没有出错的话,那么就可以测试用户SSL连接了。

--------------------------------------------------------------------------------
【出错】500 OOPS: SSL: ssl_enable is set but SSL support not compiled in
明白到自己没有在编译的时候把ssl功能编译进来,于是重新配置编译
(1)修改 builddefs.h
把 #undef VSF_BUILD_SSL 修改为 #define VSF_BUILD_SSL
(2)重新编译vsftpd出错,又发现自己没有ssl的库和相关头文件,找相关安装包。
openssl-devel-0.9.8b-8.3.el5.i386.rpm
krb5-devel-1.5-17.i386.rpm
e2fsprogs-devel-1.39-8.el5.i386.rpm
(3)安装好后重新make就可以生成vsftpd了。

【新问题】522 SSL connection failed; session reuse required
当我用FileZilla(3.0.9.2)启用显式SSL连接服务器时候,在LIST命令时出现上述错误。
折腾了很久才解决,在 vsftpd.conf 里添加以下配置即可:
require_ssl_reuse=NO
参考资料;
http://www.linuxquestions.org/questions/linux-software-2/vsftpd-ssl-passive-listing-problem-262063/
这里说添加 pasv_address=static ip 就可用,可是我尝试失败,我是这样添加的:
pasv_address=192.168.32.50
不行~
后来,想到要升级FileZilla,升级到 3.2.2.1 版本,问题不复存在!!!
郁闷~折腾了几个小时!(只能在这里抱怨一下了)
------------------
主动模式与被动模式
------------------
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP server。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
下面介绍一个这两种方式的工作原理:
Standard模式FTP:客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式:在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

更详细的介绍:
]http://blog.sina.com.cn/s/blog_443edf6101009fto.html


------------------------------------------------------------------------------------------
[b]赵小蜗牛

QQ: 755721501
E-mail: snailwarrior@qq.com
在不断奉献中谋求生存发展、打造自己的优秀人品,用人性最本质最动人的一面“营销”自己![/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息