FTP是Internet中应用非常广泛的服务之一,是TCP/IP的一种具体应用,它工作在OSI的第七层,是一种面向连接的协议。
FTP在对外提供服务时需要维护两个连接:一个是控制连接,监听TCP21号端口,用来传输控制命令;另一个是数据
连接,在主动传输方式下监听TCP20号端口,用来传输数据。
FTP有两种工作模式:主动模式(PORT)和被动模式(PASV),而几乎所有的FTP客户端软件都支持这两种模式。
Linux下的FTP软件在很多种,最常见的有wu-ftpd、proftpd和vsftpd等,本文主要讲解vsftpd的管理与配置。
***********
一、VSFTPD的安装与启动
#rpm -qa |grepvsftpd
vsftpd-2.0.1-6
系统默认情况下vsftpd的FTP服务是关闭的,此时需要手工打开:
#service vsftpd {start|stop|restart}
*************
二、配置FTP服务器
vsftpd服务器的用户分为3类:匿名用户、本地用户、虚拟用户。分别应用在不同的场合之中。
下面通过分别配置①匿名账号FTP服务器②本地账号FTP服务器③虚拟账号FTP服务器。来了解它们的应用场合。本文主要来介绍匿名服务器的的有关配置
1.配置匿名账号FTP服务器
示例如下:
在主机(IP为192.168.10.10)上配置只允许匿名用户登录的FTP服务器,使匿名用户具有如下权限:
①允许上传、下载文件(创建匿名用户使用的目录为/var/ftp/anonftp)
②将上传文件的所有者改为tom
③允许创建子目录,改变文件名称或删除文件
④匿名用户最大传输速率设置为20kbit/s
⑤禁止192.168.1.0/24网段上除192.168.1.1的主机访问该FTP
配置过程如下
1.编辑vsftpd的主配置文件/etc/vsftpd/vsftpd.conf文件,对文件中相关的指令进行修改、添加,内容如下:
anonymous_enable=YES
#允许匿名用户(ftp或anonymous)登录
#local_enable=YES
#这里我们不使用本地用户登录,所以把它注释掉
write_enable=YES
#允许本地用户的写权限,因为本地用户的登录已经被注释了,所以这是YES或NO都不会起作用
anon_umask=077
#匿名用户新增文件的umask值。默认值为077
anon_upload_enable=YES
#允许匿名用户上传文件
anon_mkdir_write_enable=YES
#允许匿名用户创建目录
anon_other_write_enable=YES(需自己添加)
#允许匿名用户改名、删除文件
anon_world_readable_only=NO(需自己添加)
#若此值为YES表示仅当所有用户对该文件都拥有读权限时,才允许匿名用户下载该文件;此值为NO,则允许匿名用户下载不具有全部读权限的文件
max_per_ip=2
#设置每个用户同一时段并发下载线程数为2,同时只能下载两个文件
max_clients=100
#设置同时连接FTP服务器的并发用户数为100
dirmessage_enable=YES
#是否启用目录提示信息功能,YES启用NO不启用,默认为YES
xferlog_enable=YES
#是否启用一个日志文件,用于详细记录上传和下载,该日志文件由xferlog_file选项指定
xferlog_file=/var/log/vsftpd.log
#设定记录传输日志的文件名。/var/log/vsftpd.log为默认值
xferlog_std_format=YES
#日志文件是否使用xferlog标准格式,使用xferlog标准格式可以重新使用已经存在的传输统计生成器。但默认的日志格式更有可读性。
#log_ftp_protocol=NO
当此选项激活后,所有的FTP请示和响应都被记录到日志中,这个选项在助于调试,但值得注意的是当提供此选项时,xferlog_std_format不能被激活。默认为NO
connect_from_port_20=YES
#控制连接以PORT模式进行数据传输时使用20端口(ftp-data)
chown_uploads=YES
#允许匿名用户修改上传文件所有权
chown_username=tom
#将匿名用户上传文件的所有者改为tom
#ascii_upload_enable=YES
#ascii_download_enable=YES
#以上两个表明是否允许使用ASCII格式来上传和下载文件,默认值是YES但该指令是注释掉的,所以默认是没有启用的
listen=YES
tcp_wrapppers=YES
#采用tcp_wrappers来实现对主机的访问控制
2.编辑/etc/hosts.allow文件
在该文件添加如下 内容(注意顺序)
vsftpd:192.168.1.1
vsftpd:192.168.1.:DENY
#每行3个字段,用冒号分开,分别为,服务名:主机列表:ALLOW/DENY,不写的话默认为ALLOW,另外需要说明的/etc/hosts.deny文件实际上是不用的,也就是说,这两个文件只要用一个就可以对主机的访问控制,一般都用/etc/hosts.allow文件
3.创建用户tom和上传目录,并修改上传目录属性
#useradd tom
#passwd tom
#mkdir –p /var/ftp/anonftp
#chown ftp.ftp /var/ftp/anonftp
4.很重要,又简单,又容易忘的一步:重启服务
#service vsftpd restart
5.测试vsftpd服务
无论是Linux环境还是Windows环境都有3种访问FTP服务器的方法:一是通过浏览器,二是通过专门的FTP客户端软件,三是通过命令行的方式。关于它的测试很简单,只需对照要求验证即可在此就不再说明了。
一。配置本地账号FTP服务器
1.用户访问控制(顾名思义是对用户访问的限制)
要求如下:(在配置好本地账号的FTP服务器基础上实现)、
①在主机IP为192.168.1.10上配置vsftpd服务器
②只允许本地用户tom、jack和root登录
③更改登录端口号为5555,把每个本地用户的最大传输速率设为1Mbit/s
配置过程如下:
1.编辑/etc/vsftpd/ftpusers文件
首先要知道这个文件是干什么的,这个文件被称为ftp用户的黑名单文件,即在该文件中的本地用户都是不能登录ftp服务器的,所以应确认tom、jack和root这3个用户名不出现在该文件中。
2.编辑/etc/vsftpd/vsftpd.conf
local_max_rate=1000000
#设置本地用户的最大传输速率为1Mbit/s
listen_port=5555
#更改FTP登录端口号为5555
userlist_enable=YES
#启用用户列表文件
userlist_deny=NO(需要自己添加)
#当为NO时,则只允许该文件中的用户登录FTP服务器;为YES,则不允许该文件中的用户登录 FTP服务器
userlist_file=/etc/vsftpd/user_list(需要自己添加)
#指定用户列表文件名称和路径
3.编辑/etc/vsftpd/user_list文件
由于在/etc/vsftpd/vsftpd.conf中userlist_deny=NO所以只允许在user_list中的用户登录FTP服务器。
4.重启服务
#service vsftpd restart
注1:如果在ftpusers和user_list中同时出现某个用户名,当userlist_deny=NO时,是不会允许这个用户登录的,即只要在ftpusers出现就是禁止的。当userlist_deny=YES时,只要在user_list文件中的用户都是被拒绝的,而其它的用户如果不在该文件中,并且也不在ftpusrs中,都是被允许的。
抛开上段的注解,如果想弄清晰,其实很简单,当你想禁止某些用户时,可以只用ftpusers,即在此文件中的用户都是被拒绝的。当你想只允许某些用户时,首先保证这些用户在ftpusers中没有出现,然后设置userlist_deny=NO,并在user_list中添加上你允许的用户名即可。(这时你就会知道当userlist_deny=YES时,user_list文件的作用就和ftpusers文件的作用是一样的了。)
注2:以上的配置是针对用户访问进行了控制,但它仍然是不安全的,为什么呢,因为我们只对用户的访问进行了控制,而只要用户能登录上了FTP,这个用户便可以从自己的主目录切换到其它任何目录中,所以我们的配置虽然对用户的访问进行了控制,但在这点上也产生了一定的安全隐患。那么我们该如何解决这个问题呢,下面继续来介绍“目录访问控制”,而“目录访问控制”正是为了解决这个问题。
二。目录访问控制
vsftpd提供了chroot指令,可以将用户访问的范围限制在各自的主目录中。下面通过实例说明。
要求如下 :(在配置好本地账号的FTP服务器基础上实现)
除本地用户tom外,所有的本地用户在登录后都被限制在各自的主目录中,不能切换到其他目录。
1.编辑/etc/vsftpd/vsftpd.conf文件,添加一条指令:
chroot_local_user=YES
#先对所有的用户执行chroot,即把所有的本地用户限制在各自的主目录中
chroot_list_enable=YES
#因为要求tom用户可以访问任何目录,所以还要激活用户列表文件vsftpd.chroot_list
chroot_list_file=/etc/vsftpd.chroot_list
#指定用户列表文件的路径
2.创建/etc/vsftpd.chroot_list文件,在该文件中添加上用户名tom。
3.重启服务
#service vsftpdrestart
4.进行测试
这时会发现除tom用户外,其他的所有用户登录的主目录都被限制在了自己的主目录中,这时我们也就消除了上面所讲的安全隐患。
三。配置虚拟账号FTP服务器
vsftpd服务器提供了对虚拟用户的支持,它采用PAM认证机制实现了虚拟用户的功能。
很多人对虚拟账号FTP的定义有些模糊,其实我们可以把虚拟账号FTP看作是一种特殊的匿名FTP,这个特殊的匿名FTP,特殊在哪里呢,它拥有登录FTP的用户名和密码,但是它所使用的用户名又不是本地用户(即它的用户名只能用来登录FTP,而不能用来登录系统),并且所有的虚拟用户名,在登录FTP时,都是在映射为一个真实的账号之后才登录到FTP上的。(需要说明的是这个真实的号是可以登录系统的,即它和本地用户在这一点上性质是一样的。)
要想真正了解虚拟账号FTP,就要自己多练,下面通过实例来介绍一下虚拟账号FTP的配置。
要求:创建5个虚拟用户用于登录FTP服务器,其用户名为user1、user2、user3、user4、user5。为简单起见口令分别为:1、2、3、4、5。
配置过程如下:
①创建虚拟用户数据库文件。
首先创建一个存放虚拟用户的用户名及口令的文本文件/etc/1.txt(这个文本文件的命名是任意的),其内容如下:
user1
1
user2
2
user3
3
#奇数行为虚拟用户名,偶数行为相应的口令
然后,执行如下命令生成虚心用户的数据库文件,并改变数据库文件的权限:
#db_load –T –t hash –f /etc/1.txt/etc/vsftpd.db
#chmod 600/etc/vsftpd/vsftpd.db
②创建PAM认证文件。创建虚拟用户使用的PAM认证文件/etc/pam.d/vsftpd.virtual,内容如下:
auth required/lib/security/pam_userdb.so
account required/lib/security/pam_userdb.so
#共两条规则:第一条的功能是设置利用pam_userdb.so模块来进行身份认证。第二条是检查账号是否被允许登录系统,账号是否过期,是否有时间段的限制。这两条规则都是采用的数据库/etc/vsftpd/vsftpd.db。(只是每一条规则的最后的vsftpd省略了.db后缀)
③创建虚拟用户所对应的真实账号及其所登录的目录,并设置权限:
#useradd –d /var/virftp vftp//这里的目录与账号的命名都是任意的,但最好有有意义
#chmod 744 /var/virftp
④编辑/etc/vsftpd/vsftpd.conf文件
anon_upload_enable=YES
#允许虚拟用户上传文件
guest_enable=YES
#激活虚拟用户的登录功能
guest_username=vftp
#指定虚拟用户所对应的真实用户,这个真实的用户名就是在第③项中添加的用户名。
pam_service_name=vsftpd.virtual
#设置PAM认证时所采用的文件,它的值是和第②中创建PAM认证文件的名字是相同的。
⑤保存配置,重启服务ok:
#service vsftpd restart
(关于虚拟用户:虚拟用户是在匿名用户的基础上增加了用户名和口令的登录,多了一层安全措施,所有的虚拟用户登录到FTP服务器后,都是被限制在各自的主目录之中的,即虚拟用户都是被执行了chroot的。在配置虚拟用户时,所有创建的文件的名字都是任意的,但一定要保证对应关系,并且最好要有一定的意义)
*******
配置虚拟用户时各个文件名的对应关系(以上述的配置为例)
1.用户生成虚拟用户数据库文件的文本文件是任意的,如上述中的1.txt
2.虚拟用户数据库文件/etc/vsftpd/vsftpd.db与在PAM认证文件内容中指定的数据库对应即:/etc/vsftpd/vsftpd.db
与
auth required/lib/security/pam_userdb.so
account required/lib/security/pam_userdb.so
3.真实账号要与在/etc/vsftpd/vsftpd.conf中指定的真实用户名相同,即:
#useradd –d /var/virftpvftp
与
guest_username=vftp
4.PAM认证文件/etc/pam.d/vsftpd.virtual与配置文件中的pam_service_name=vsftpd.virtual