什么是vsftpd?
vsftpd是一个类UNIX操作系统上的一个FTP服务器,包括linux。vsftpd全称是very secure FTP daemon(非常安全的FTP进程),顾名思义,安全是它的一大特性。
比如说vsftpd是在chroot模式下工作的,通俗chroot模式就是把它禁锢在一个目录中,禁止它访问别的目录。如果你不是用chroot模式,使用系统用户账号登陆FTP时,那么便有了这个用户的所有权力,这样岂不是很不安全?
理解FTP协议
在配置vsftp之前,先说一下什么是FTP,FTP(File Transfer Protocol)是文件传输协议的简称。工作于应用层,用于上传或下载文件,能够将一个主机的文件共享给其他主机。
FTP有两种连接方式,命令连接和数据连接。命令连接也叫控制连接,是一直在线,21/tcp,和服务器进行沟通。数据连接是按需打开,按需关闭的,请求下载文件时打开,传输完毕后关闭。
FTP有两种模式,主动FTP和被动FTP。
主动FTP有两次TCP三次握手,最终在20号端口建立书籍连接。一次是客户端发起,另一次由服务器端发起。首先客户端以大于1024的源端口向FTP的服务器端21号目标端口发起连接请求。另一次是FTP服务器端主动发起到客户端的连接,使用20号源端口,主动向客户端的1025号端口发起连接请求。但是防火墙可能会阻止,因此有了被动FTP。
被动FTP服务器端只是用21号端口,也有两次TCP的三次握手,只不过三次握手都是由客户端发起的。第一次客户端以1024为源端口向FTP服务器的21号端口发起连接请求,FTP服务器告诉客户端使用1024--5000的端口进行数据传输,这个消息帧属于第一次三次握手的一部分。而后第二次三次握手开始,客户端使用1025号源端口主动连接服务器端的发来的端口号。这样都是客户端发起的连接请求,防火墙便不会阻止。
FTP用户
FTP有三类用户,无论那种用户都要映射为一个系统用户。
匿名用户:anonymous用户
系统用户:passwd中记录的用户
虚拟用户:建立一个系统账号,将所有账号映射到此用户访问,使用的不是系统用户账号,提高安 全性
简单配置vsftpd
rpm包安装
# yum install vsftpd
# service vsftpd on
# chkconfig vsftpd on
vsftp配置文件调整及说明
annoymous_enable=YES 允许匿名用户登录
local_enable=YES 是否开启系统用户
write_enable=YES 是否允许系统用户上传文件
anon_upload_enable=NO 匿名用户不可上传文件
local_umask=022 上传文件的权限设定
anon_mkdir_write_enable=NO 匿名用户不能创建目录
anon_other_write_enable=NO 匿名用户不能删除文件
dirmessage_enable=YES 显示用户欢迎信息,比如在/var/ftp/.message文件中
写一句‘Welcome‘,则用户进入/var/ftp目录时,会 显示此信息。
xferlog_enable=YES 开启日志传输
xferlog_file=/var/log/vsftpd.log 定义日志传输文件,若不存在,请事先创建
#chown_upload 上传文件后将属主改为其他用户
#chown_username 改为哪个用户,不建议root用户
connect_from_port_20=YES 20号端口进行数据连接
idle_session_timeout =600 控制连接超时时间
data_connection_timeout =120 单次数据连接时间
#ascii_upload_enable=YES
#ascii_download_enable=YES 以纯文本格式实现上传下载,有两种数据传输模式,文 本和二进制,建议不要打开此项。
chroot_local_user=YES 每一个用户都禁锢在家母录中
#chroot_list_file_enable=YES 用一个文件将用户锁在家目录下
#chroot_list_file=/etc/vsftpd/chroot_list 哪一个文件中创建一个用户列表,所有在此列表中的用 户都禁锢在家目录当中。
listen=YES vsftpd是否工作为一个独立的守护进程
pam_service_name=vsftpd 所有写在ftpuser都禁止登录ftp服务器
userlist_enable=YES 拒绝user_list中用户登录
userlist_deny=YES 拒绝user_list中用户登录,若改为NO则仅允许user_list 中用户登录
#max_clients 最大登录FTP服务器客户端的个数
#max_per_ip 每一个单独IP允许发起几个连接请求
基于mysql的虚拟用户
# yum -y install mysql-server mysql-devel
# service mysqld start
# chkconfig mysqld on
# tar xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr --with-openssl
# make
# make install
mysql> CREATE DATABASE vsftpd
mysql>US E vsftpd
mysql> CREATE TABLE users (
-> id INT AUTO_INCREMENT NOT NULL,
-> name CHAR(20) BINARY NOT NULL,
-> password CHAR(48) BINARY NOT NULL,
-> PRIMARY KEY (id));
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY ‘vsftpd‘;
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY ‘vsftpd‘;
mysql> FLUSH PRIVILEGES;
mysql> INSERT INTO users (name,password) VALUES (‘tom‘,‘xiaoming‘),(‘cat‘,‘xiaoming‘);
#vim /etc/pam.d/vsftpd.mysql
auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
# useradd -s /sbin/nologin -d /var/ftproot vuser
# chmod go+rx /var/ftproot
# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.mysql
# service vsfptd restart
即可。
本文出自 “在路上” 博客,请务必保留此出处http://mingxiao.blog.51cto.com/8124243/1629366
原文地址:http://mingxiao.blog.51cto.com/8124243/1629366