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 服务,登录,正确配置登录后会有如下日志产生:
- [00:25:11] SmartFTP v4.0.1180.0
-
[00:25:11] 正解析主机名“192.168.1.1”
-
[00:25:11] 正连接到 192.168.1.1,端口:21
-
[00:25:11] 已连接到 192.168.1.1。
-
[00:25:12] 220 (vsFTPd 2.3.4)
-
[00:25:12] AUTH TLS
-
[00:25:12] 234 Proceed with negotiation.
-
[00:25:12] SSL:服务器正在请求客户端证书。
-
[00:25:12] TLS 1.0 加密会话已建立。
-
[00:25:12] 密钥交换:1024 位 RSA
-
[00:25:12] 会话密钥:168 位 3DES
-
[00:25:12] 命令通道保护设置为 加密。
-
[00:25:12] PBSZ 0
-
[00:25:12] 200 PBSZ set to 0.
-
[00:25:12] USER tempuser
-
[00:25:12] 331 Please specify the password.
-
[00:25:12] PASS (隐藏)
-
[00:25:13] 230 Login successful.
-
[00:25:13] SYST
-
[00:25:13] 215 UNIX Type: L8
-
[00:25:13] 已检测到服务器类型:UNIX
-
[00:25:13] RTT: 165.339 ms
-
[00:25:13] FEAT
-
[00:25:13] 211-Features:
-
[00:25:13] AUTH SSL
-
[00:25:13] AUTH TLS
-
[00:25:13] EPRT
-
[00:25:13] EPSV
-
[00:25:13] MDTM
-
[00:25:13] PASV
-
[00:25:13] PBSZ
-
[00:25:13] PROT
-
[00:25:13] REST STREAM
-
[00:25:13] SIZE
-
[00:25:13] TVFS
-
[00:25:13] UTF8
-
[00:25:13] 211 End
-
[00:25:13] OPTS UTF8 ON
-
[00:25:13] 200 Always in UTF8 mode.
-
[00:25:13] PWD
-
[00:25:14] 257 "/"
-
[00:25:14] TYPE A
-
[00:25:14] 200 Switching to ASCII mode.
-
[00:25:14] PROT P
-
[00:25:14] 200 PROT now Private.
-
[00:25:14] PASV
-
[00:25:14] 227 Entering Passive Mode (192,168,1,1,54,126).
-
[00:25:14] 正在打开到 192.168.1.1 的数据连接,端口:13950
-
[00:25:14] LIST -aL
-
[00:25:14] 150 Here comes the directory listing.
-
[00:25:15] 519 字节已传输。(604 字节/秒)(858 ms)
-
[00:25:15] 226 Directory send OK.
-
[00:25:15] MDTM .bash_logout
-
[00:25:16] 213 20110613160901
-
[00:25:16] Time zone offset: 0 seconds (0.0 hours)
-
[00:25:46] NOOP
-
[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时,虚拟用户只能下载、删除和重命名文件,无其他权限。
阅读(2557) | 评论(0) | 转发(0) |