Chinaunix首页 | 论坛 | 博客
  • 博客访问: 585963
  • 博文数量: 151
  • 博客积分: 3330
  • 博客等级: 中校
  • 技术积分: 1686
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-08 02:41
文章存档

2011年(151)

分类: LINUX

2011-05-15 15:16:54

RHEL6.0+VSFTPD 2.3.4

FTP 原理:

FTP服务器的传输模式:

主动模式:由服务器主动连接客户端建立数据链路
被动模式:FTP服务器等待客户端建立数据链路

FTP服务器的运行模式:
standalone 和 xinetd 模式

FTP使用的端口:
21端口用于与客户端建立命令链路
在主动模式下,服务器使用20端口向客户端建立数据链路
在被动模式下,服务器开启一个大于1024号端口等待客户端建立数据链路

FTP服务器的三类用户
匿名用户:使用公共的用户帐号进行登录
本地用户:使用Linux 系统帐号,每个用户都有自己的宿主目录
虚拟用户:使用独立的文件保存虚拟帐号,安全性较好,可替代本地用户


binary 用于传输二进制文件,ascii用于传输文本文件
mget,mput用于一次下载或上传多个文件,lcd用于切换目录

vsftpd.ftpusers 用于保存不允许进行登录FTP的本地帐号


vsftpd.user_list 文件的作用

禁止vsftpd.user_list文件中的用户登录
userlist_enable=YES
userlist_deny=YES
userlist_file=/usr/local/vsftpd/vsftpd.user_list

允许vsftpd.user_list文件中的用户登录
userlist_enable=YES
userlist_deny=NO
userlist_file=/usr/local/vsftpd/vsftpd.user_list


anon_other_write_enable=YES
允许匿名用户删除、重命名文件和文件夹的权限

anon_world_readable_only=YES|NO
控制是否只允许匿名用户下载可阅读文档。YES,只允许匿名用户下载可阅读的文件。NO,允许匿
名用户浏览整个服务器的文件系统。默认值为YES

匿名用户的上传文件的掩码
anon_umask=022

设置匿名用户的登录目录
anon_root=/var/ftp/

匿名用户:
anonymous
ftp

所有匿名用户登录到相同的目录
/var/ftp

本地用户登录到FTP服务器后,目录为用户的宿主目录
也可以设置登录到其他目录

可以设置本地用户只能登录到自己的宿主目录
chroot_local_user=YES ,此设置将限制所有本地用户只能登录到自己的家目录

对单个用户的设置:
chroot_local_user=NO //关闭本地用户chroot
chroot_list_enable=YES //开启要设置chroot用户项
chroot_list_file=/etc/vsftpd.chroot_list //指定要设置chroot的特定用户文件,这个文件的格式应该每个用户名占用一行


1.设置匿名用户上传
anonymous_enable=YES
anon_upload_enable=YES
还需设置/var/ftp/pub 目录的 other 设置写权限

2.设置匿名用户下载 (此选项作用极为重要)
默认文件权限是666,目录权限是777
anon_umask=022

3.设置匿名用户建立文件夹权限
默认情况下,ftp的根目录为/var/ftp,为了安全,这个目录默认不允许设置为777权限,否则ftp将无法访问。
anonymous_enable=YES
anon_mkdir_write_enable=YES
此设置只允许匿名用户建立文件夹,但是不能命名文件夹,

4.建立FTP登录欢迎消息
ftpd_banner=Welcom to vsFTP server.

5.进入目录的欢迎性文字
dirmessage_enable=YES
message_file=/path/to/dir/.welcome

6.

建立vsftpd虚拟用户的步骤

1> 建立虚拟用户的口令文件
  vuser.txt   
  格式如下:
user01
password01
user02
password02
user03
password03

2> 生成vsftpd认证文件
   db_load -T -t hash -f vuser.txt /etv/vsftpd/vsftpd_login.db

3> 设置认证文件只对用户可读可写
   chmod 600 /etc/vsftpd/vsftpd_login.db

4> 建立虚拟用户所需的pam配置文件
手工建立vsftpd.vu
vim /etc/pam.d/vsftpd.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

5> 建立虚拟户访问的目录并设置权限
   useradd -d /home/ftpvuser ftpuser
   chmod 700 /home/ftpuser
  此帐号为虚拟用户映射到的本地系统帐号

6> 在配置文件vsftpd.conf中添加虚拟用户的配置内容
guest_enable=YES (启动vsftp支持虚拟用户)
guest_username=ftpuser (虚拟用户所映射的系统用户)
pam_service_name=vsftpd.vu (虚拟用户认证的文件)

user_config_dir=/usr/local/vsftpd (可以指定不同的虚拟用户具有不同的权限,目录里面存放虚拟用户的权限配置文件,文件名为虚拟用户名)

vsftpd 其他相关设置

限制链接数,以及每个IP最大的链接数
修改配置文件中,例如vsftp最大支持链接数100个,每个IP能支持5个链接:
max_client=50
max_per=5

限制传输速度
修改配置文件中,例如让匿名用户和vsftd上的用户(即虚拟用户)都以80KB=1024*80=81920的速度下载
anon_max_rate=81920
local_max_rate=81920

绑定某个IP到vsFTPd,监听端口
listen_address=192.168.1.254
listen_port=21

设置虚拟用户和本地用户具有相同的权限
virtual_use_local_privs=YES

设置服务器被动模式
Pasv_enable=yes
pasv_min_port=30000 //建立资料联机所可以使用port 范围的上界,0表示任意。默认值为0。
pasv_max_port=30999 //建立资料联机所可以使用port 范围的下界,0表示任意。默认值为0。

log_ftp_protocol=YES
(当此选项激活后,所有的FTP请求和响应都被记录到日志中。提供此选项时,xferlog_std_format不能被激活。)

hide_ids=YES(如果启动这项功能,所有档案的拥有者与群组都为ftp,防止泄露用户信息)




今天在做vsftpd 虚拟帐号登录的时候,总是出现530 Login incorrect,查了很错资料终于找到原因
哥今天是用源代码编译的vsftpd,在安装之前pam-devel 没有安装,导致在用虚拟帐号登录vsftpd时候总出错。
后来安装pam-devel之后,又重新编译安装一遍vsftpd ,就可以正常使用虚拟帐号登录vsftpd。
查看vsftpd是否有正常加载libpam.so.0 这个库文件:
ldd /usr/local/vsftpd/sbin/vsftpd


vsftpd+openssl
1.首先检查vsftpd是否支持openssl
ldd /usr/local/sbin/vsftpd

若出现如上,则表示vsftpd支持openssl 加密
否则要重新编译vsftpd,重新编译时,确保已经安装openssl
并且在vsftpd源代码目录中,修改builddefs.sh,如下:
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H

#define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */

然后 make && make install 

1.生成证书
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem


2.修改vsftpd.conf 添加如下:
ssl_enable=YES 
 allow_anon_ssl=NO
 force_local_data_ssl=NO 
 force_local_logins_ssl=NO 
 ssl_tlsv1=YES 
 ssl_sslv2=NO 
 ssl_sslv3=NO
 rsa_cert_file=/etc/vsftpd/vsftpd.pem

3.若采用本地系统用户认证还需要做以下两步:
1> 在vsftpd.conf文件中添加如下
     pam_service_name=vsftpd.pam (采用pam来进行登录验证),vsftpd.pam 文件从vsftpd的源代码目录中的RedHat目录拷贝到/etc/pam.d/目录中
若没有做此步骤,在登录验证的时候会出现如下提示:
                                  //[R] USER kevin
                                  //[R] 331 Please specify the password.
                                  //[R] PASS (hidden)
                                  //[R] 530 Login incorrect.
                                  //[R] 连接失败


2.从新启动vsftpd 服务,登录,正确配置登录后会有如下日志产生:
  1. [00:25:11] SmartFTP v4.0.1180.0
  2. [00:25:11] 正解析主机名“192.168.1.1”
  3. [00:25:11] 正连接到 192.168.1.1,端口:21
  4. [00:25:11] 已连接到 192.168.1.1。
  5. [00:25:12] 220 (vsFTPd 2.3.4)
  6. [00:25:12] AUTH TLS
  7. [00:25:12] 234 Proceed with negotiation.
  8. [00:25:12] SSL:服务器正在请求客户端证书。
  9. [00:25:12] TLS 1.0 加密会话已建立。
  10. [00:25:12] 密钥交换:1024 位 RSA
  11. [00:25:12] 会话密钥:168 位 3DES
  12. [00:25:12] 命令通道保护设置为 加密。
  13. [00:25:12] PBSZ 0
  14. [00:25:12] 200 PBSZ set to 0.
  15. [00:25:12] USER tempuser
  16. [00:25:12] 331 Please specify the password.
  17. [00:25:12] PASS (隐藏)
  18. [00:25:13] 230 Login successful.
  19. [00:25:13] SYST
  20. [00:25:13] 215 UNIX Type: L8
  21. [00:25:13] 已检测到服务器类型:UNIX
  22. [00:25:13] RTT: 165.339 ms
  23. [00:25:13] FEAT
  24. [00:25:13] 211-Features:
  25. [00:25:13] AUTH SSL
  26. [00:25:13] AUTH TLS
  27. [00:25:13] EPRT
  28. [00:25:13] EPSV
  29. [00:25:13] MDTM
  30. [00:25:13] PASV
  31. [00:25:13] PBSZ
  32. [00:25:13] PROT
  33. [00:25:13] REST STREAM
  34. [00:25:13] SIZE
  35. [00:25:13] TVFS
  36. [00:25:13] UTF8
  37. [00:25:13] 211 End
  38. [00:25:13] OPTS UTF8 ON
  39. [00:25:13] 200 Always in UTF8 mode.
  40. [00:25:13] PWD
  41. [00:25:14] 257 "/"
  42. [00:25:14] TYPE A
  43. [00:25:14] 200 Switching to ASCII mode.
  44. [00:25:14] PROT P
  45. [00:25:14] 200 PROT now Private.
  46. [00:25:14] PASV
  47. [00:25:14] 227 Entering Passive Mode (192,168,1,1,54,126).
  48. [00:25:14] 正在打开到 192.168.1.1 的数据连接,端口:13950
  49. [00:25:14] LIST -aL
  50. [00:25:14] 150 Here comes the directory listing.
  51. [00:25:15] 519 字节已传输。(604 字节/秒)(858 ms)
  52. [00:25:15] 226 Directory send OK.
  53. [00:25:15] MDTM .bash_logout
  54. [00:25:16] 213 20110613160901
  55. [00:25:16] Time zone offset: 0 seconds (0.0 hours)
  56. [00:25:46] NOOP
  57. [00:25:47] 200 NOOP ok.



保存,重启vsftpd

其他关于ssl的相关配置参数:
ssl_enable=yes/no                        是否启用 SSL,默认为no
allow_anon_ssl=yes/no                是否允许匿名用户使用SSL,默认为no
rsa_cert_file=/path/to/file            rsa证书的位置
dsa_cert_file=/path/to/file            dsa证书的位置
force_local_logins_ssl=yes/no      非匿名用户登陆时是否加密,默认为yes
force_local_data_ssl=yes/no         非匿名用户传输数据时是否加密,默认为yes
force_anon_logins_ssl=yes/no      匿名用户登录时是否加密,默认为no
force_anon_data_ssl=yes/no        匿名用户数据传输时是否加密,默认为no
ssl_sslv2=yes/no                           是否激活sslv2加密,默认no
ssl_sslv3=yes/no                           是否激活sslv3加密,默认no
ssl_tlsv1=yes/no                           是否激活tls v1加密,默认yes
ssl_ciphers=加密方法                  默认是DES-CBC3-SHA

3.测试



主要的测试:


当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是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=YES时,虚拟用户只能上传和下载文件,无其他权限。
当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时,虚拟用户只能下载、删除和重命名文件,无其他权限。
阅读(2529) | 评论(0) | 转发(0) |
0

上一篇:mysql杂项

下一篇:TCP Wrappers

给主人留下些什么吧!~~