FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立连接前就要经过一个"三次握手"的过程.FTP服务还有一个非常重要的特点是它可以独立于平台。
Linux下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等。Red Hat Enterprise Linux中默认安装的是vsftpd。
通常,访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:
(1)anonymous(匿名帐号)
使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己的电子邮件地址为密码进行登录.当匿名用户登录FTP服务器后,其登录目录为匿名FTP服务器的根目录/var/ftp.为了减轻FTP服务器的负载,一般情况下,应关闭匿名帐号的上传功能。
(2)real(真实帐号)
real也称为本地帐号,就是以真实的用户名和密码进行登录,但前提条件是用户在FTP服务器上拥有自己的帐号.用真实帐号登录后,其登录的目录为用户自己的目录,该目录在系统建立帐号时系统就自动创建。
(3)guest(虚拟帐号)
如果用户在FTP服务器上拥有帐号,但此帐号只能用于文件传输服务,那么该帐号就是guest,guest是真实帐号的一种形式,它们的不同之处在于,geust登录FTP服务器后,不能访问除宿主目录以外的内容。
下面就对其详细介绍。
接下来我们开始实现vsftpd的虚拟用户的功能:
1、yum安装vsftpd程序:
[root@master ~]# yum install vsftpd -y
2、修改配置文件
备份修改配置文件
[root@master ~]# cd /etc/vsftpd [root@master vsftpd]# ll total 28 -rw-------. 1 root root 125 Oct 18 07:54 ftpusers -rw-------. 1 root root 361 Oct 18 07:54 user_list -rw-------. 1 root root 4599 Oct 18 07:54 vsftpd.conf -rw-------. 1 root root 4599 Jan 6 10:53 vsftpd.conf.bak -rwxr--r--. 1 root root 338 Oct 18 07:54 vsftpd_conf_migrate.sh [root@master vsftpd]# cp vsftpd.conf{,.bak} [root@master vsftpd]# cat vsftpd.conf | grep "^[^#]" anonymous_enable=NO //是否允许anonymous登录FTP服务器,默认是允许的。 local_enable=YES //是否允许本地用户登录FTP服务器,默认是允许 write_enable=YES //是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许 anon_umask=022 //设置虚拟用户的文件生成掩码为022,默认是077 dirmessage_enable=YES //激活目录信息,当远程用户更改目录时,将出现提示信息 xferlog_enable=YES //启用上传和下载日志功能 connect_from_port_20=YES //启用FTP数据端口的连接请求 xferlog_file=/var/log/vsftpd.log //设置日志文件的文件名和存储路径,这是默认的 xferlog_std_format=YES //是否使用标准的ftpd xferlog日志文件格式 listen=YES //使vsftpd 处于独立启动模式 user_config_dir=/etc/vsftpd/vuser_dir //使用虚拟用户配置文件的目录 pam_service_name=/etc/pam.d/ftp.vu //设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/目录下. userlist_enable=NO //用户列表中的用户是否允许登录FTP服务器,默认是不允许 chroot_list_enable=YES //如果希望用户登录后不能切换到自己目录以外的其它目录,需要设置该项 tcp_wrappers=YES //使用tcp_wrqppers作为主机访问控制方式 guest_enable=YES //是否启用来宾用户(也就是启用虚拟用户) guest_username=root //如果启用了虚拟用户后上传文件修改文件的用户名 chown_uploads=YES //是否启用上传文件后修改为指定的属主 chown_username=root //是否启用上传文件后修改为指定的属主用户
3、在/etc/vsftpd/下创建两个目录
vuser_db #后续存放虚拟用户的配置文件 vuser_dir #存放虚拟用户的认证文件 [root@master vsftpd]# mkdir vuser_db vuser_dir [root@master vsftpd]# cd vuser_db/ [root@master vuser_db]# ll total 20 -rw-r--r--. 1 root root 69 Jan 5 11:25 login_vuser -rw-r--r--. 1 root root 12288 Jan 5 11:26 vuser.db [root@master vuser_db]# vim login_vuser //以下是login_vuser虚拟用户的帐号密码格式,奇数行为用户名,双数行为密码 user003 20150105 user004 20150106 user005 20150107 //生成数据库文件 //选项-T允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。 如果指定了选项-T,那么一定要追跟子选项-t 子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型。扩展介绍下,-t可以指定的数据类型有Btree、Hash、Queue和Recon数据库。 -f:参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码 [root@master vuser_db]# db_load -T -t hash -f /etc/vsftpd/vuser_db/login_vuser /etc/vsftpd/vuser_db/vuser.db
4、更改pam认证模块
[root@master vuser_db]# cd /etc/pam.d/ [root@master vuser_db]# vim ftp.vu //这个文件名要与主配置文件中的pam_service_name指定的一致 //最后面的vuser就是vuser.db,但是这里的后缀不是需要写的 auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuser
5、为虚拟用户创建对应的文件
[root@master vsftpd]# cd /etc/vsftpd/vuser_dir/ [root@master vuser_dir]# ll //login_vuser中有多少个帐号就创建多少个虚拟用户文件 total 6 -rw-r--r--. 1 root root 177 Jan 5 17:03 user003 -rw-r--r--. 1 root root 177 Jan 5 17:09 user004 -rw-r--r--. 1 root root 177 Jan 5 17:19 user005 [root@master vuser_dir]# vim user003 anon_world_readable_only=NO write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/data/www/test //指定虚拟用户有权限登录到哪个目录 chown_upload_mode=0777 //虚拟用户上传文件的权限设置
到这里基本上算是配置完成了,可以启动vsftpd服务了:
root@master vsftpd]# service vsftpd start
然后可以直接在windows下登录测试一下看了:
OK,到这里就完全实现了pam认证的vsftpd虚拟用户的配置了,可以实现虚拟用户登录FTP功能了。