1、理论知识
1.1、配置文件
1.1.1、vsftp的简介
vsftp的名字是“very secure FTP daemon”的简称,他工作在chroot模式下(程序限定一个访问目录),故而比较安全。
1.1.2、工作模式
1)PORT模式(主动模式)
主动模式工作流程如下:
-- 客户端与服务器TCP 21端口建立连接通道
-- 接收数据时在此通道上发送PORT命令(声明一个大于1024的客户端端口)
-- 服务器端通过TCP 20向客户端传送数据(建立新的连接)
注:防火墙OUTBOUND过程
2)PASV模式(被动模式)
被动模式工作流程如下:
-- 客户端与服务器TCP 21端口建立连接通道
-- 客户端发送PASV命令给服务器
-- 服务器默认开启1024至5000之间的随机端口并通知客户端在此端口请求数据
-- 服务器端通过此端口传送数据
注:防火墙INBOUND过程
1.1.3、运行模式
1)standalone模式
-- 一次性启动,常驻内存
-- 接入反省快,消耗系统资源
-- 支持PAM验证功能
2)inetd(xinetd)模式
-- 外部请求则调用ftp进程
-- 反应慢,不占系统资源
-- 单一IP限制
1.1.4、主配置文件
/etc/vsftpd/vsftpd.conf
1.1.5、PAM配置文件
1)配置文件位置:
/etc/pam.d/vsftpd
2)PAM配置文件的修改
vim编辑/etc/pam.d/vsftpd
更改前(在列表中的不允许chroot):
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeedd
更改后(只有在列表中的用户才允许chroot):
auth required pam_listfile.so item=user sense=allow file=/etc/vsftpd/ftpusers onerr=faile
1.2、主机访问控制
/etc/hosts.deny
1.3、启动失败调试方法
启动失败解决:
bash -x /etc/init.d/vsftpd start
1.4、帮助
man vsftpd.conf
1.5、配置文件参数
1.5.1、全局配置参数
注:参数与注解正式环境下分开两行写,否则报错
1)权限参数
write_enable=YES #允许改变命令(STOR, DELE,RNFR, RNTO, MKD, RMD, APPE and SITE,默认NO)
2)登录信息参数
dirmessage_enable=YES #换目录时,显示目录下“.message”文件的内容 ftpd_banner=Welcome to www.cmdschool.org FTP servers #登录欢迎信息 banner_file=/etc/vsftpd/banner_file #登录成功信息 banner_fail=/etc/vsftpd/banner_fail #登录失败信息
注意:
ftp_banner会覆盖vsftpd默认连接后的信息显示;
banner_file设置会覆盖ftp_banner的提示;
3)日志文件参数
xferlog_enable=YES #开启日志 xferlog_std_format=YES #wu-ftpd风格记录日志 xferlog_file=/var/log/xferlog #记录上传下载的日志
4)性能参数
idle_session_timeout=600 #闲置会话中断超时 data_connection_timemout=120 #闲置数据连接超时 accept_timeout=60 #PASV模式响应数据超时 ls_recurse_enable=YES #是否允许递归查询ls -R(默认YES) dirlist_enable=YES #允许使用dir/ls(默认YES) download_enable=YES #允许用户下载文件 max_clients=30 #客户端最大数量 max_per_ip=3 #一个IP的最大连接数 use_localtime=YES #启用当地时间(默认GMT)
5)安全参数
tcp_wrappers=yes #开启tcp_wrapper访问控制 max_login_fails=3 #默认试探密码的次数 pam_service_name=vsftpd #PAM验证配置文件名称 nopriv_user=ftp | nobody #vsftp服务运行时的账号 deny_file={*.exe,*.dll} #拒绝上传下载的文件类型 async_abor_enable=YES #是否允许运行特殊的ftp命令async ABOR.
6)安全SSL协议
ssl_enable=YES #开启SSL加密协议 ssl_sslv2=YES #指定加密方式 ssl_sslv3=YES ssl_tlsv1=YES force_local_logins_ssl=YES #强制本地和虚拟用户登录使用SSL协议 force_local_data_ssl=YES #强制本地和虚拟用户数据使用SSL协议 allow_anon_ssl=YES #允许匿名用户使用SSL协议 force_anon_logins_ssl=YES #强制匿名用户登录使用SSL协议 force_anon_data_ssl=YES #强制匿名用户数据使用SSL协议 require_ssl_reuse=NO #禁用数据与控制流使用相同的ssl通道 ssl_ciphers=HIGH #加密套件 rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem #指定加密证书文件
7)传输协议
#ASCII模式传送文件 ascii_upload_enable=YES ascii_download_enable=YES
8)进程相关
background=YES #vsftp将以监听(listen)模式启动 connect_timeout=60 #PORT模式响应数据超时 listen=yes #vsftp则运行在standalone模式 listen_port=21 #vsftpd监听端口 connect_from_port_20=YES #启用默认的20端口监听 listen_ipv6=YES #开启ipv6支持 pasv_min_port=50000 #PASV模式最小端口 pasv_max_port=60000 #PASV模式最大端口
1.5.2、本地用户配置参数
1)前提参数
local_enable=YES #开启普通用户ftp访问(默认NO,不限制chroot)
2)权限参数
local_umask=0022 #上传文件默认权限设置为6644,不设置默认为0077,目录为700 chroot_local_user=NO #禁止用户chroot chroot_list_enable=YES #开启chroot控制列表 chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #chroot控制列表(默认在列拒绝) userlist_enable=yes #开启用户登录控制列表 userlist_deny= #拒绝或允许用户登录 userlist_file=/etc/vsftpd.user_list #用户登录控制列表 local_root= #指定ftp家目录
3)性能参数
local_max_rate=128 #本地账号最大速率128B/s(0不限制)
1.5.3、匿名用户配置参数
1)前提参数
anonymous_enable=YES #开启匿名用户登录(默认YES) ftp_username=ftp #匿名用户的系统用户名(默认ftp)
2)权限参数
anon_world_readable_only=YES #开启匿名用户文件只读 anon_upload_enable=YES #允许匿名用户上传文件 anon_mkdir_write_enable=YES #允许匿名用户创建文件夹 anon_other_write_enable=YES #允许匿名用户其他写操作(删除,重命名) anon_umask=022 #默认0077 chown_uploads= YES #修改匿名用户所上传文件的所有权 chown_username = username #指定拥有匿名用户上传文件所有权的用户
3)性能参数
anon_upload_enable=NO #匿名用户上传文件 anon_mkdir_write_enable=NO #匿名用户上传目录权限 anon_max_rate=64 #匿名账号最大下载速度64B/s
1.5.4、虚拟用户配置参数
1)前提参数
guest_enable=YES #开启虚拟用户 guest_username= #指定虚拟用户映射的本地用户
2)权限参数
user_config_dir=/etc/vsftpd/config #虚拟用户配置文件目录 local_root= #虚拟用户家目录
3)性能参数
2、用户验证FTP实验
2.1、基础信息
ftpSer:
ipaddress=10.168.0.166
hostname=vsFTPSer
client:
ipaddress=10.168.0.8
hostname=client
应用场景:
ftp用于上传网站源代码,故需要考虑到apache的权限。
2.2、yum源安装
In ftpSer:
yum -y install vsftpd httpd
In client:
yum -y install ftp
2.3、配置
In ftpSer:
2.3.1、step1
启动服务和配置开机默认启动
/etc/init.d/vsftpd start chkconfig vsftpd on
2.3.2、step2
1)修改配置文件
vim编辑/etc/vsftpd/vsftpd.conf
清空之前的配置,加入如下配置
#--------日志参数------- #开启日志 xferlog_enable=YES #wu-ftpd风格记录日志 xferlog_std_format=YES #记录上传下载的日志 xferlog_file=/var/log/xferlog #-------权限参数-------- #禁止匿名用户登录 anonymous_enable=NO #禁止匿名用户上传文件 anon_upload_enable=NO #禁止匿名用户创建文件夹 anon_mkdir_write_enable=NO #禁止匿名用户其他写操作(删除,重命名) anon_other_write_enable=NO #开启普通用户ftp访问 local_enable=YES #上传文件默认权限 local_umask=022 #开启用户登录控制列表 userlist_enable=YES #禁止用户chroot chroot_local_user=NO #开启chroot控制列表 chroot_list_enable=YES #chroot控制列表 chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #允许改变系统 write_enable=YES #---------安全参数---------- #允许运行特殊的ftp命令async ABOR. async_abor_enable=YES #开启tcp_wrapper访问控制 tcp_wrappers=YES #PAM验证配置文件名称 pam_service_name=vsftpd #---------登录消息---------- dirmessage_enable=YES ftpd_banner=Welcome to www.cmdschool.org FTP servers #---------进行配置--------- #listen模式启动 background=YES #运行在standalone模式 listen=YES #PAM验证配置文件名称 pam_service_name=vsftpd #PASV模式最小端口 pasv_min_port=50000 #PASV模式最大端口 pasv_max_port=60000 #---------传输相关--------- ascii_upload_enable=YES ascii_download_enable=YES
2)重启服务
/etc/init.d/vsftpd restart
2.3.3、step3
配置防火墙
vim编辑/etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 30005:31000 -j ACCEPT
2.3.4、step4
创建ftp目录
mkdir /var/www/www.cmdschool.org/ echo www.cmdschool.org > index.html
2.3.5、step5
创建ftp用户并修改密码
useradd ftp_user1 -d /var/www/www.cmdschool.org/ -s /sbin/nologin echo ftppwd | passwd --stdin ftp_user1 usermod -G apache ftp_user1
2.3.6、step6
权限调整
chown :apache -R /var/www/www.cmdschool.org/ chmod g+s /var/www/www.cmdschool.org/ chmod 770 -R /var/www/www.cmdschool.org/
2.3.7、step7
配置自动生成chroot_list
1)创建脚本文件夹
mkdir ~/script
2)vim编辑~/script/ftp_chroot.sh
键入如下内容:
cat /etc/passwd | cut -d : -f1 > /etc/vsftpd/vsftpd.chroot_list
3)添加计划任务
crontab -e
加入如下内容:
*/5 * * * * sh ~/script/ftp_chroot.sh
2.3.8、step8
关闭selinux
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.3.9、step9
usermod -L ftp_user1 usermod -U ftp_user1
3、SSL加密FTP实验
2.1、yum源
yum -y install tcpdump
2.2、SSL加密的必要性
In ftpSer:
tcpdump port 21 -nA
In client:
ftp open 10.168.0.166 ftp_user1 #输入用户名
In ftpSer:
显示如下:
#前有节删 .<...j*|USER ftp_user1 #后有节删
In client:
ftppwd #输入密码
In ftpSer:
显示如下:
#前有节删 .=.F.k..PASS ftppwd #后有节删
2.3、配置
2.3.1、创建证书目录
mkdir /etc/vsftpd/.sslkey cd /etc/vsftpd/.sslkey
2.3.2、创建证书
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
交互模式如下(根据实际情况填写):
Generating a 1024 bit RSA private key ....++++++ ...........++++++ writing new private key to 'vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:GD Locality Name (eg, city) [Default City]:DG Organization Name (eg, company) [Default Company Ltd]:cmdschool.org Organizational Unit Name (eg, section) []:MIS Common Name (eg, your name or your server's hostname) []:ftpSer Email Address []:[email protected]
2.3.3、设置证书目录权限
chmod -R 400 /etc/vsftpd/.sslkey/
2.3.4、加载证书配置参数
vim编辑/etc/vsftpd/vsftpd.conf
末尾加入如下配置:
#--------SSL------- #开启SSL加密协议 ssl_enable=YES #指定加密方式 ssl_sslv2=YES ssl_sslv3=YES ssl_tlsv1=YES #强制本地和虚拟用户登录使用SSL协议 force_local_logins_ssl=YES #强制本地和虚拟用户数据使用SSL协议 force_local_data_ssl=YES #禁用数据与控制流使用相同的ssl通道 require_ssl_reuse=NO #加密套件 ssl_ciphers=HIGH #指定加密证书文件 rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
参阅资料:
vsftp基础资料:
http://os.51cto.com/art/201008/222036.htm
http://zhidao.baidu.com/link?url=-b3RW2xPe_nMYv10tERFHIk1LAAgCWxfmpSV_n7OeHsE4av2oMCRVgXuPjgpMCQO0s8Ny6xqALcR0fjrIU6I-31zSgxBt99Ql6xwiZRZ-We
http://www.jb51.net/LINUXjishu/10964.html
启用SSL的资料:
http://my.oschina.net/HankCN/blog/116127
ftp端资料:
http://www.linuxidc.com/Linux/2012-10/73157.htm