vsftpd简介
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。 在开源操作系统中常用的FTPD套件主要还有ProFTPD、PureFTPd和wuftpd等
工作模式
FTP有2种工作模式: 主动模式和被动模式.
FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
FTP协议中,控制连接均由客户端发起,而数据连接有两种工作方式:PORT方式(主动方式)和PASV方式(被动方式)主动模式
1.客户端从大于1024端口到服务器的21端口
2.服务器的21端口到客户端大于1024的端口
3.FTP服务器的20端口到大于1024的端口
4.客户端大于1024端口到FTP服务器的20端口
被动模式
1.客户端从任何大于1024的端口到服务器的21端口
2.服务器的21端口到客户端任何大于1024的端口
3.客户端从任何大于1024端口到服务器的大于1024端口
4.服务器的大于1024端口到远程的大于1024的端口
登录方式
vsftp允许三种用户登录:
1.本地用户(系统中的用户) 2.匿名用户(anonymous免密码登录) 3.虚拟用户(基于本地用户)
虚拟用户以本地用户为宿主(一般是不能登录系统的本地用户),仅仅用于登录vsftp,无法登陆系统; 可以建立多个虚拟用户,设置各自的密码,并且根据其用途设置相应的配置,能适应多种情况。
1.环境准备
[root@niaoyun50524 ~]# cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) [root@niaoyun50524 ~]# uname -r 3.10.0-123.el7.x86_64 [root@niaoyun50524 ~]# getenforce Disabled [root@niaoyun50524 ~]# systemctl status firewalld firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled) Active: inactive (dead)
2.yum安装vsftpd
[root@niaoyun50524 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #更新epel源,换成阿里源 [root@niaoyun50524 yum.repos.d]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm Retrieving http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm ^[[Cwarning: /var/tmp/rpm-tmp.2PdaKo: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:epel-release-7-7 ################################# [100%]代码 [root@niaoyun50524 ~]# yum -y install vsftpd #安装vsftpd
3.配置启动vsftpd
3.1 编辑vsftpds配置文件/etc/vsftpd/vsftpd.conf
[root@niaoyun50524 skins]# grep -v "^#" /etc/vsftpd/vsftpd.conf anonymous_enable=NO # 禁止匿名登陆 local_enable=YES # 设置本地用户可以访问 write_enable=YES local_umask=022 # 本地用户新建文件权限 dirmessage_enable=YES xferlog_enable=YES # 开启上传下载日志 connect_from_port_20=YES # 主动连接的端口号 xferlog_file=/var/log/xferlog # 启用日志记录 xferlog_std_format=YES # 日志格式 ascii_upload_enable=YES # 设定支持ASCII模式的上传和下载功能 ascii_download_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # 不能离开主目录的用户列表 listen=YES pam_service_name=vsftpd # PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证 userlist_enable=YES # 在/etc/vsftpd/user_list中的用户将不得使用FTP tcp_wrappers=YES # 支援 TCP Wrappers 的防火墙机制 guest_enable=YES # 启用虚拟用户功能 guest_username=ftp # 将虚拟用户映射为本地ftp用户(指定虚拟用户的宿主用户)。Centos默认有ftp用户 virtual_use_local_privs=YES # 虚拟用户的权限符合他们的宿主用户 user_config_dir=/etc/vsftpd/vuser_conf # 虚拟用户个人vsftpd的配置文件存放路径。注意:配置文件名必须和虚拟用户名相同 allow_writeable_chroot=YES #登陆用户可写权限
3.2 配置虚拟用户访问
[root@niaoyun50524 vsftpd]# echo ftp > chroot_list #创建chroot_list文件,并把vsftpd.conf配置文件中的guest_username(这里是ftp)写入 [root@niaoyun50524 vsftpd]# cat chroot_list ftp [root@niaoyun50524 vsftpd]# echo -e "anzhihe\n123456" > vuser_passwd.txt #创建虚拟用户密码文件/etc/vsftpd/vuser_passwd.txt [root@niaoyun50524 vsftpd]# cat vuser_passwd.txt #注意奇行是用户名,偶行是密码。 anzhihe 123456 [root@niaoyun50524 vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db #生成虚拟用户认证的db文件,将文本内的帐号及密码添加到db4的数据库文件内 [root@niaoyun50524 vsftpd]# ls chroot_list ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh vuser_conf vuser_passwd.db vuser_passwd.txt #编辑认证文件/etc/pam.d/vsftpd,把注释全部去掉,然后加上以下两条 系统为64位: auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd 系统为32位: auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account required pam_userdb.so db=/etc/vsftpd/vuser_passwd #注:db/etc/vsftpd/vuser_passwd中的vuser_passwd是你生成的虚拟用户的db文件 #查看系统版本号:getconf LONG_BIT [root@niaoyun50524 vsftpd]# cat /etc/pam.d/vsftpd #%PAM-1.0 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
3.3 虚拟用户权限文件设置
1、在文件vsftpd.conf中指定虚拟用户的权限目录 user_config_dir=/etc/vsftpd/vuser_conf 2、创建虚拟用户配置文件 [root@niaoyun50524 vsftpd]# mkdir -pv /etc/vsftpd/vuser_conf mkdir: created directory ‘/etc/vsftpd/vuser_conf’ [root@niaoyun50524 vuser_conf]# mkdir -p /data/ftp/www [root@niaoyun50524 vuser_conf]# cat /etc/vsftpd/vuser_conf/anzhihe #文件名必须为vuser_passwd.txt里面的账号,否则下面的配置无效 local_root=/data/ftp/www # 虚拟用户根目录,根据实际情况修改,目录必须可写 anon_umask=022 # 虚拟用户文件权限,新建目录权限 777-022=755,新建文件权限 666-022=644 write_enable=YES # 可写 anon_world_readable_only=NO # 显示文件目录 anon_upload_enable=YES # 上传 anon_mkdir_write_enable=YES # 新建文件、目录 anon_other_write_enable=YES # 修改、重命名 download_enable=YES # 下载 [root@niaoyun50524 vuser_conf]# chown -R ftp.ftp /data/ftp/www #注意: ftp根目录的文件权限数组,如果用户访问的根目录的权限数组设置不当,用户可能就无法上传或修改文件 iptables添加 -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -m state--state NEW -m tcp -p tcp --dport 40000:40100 -j ACCEPT(被动模式,同时要在配置文件中添加如下配置) ### 开启PASV模式(被动模式) pasv_enable=YES pasv_min_port=40000 # 最小端口号 pasv_max_port=40100 # 最大端口号 pasv_promiscuous=YES ### 会话限制(全局),同时可以在用户的权限文件里面设置(配置文件中不要有中文注释,登陆时会产生500报错) idle_session_timeout=600 # 用户会话空闲后10分钟 data_connection_timeout=120 # 将数据连接空闲2分钟断 max_clients=10 # 最大客户端连接数 max_per_ip=5 # 每个ip最大连接数 local_max_rate=0 # 限制上传速率,0为无限制
3.4 启动vsfpd服务
[root@niaoyun50524 vsftpd]# systemctl restart iptables.service [root@niaoyun50524 vsftpd]# systemctl start vsftpd.service [root@niaoyun50524 vsftpd]# systemctl status vsftpd.service vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled) Active: active (running) since Mon 2016-07-04 13:27:02 CST; 9s ago Process: 4397 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS) Main PID: 4398 (vsftpd) CGroup: /system.slice/vsftpd.service └─4398 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf Jul 04 13:27:02 niaoyun50524 systemd[1]: Starting Vsftpd ftp daemon... Jul 04 13:27:02 niaoyun50524 systemd[1]: Started Vsftpd ftp daemon. # ps –ef| grep vsftp 查看进程是否启动
3.5 使用FlashFXP连接测试,截图如下:
遇到的问题:
500 OOPS: bad bool value in config file for: write_enable
注意你的vsftpd和虚拟用户的配置文件中保证每一行最后没有任何空格,一般出错就是在多余的空格上,建议配置文件中不用中文注释。
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
4.部署Net2ftp客户端
4.1 安装http、MySQL5.6
[root@niaoyun50524 /]# yum install -y httpd #安装web服务(httpd) [root@niaoyun50524 /]# wget http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm [root@niaoyun50524 /]# yum localinstall -y mysql57-community-release-el6-7.noarch.rpm #安装mysql yum源 #修改安装mysql版本,我们这选5.6版本 vi /etc/yum.repos.d/mysql-community.repo [mysql56-community] name=MySQL 5.6 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql [mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/ enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql [root@niaoyun50524 /]# yum install -y mysql-community-server #yum安装mysql5.6 [root@niaoyun50524 /]# rpm -qa|grep mysql mysql-community-libs-5.6.31-2.el6.x86_64 mysql57-community-release-el6-7.noarch mysql-community-client-5.6.31-2.el6.x86_64 mysql-community-server-5.6.31-2.el6.x86_64 mysql-community-common-5.6.31-2.el6.x86_64 [root@niaoyun50524 /]# systemctl start mysqld #启动mysql数据库 [root@niaoyun50524 /]# mysqladmin -uroot password "rootroot" #设置密码 Warning: Using a password on the command line interface can be insecure. [root@niaoyun50524 /]# mysql -uroot -prootroot -e 'create database vsftpd' #创建vsftpd数据库 mysql> grant all privileges on vsftpd.* to 'vsftpd'@'%' identified by 'vsftpd'; #创建vsftpd用户并授权 Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
4.2 下载安装net2ftp文件
[root@niaoyun50524 /]# cd /var/www/html [root@niaoyun50524 html]# wget http://www.net2ftp.com/download/net2ftp_v1.0.zip #下载net2ftp压缩包 [root@niaoyun50524 html]# unzip net2ftp_v1.0.zip #解压 [root@niaoyun50524 html]# ll total 4356 drwxr-xr-x 3 root root 124 Apr 24 2013 net2ftp_v1.0 -rw-r--r-- 1 root root 4460502 Apr 26 2013 net2ftp_v1.0.zip [root@niaoyun50524 html]# cd net2ftp_v1.0/files_to_upload/ [root@niaoyun50524 files_to_upload]# vi settings.inc.php #修改settings.inc.php文件 [root@niaoyun50524 files_to_upload]# egrep -v '^/|^\s*$' settings.inc.php <?php $net2ftp_settings["email_feedback"] = "350510947@qq.com"; $net2ftp_settings["default_language"] = "en"; #推荐使用英文,中文可能会出现问题 $net2ftp_settings["default_skin"] = "Shinra";#皮肤 $net2ftp_settings["help_text"] = ""; $net2ftp_settings["help_link"] = ""; $net2ftp_settings["error_reporting"] = "standard"; $net2ftp_settings["fix_png"] = "yes"; $net2ftp_settings["encryption_string"] = "462E16CB7C3F369BD9F4DBEE0A926F8F14FFB3"; $net2ftp_settings["admin_username"] = "anzhihe"; #配置管理员用户名 $net2ftp_settings["admin_password"] = "xxxxxx"; #配置管理员密码 $net2ftp_settings["message_browse"] = ""; $net2ftp_settings["use_database"] = "yes"; // "yes" or "no" #是否记录登陆日志,默认NO,可修改为YES,但要把create_tables.sql导入到你的MySQL里面 $net2ftp_settings["dbusername"] = "vsftpd"; #数据库配置,按之前我们设定的来填写 $net2ftp_settings["dbpassword"] = "vsftpd"; $net2ftp_settings["dbname"] = "vsftpd"; $net2ftp_settings["dbserver"] = "localhost"; // on many configurations, this is "localhost" $net2ftp_settings["log_access"] = "yes"; $net2ftp_settings["log_error"] = "yes"; $net2ftp_settings["log_length_months"] = 12; // number of months $net2ftp_settings["use_syslog"] = "no"; $net2ftp_settings["syslog_priority"] = LOG_NOTICE; $net2ftp_settings["syslog_facility"] = LOG_MAIL; $net2ftp_settings["syslog_ident"] = "net2ftp"; $net2ftp_settings["max_filesize"] = "200000000"; // in Bytes, default 10 MB,文件上传最大大小,我这设置了了200M $net2ftp_settings["check_consumption"] = "no"; $net2ftp_settings["max_consumption_ipaddress_datatransfer"] = 50000000; // per IP address,每个IP每天最多的传送的字节 $net2ftp_settings["max_consumption_ftpserver_datatransfer"] = 50000000; // per FTP server,每天FTP服务器每天最多接受的字节 $net2ftp_settings["max_consumption_ipaddress_executiontime"] = 1500; // per IP address $net2ftp_settings["max_consumption_ftpserver_executiontime"] = 1500; // per FTP server $net2ftp_settings["check_homedirectory"] = "no"; $net2ftp_settings["application_version"] = "1.0"; $net2ftp_settings["application_build_nr"] = "47"; $net2ftp_settings["net2ftpdotcom"] = "no"; $net2ftp_settings["show_ads"] = "no"; ?> #记录登陆日志,导入create_tables.sql [root@niaoyun50524 files_to_upload]# mysql -uroot -prootroot -e 'use vsftpd;source /var/www/html/net2ftp_v1.0/create_tables.sql;' [root@niaoyun50524 files_to_upload]# systemctl start httpd #启动httpd服务 [root@niaoyun50524 files_to_upload]# ps -ef|grep httpd root 5767 1 3 15:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 5768 5767 0 15:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 5769 5767 0 15:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 5770 5767 0 15:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 5771 5767 0 15:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 5772 5767 0 15:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
4.3 测试net2ftp
打开浏览器输入:http://你的IP地址/net2ftp_v1.0/files_to_upload/index.php,出现登陆界面
2.点击登陆即可在Web操作,上传下载编辑文件非常方便
遇到的问题:
1.打开时报500错误,查看apache日志发现MySQL数据库没有给vsftpd本地登陆权限
2.打开index.php,一片空白,后面发现index.php没有可执行权限,好坑!
-rwxr-xr-x 1 apache apache 4072 Jan 24 2013 index.php
参考: http://liumissyou.blog.51cto.com/4828343/1760565