我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。
匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。
本地用户登录:使用系统用户登录,在/etc/passwd中。
虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。
FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。
例:FTP虚拟账号
公司为了宣传最新的产品信息,计划搭建FTP服务器,为客户提供相关的文档的下载。对所有互联网开放共享目录,允许下载产品信息,禁止上传。公司的合作单位能够使用FTP服务器进行上传和下载,但不可以删除数据。需要保证服务器的稳定性并做优化。
创建FTP虚拟账号。允许客户使用FTP账号下载文件。合作伙伴账号:vip账号 可以上传文件。
需考虑到服务器的安全性,所以关闭实体用户登录,是用虚拟账号验证机制,并对不同账号设置不同的权限。 保证服务器的性能,还需要根据用户等级,限制客户端的连接数以及下载速度。
1、创建用户数据库:
(1)创建用户文本文件
先建立用户文本文件vsftpd_virtualuser.txt,添加两个虚拟账号,公共账号ftp以及客户账号vip
[root@www vsftpd]# vim /etc/vsftpd/vsftpd_virtualuser.txt #写入以下内容,格式:一行账号一行密码。
ftp #用户 123456 #密码 vip 123456
(2)生成数据库
保存虚拟账号和密码的文本文件无法被系统账号直接调用。我们需要使用db_load命令生成db数据库文件。
安装:
[root@www vsftpd]# rpm -qf `which db_load`
db4-utils-4.7.25-22.el6.x86_64
[root@www vsftpd]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db
选项:
-T 允许应用程序能够将文本文件转译载入进数据库。
-t hash 使用hash码加密。
-f 指定包含用户名和密码文本文件。此文件格式:奇数行用户名、偶数行密码。
[root@www vsftpd]# rm -rf vsftpd_virtualuser.txt #为了安全,删除此文件。后期将不再使用此文件。
(3)修改数据库文件访问权限
[root@www vsftpd]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db [root@www vsftpd]# ls -l /etc/vsftpd/vsftpd_virtualuser.db -rw------- 1 root root 12288 9月 24 13:16 /etc/vsftpd/vsftpd_virtualuser.db
2、配置PAM文件
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。
PAM概述:
PAM(Pluggable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
[root@www vsftpd]# vim /etc/pam.d/vsftpd
修改vsfptd对应的PAM配置文件/etc/pam.d/vsftpd。将默认配置使用“#”全部注释,添加两行
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_virtualuser
3、创建虚拟账号对应的系统用户及FTP共享的目录。
对于公共账号和客户账号,因为需要配置不同的权限,所以可以将两个账号的目录进行隔离,控制用户的文件访问。公共账号ftp对应系统账号ftpuser,并指定其主目录为/var/ftp/share,而客户账号vip对应系统账号ftpvip,指定主目录为/var/ftp/vip。
[root@www vsftpd]# useradd -d /var/ftp/share ftpuser [root@www vsftpd]# useradd -d /var/ftp/share ftpvip [root@www vsftpd]# chmod -R 500 /var/ftp/share/ #修改权限 [root@www vsftpd]# chmod -R 700 /var/ftp/vip/ [root@www vsftpd]# chown ftpuser /var/ftp/share [root@www vsftpd]# chown ftpvip /var/ftp/vip
chmod -R 500 /var/ftp/share/ : 公共账号ftp只允许下载,修改share目录其他用户权限 rx 可读可执行。
chmod -R 500 /var/ftp/vip/ : 客户账号vip允许上传和下载,所以对vip目录权限设置为 rwx ,可读可写可执行。
4、建立配置文件:
一个配置文件无法实现此功能,需要为每个账户建立独立的配置文件,并根据需要进行相应的设置。
(1)修改vsftpd.comf 主配置文件
[root@www vsftpd]# cat /etc/vsftpd/vsftpd.conf | grep -v "#" anonymous_enable=NO #不允许匿名登录 local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd max_clients=300 #设置FTP服务器最大接入客户端数为300个 max_per_ip=10 #设置每个IP地址最大连接数为10 user_config_dir=/etc/vsftpd/vuserconfig #设置虚拟账号的主目录为/vuserconfig userlist_enable=YES tcp_wrappers=YES
(2)建立虚拟账号配置文件
在user_config_dir指定路径下,建立与虚拟账号同名的配置文件并添加相应的配置字段。
首先建立公共账号ftp的配置文件
[root@www vuserconfig]# mkdir /etc/vsftpd/vuserconfig [root@www vuserconfig]# touch /etc/vsftpd/vuserconfig/ftp [root@www vuserconfig]# touch /etc/vsftpd/vuserconfig/vip
配置虚拟账号配置文件,写入以下内容:
[root@www vuserconfig]# vim /etc/vsftpd/vuserconfig/ftp guest_enable=yes guest_username=ftpuser anon_world_readable_only=no anon_max_rate=50000
解释:
guest_enable=yes #开启虚拟账号登录
guest_username=ftpuser #设置ftp 对应的系统账号名称为ftpuser
anon_world_readable_only=no #允许匿名用户浏览整个服务器的文件系统
anon_max_rate=50000 #限定传输速率为50KB/s
注意:
vsftpd对于文件传输速度限制并不是绝对锁定在一个数值上,而是在80%~120%之间变化,比如设置100KB/s,则实际速度在80~120KB/s之间变化。
[root@www vuserconfig]# vim /etc/vsftpd/vuserconfig/vip guest_enable=yes guest_username=ftpvip anon_world_readable_only=no write_enable=yes anon_mkdir_write_enable=yes anon_upload_enable=yes anon_max_rate=100000
解释:
guest_enable=yes #开启虚拟账号登录
guest_username=ftpvip #设置ftp对应的系统账号为ftpvip
anon_world_readable_only=no #允许匿名用户浏览整个服务器的文件系统
write_enable=yes #允许在文件系统写入权限
anon_mkdir_write_enable=yes #允许创建文件夹
anon_upload_enable=yes #开启匿名账号的上传功能
anon_max_rate=100000 #限定传输速度为100KB/s
重启vsftpd服务使配置文件生效
[root@www ~]# service vsftpd restart 关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定]
测试:可以通过ftp客户端和Windows进行测试。
(1)公共账号ftp测试
在公共账号测试前,我们先建立个测试文件。
[root@www ~]# cp /mnt/Packages/mysql-embedded-5.1.73-8.el6_8.x86_64.rpm /var/ftp/share #共享的文件要大一些,方面后期测试下载速度。 [root@www ~]# cp -r /boot/grub/ /var/ftp/share/ #复制一个目录
在Linux下测试。
ftp客户端命令:
lftp ftpIP -u username,passwd
或:
lftp ftpIP -u username
使用公共账号ftp,登录ftp服务器
[root@www ftp]# lftp 192.168.2.208 -u ftp,123456 lftp ftp@192.168.2.208:~> ls drwxr-xr-x 2 0 0 4096 Sep 24 06:30 grub -r--r--r-- 1 0 0 2567552 Sep 24 06:29 mysql-embedded-5.1.73-8.el6_8.x86_64.rpm -r-x------ 1 0 0 2007 Sep 24 05:03 passwd -r-x------ 1 0 0 821772288 Sep 24 05:01 text.txt lftp ftp@192.168.2.208:/> get mysql-embedded-5.1.73-8.el6_8.x86_64.rpm 2567552 bytes transferred in 51 seconds (48.8K/s) #速度限制在50KB/s左右
使用vip账号登录ftp服务器
[root@www ftp]# lftp 192.168.2.208 -u vip 口令: lftp vip@192.168.2.208:~> ls -rw-r--r-- 1 0 0 91459584 Sep 24 06:53 text.txt lftp vip@192.168.2.208:/> put text.log #可以上传 lftp vip@192.168.2.208:/> ls -rw------- 1 505 505 0 Sep 24 06:55 text.log -rw-r--r-- 1 0 0 91459584 Sep 24 06:53 text.txt lftp vip@192.168.2.208:/> rm -r text.log #无法删除 rm: Access failed: 550 Permission denied. (text.log) [root@www ftp]# cp /var/ftp/share/mysql-embedded-5.1.73-8.el6_8.x86_64.rpm /var/ftp/vip/a.zip lftp vip@192.168.2.208:~> ls -r--r--r-- 1 0 0 2567552 Sep 24 07:00 a.zip -rw------- 1 505 505 0 Sep 24 06:55 text.log lftp vip@192.168.2.208:/> get a.zip 2567552 bytes transferred in 26 seconds (97.6K/s) #速度在100KB/s左右
到这一步,我们已经成功创建了两个虚拟账号vip以及ftp,并且权限全部设置完毕。
如果后期vip账号想要删除某个文件怎么办呢?
drwx------ 2 505 505 4096 Sep 24 06:22 text.log lftp vip@192.168.2.208:/> rm text.log/ rm: Access failed: 550 Permission denied. (text.log/) #删除失败
编辑vip账号的配置文件,添加一行。
[root@www vuserconfig]# vim vip guest_enable=yes guest_username=ftpvip anon_world_readable_only=no write_enable=yes anon_mkdir_write_enable=yes anon_upload_enable=yes anon_max_rate=100000 anon_other_write_enable=yes #添加此行
重启vsftpd服务重读配置文件
[root@www vuserconfig]# service vsftpd restart 关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定]
再次尝试删除文件
[root@www ~]# lftp 192.168.2.208 -u vip 口令: lftp vip@192.168.2.208:~> ls -r--r--r-- 1 0 0 2567552 Sep 24 07:00 a.zip -rw------- 1 505 505 0 Sep 24 06:55 text.log lftp vip@192.168.2.208:/> rm -r text.log rm 成功, 删除 `text.log‘ lftp vip@192.168.2.208:/> #成功删除文件
本文出自 “PooV的博客” 博客,请务必保留此出处http://xyhms.blog.51cto.com/12505169/1968187
原文地址:http://xyhms.blog.51cto.com/12505169/1968187