ftp是文件传输协议,工作在应用层!它在工作时创建两个链接,一个用户请求ftp服务器时,开启一个链接请求,而服务器响应结果时又打开了一个链接,通过此链接将结果传给用户!
本文操作实现基于虚拟用户认证访问ftp,并以数据库存储格式保存用户信息。
下载vsftpd、mysql-server、mysql-devel、pam_mysql-0.7RC1包,安装开发环境
安装mysql:
# yum groupinstall "Development Tools" "Development Libraries" -y # yum install mysql-server mysql-devel
安装好后要给创建一个数据库用来存放虚拟用户,数据库名为vsftpd,创建前要启动数据库!
# service mysqld start # mysql
mysql> create database vsftpd;
为vsftpd授权:
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'www.jun.com'; mysql> grant select on vsftpd.* to [email protected] identified by 'www.jun.com'; mysql> flush privileges;
创建表:
mysql> use 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>insert into users(name,password) values('tom','tom'); mysql> insert into users(name,password) values('jerry','jerry');
如图:
安装vsftpd:
# yum -y install vsftpd
安装好后,关闭selinux和防火墙!
# setenforce 0
关闭防火墙(永久性的)
# chkconfig iptables off # service vsftpd start
开启ftp,可以简单测试一下:
# ftp 172.16.15.5
pub目录在/var/vsftpd下,这是安装时生成的!安装好后ftp就可以工作了,看上去是如此的简单!其实不然,当用系统用户访问时,它可以在整个根目录下来回游荡!为了使ftp安全可靠,还要对其行配置!在配置前先建立虚拟用户映射的系统用户及对应的目录,其作用将来宾用户映射为此系统用户,使其能够访问ftp。
# useradd -d /var/ftproot -s /sbin/nologin vuser # chmod go+rx /var/ftproot
其/etc/vsftpd/vsftpd.conf配置文件大致内容: anonymous_enable=YES:是否允许匿名用户
local_enable=YES:是否启用系统用户
write_enable=YES:是否能上传文件(系统用户的功能)
anon_upload_enable=YES:是否允许匿名用户上传文件
dirmessage_enable=YES:当用户进入一个目录时,是否显示隐藏文件内容
anon_mkdir_write_enable=YES:是否能创建目录
anon_other_write_enable=YES:是否有其他的写权限
xferlog_file=/var/log/vsftpd.log:ftp日志存放路径
xferlog_enable=YES:用户下载的文件过程是否存放在日志中
xferlog_std_format=YES:日志文件是否为标准格式
chown_uploads=YES:用户上传文件,是否将文件的属主、属组改为别的用户
chown_username=whoever:文件属主、属组改为谁
idle_session_timeout=600:定义用户会话时长
data_connection_timeout=120:定义用户链接数据时长
ascii_upload_enable=YES:启用以文本格式上传
ascii_download_enable=YES:启用以文本格式下载
chroot_list_enable=YES:是不是以一个文件将某些用户禁固在其家目录中
chroot_list_file=/etc/vsftpd/chroot_list:禁锢用户文件的路径
chroot_local_user=YES:禁锢所有的用户(在配置文件中添加此行)
pam_service_name=vsftpd:ftp认证的格式为pam
在/etc/vsftpd/vsftpd.conf中,添加来宾用户所映射的用户名
guest_enable=YES
guest_username=vuser
安装pam认证包:
下载pam_mysql-0.7RC1,解压并安装!
# tar -xf pam_mysql_0.7RC1.tar.gz # cd pam_mysql_0.7RC1 # ./configure --with-mysql=/usr --with-openssl # make # make install
建立pam认证所需要的文件,并在文件内添加mysql所授权的用户及密码!
# vim /etc/pam.d/vsftpd.mysql auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.jun.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0 account required /lib/security/pam_mysql.so user=vsftpd passwd=www.jun.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
修改vsftpd的配置文件,确保以pam认证,并能认证mysql中的虚拟用户及密码!修改前确保一下几项是开启的:
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
其表示为何意,上面已有介绍,不在详细说明!
修改/etc/vsftpd/vsftpd.conf配置文件
pam_service_name=vsftpd.mysql
# service vsftpd start # chkconfig vsftpd on
用虚拟用户登录测试一下!
此时的用户只能创建目录,但不能删除目录!要想让虚拟用户有不同的权限,还需为虚拟用户创建配置文件!
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
# vim vsftpd.conf
添加如下选项:
user_config_dir=/etc/vsftpd/vusers_dir
创建vusers_dir目录,为虚拟用户创建配置文件
# mkdir /etc/vsftpd/vusers_dir/ # cd /etc/vsftpd/vusers_dir/ # touch tom jerry
配置虚拟用户的访问权限,虚拟用户的访问权限是通过匿名用户的相关指令来实现的,在匿名用户的配置文件中添加某些命令即可!
为tom添加其他权限
# vim /etc/vsftpd/vusers_dir/tom anon_other_write_enable=YES
ftp有三种访问方式:匿名用户、系统用户、虚拟用户
每个人用户通过ftp访问时,访问的都是其自身的家目录