FTP的基本概念
1FTP是什么?
FTP叫做文件传输协议,它的作用就是上传下载文件
2FTP的传输模式(站在服务器角色去看)
⑴主动FTP模式:
第一个过程是客户机主动去连接服务器
第二个过程服务器会打开21端口来接受客户端的访问,以后这个链接就会传输命令
 
第三个当客户机要从服务器上下载东西的时候,会发一条指令给服务器
第四个过程服务器会打开自己的20端口,并把数据主动送到客户机的一个随机端口上
⑵被动FTP模式:
第一个过程是客户机主动去连接服务器
第二个过程服务器会打开21端口来接受客户端的访问,以后这个链接就会传输命令
 
第三个当客户机要从服务器上下载东西的时候,会发一条指令给服务器
第四个过程服务器会打开一个随机端口,并通过21告诉客户机打开的端口号,并等待客户机的连接
原因:因为现在大多数的用户都使用ADSL来连接网络,ADSL的连接方式中客户机是没有静态IP地址的,如果使用ADSL拨号,公网地址会被绑定到ADSL的外接口上,那如果FTP服务器主动把数据送到客户端的话,那数据只能到达ADSL的外接口,但是无法到局域网中的客户机上。这是为什么现实生活中大部分的FTP都是被动模式的原因。IE浏览器中有默认配置
3WINDOWSLINUX下常见的FTP服务器端软件
LINUX下:
wu-ftpd:
优点:
①出现的早,稳定,功能完善
缺点:
①代码零乱,不是很规整
②安全性比较差
proftpd:为了改善wu-ftpd的缺点
优点:
①代码规整了很多
②安全性有所提升
③在限制权限角度,功能还是很强的
缺点:
①工作效率不是非常的高
②搭建一些虚拟的服务器不是特别强大
vsftpd
优点:
①安全性非常高
②传输效率很高
缺点:
①对权限的限制不是很灵活
②对上传下载的速率限制也不是很灵活
二、vsftpd服务器的安装和配置
1。安装软件包
在第1张光盘中,名字叫做vsftpd
安装rpm  -ivh  vsftpd….rpm
2。目录结构
⑴主目录:/etc/vsftpd
vsftpd.conf就是它的主配置文件
注:为了获取vsftpd.conf中配置语句的含义,可以使用man  vsftpd.conf
主配置文件中的语句含义:
anonymous_enable=yes
使用匿名账户可以登录FTP服务器
跟它相关的:
local_enable=yes:使实名账户可以登录FTP
guest_enable=yes:使虚拟账户可以登录FTP
write_enable=yes
使用本地账户可以上传文件到服务器
local_umask=022
umask:类似于netmask,作用如下:
文件的当前权限+umask=666
文件夹的当前权限+umask=777
例如:上面是022,那上传文件的权限就是:
文件权限+022=666              上传的文件权限默认是644
dirmessage_enable=yes
dir:目录
message:消息
含义:能够显示目录消息,作用是当用户切换目录时,可以显示切换后目录的注意事项
配置方法:在切换后的目录下放一个.message文件,里面写入注意事项内容就可以了
xferlog_enable=YES
启用日志功能
跟它相关:
xferlog_std_format=YES
以标准的日志格式写日志
connect_from_port_20=YES
在主动模式中使用,允许使用20端口进行连接
pam_service_name=vsftpd
FTP登录时的认证模块的名字
认证模块通常位于/etc/pam.d下,好多服务器都使用认证模块进行登录认证
listen=YES
服务器处于监听状态
tcp_wrappers=YES
使用FTP支持TCP_wrapper功能,可以使用防火墙进行访问控制
3。两个对用户登录起到限制作用的文件
/etc/vsftpd.ftpusers
所有添加到这个文件中的用户都不能登录FTP服务器
⑵黑白名单
在主配置文件启用userlist_enable=yes,启用user  list功能
黑名单:
userlist_deny=yes(禁止userlist中的用户)
userlist_file=/etc/vsftpd.user_list(默认的文件名,可以修改)
白名单:
userlist_deny=no(允许userlist中的用户)
userlist_file=/etc/vsftpd.user_list(默认的文件名,可以修改)
 
注:如果一个用户同时被添加到/etc/vsftpd.ftpusers里和白名单中,那用户也是不能登录FTP服务器的
 
4。启动被登录FTP服务器
⑴登录账户:
匿名账户:anonymousftp两个
实体账户:大家在服务器中自己建立
⑵登录FTP服务器
ftp  服务器的IP地址
⑶登录后的主目录
匿名账户:/var/ftp下,通过 anon_root=目录名 来进行修改
实体账户:默认登录到自己的宿主目录下,可以通过 local_root=目录名 来进行修改
三、解决安全性问题
1。禁锢用户在自己的主目录下
⑴禁锢所有的本地用户在登录后的目录下
vi  /etc/vsftpd/vsftpd.conf
添加 chroot_local_user=yes OK
⑵禁锢指定的本地用户在登录后的目录下
在主配置文件添加或者启用下面两句
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd.chroot_list
把要禁锢的本地用户名添加到上面的文件就可以达到目的
2.使用虚拟用户登录FTP服务器
⑴建立虚拟用户的文件
vi  /etc/vsftpd/test.txt
内容写法:奇数行是用户名,偶数行是密码
⑵转换成hash写法
命令:db_load  -T  -t  hash  -f  /etc/vsftpd/test.txt  /etc/vsftpd/test.db
-T:把文件内容转换成跟berkerly格式想兼容的写法
-t:把文件内容写成hash写法
-f:指明转换的源文件是谁
⑶把上面生成的.db文件写成一个pam模块,供FTP去使用
vi  /etc/pam.d/vsftpd.test
auth  required  /lib/security/pam_userdb.so  db=/etc/vsftpd/test
account  required  /lib/security/pam_userdb.so  db=/etc/vsftpd/test
注:虽然我们上面生成的文件叫test.db,但是在pam文件中指出后面的db文件时,不能加.db扩展名,因为PAM文件会自动追加.db的扩展名
⑷生成一个虚拟用户在系统内的运行账户
原因:因为虚拟账户是我们自己写的,系统内根本就没有,那系统也就无法识别虚拟账户,为了让系统正常识别,我们要在系统内建立一个账户身份,当虚拟用户登录FTP时,在系统内就使用刚刚建立起的账户身份去运行
命令如下:
mkdir  /ftpsite -------/下为账户建立他的主目录
useradd  virtual  -d  /ftpsite  -M
解释:用户名为virtual-d是指明用户的宿主目录;-M是指删除其home下的主目录
⑸把上面建立好的PAM文件,账户身份都添加主配置文件中
vi   /etc/vsftpd/vsftpd.conf
guest_enable=yes----------启用虚拟用户
guest_username=virtual---------指明虚拟用户在系统中的真实身份
修改pam_service_name=vsftpd.test---------把系统中原来的认证模块改成vsftpd.test文件
⑹重启服务器,登录进行验证
3.给虚拟用户限制权限
⑴建立一个存放虚拟用户权限限制文件的目录
mkdir  /etc/vsftpd/test_dir
⑵把建立好的上面的目录写入到主配置文件,让FTP也能识别
user_config_dir=/etc/vsftpd/test_dir
⑶写不同虚拟用户的权限限制文件
vi  /etc/vsftpd/test_dir/aa
vi  /etc/vsftpd/test_dir/bb
写入内容:
anon_upload_enable=yes         --------控制虚拟用户可以上传文件
anon_world_readable_only=NO      --------控制用户能否下载文件
注意:注意内容的含义,如果是 只读=NO,就是能下载
如果是  只读=YES,那就不能下载
anon_mkdir_write_enable=YES     -------让用户能够创建目录
anon_other_write_enable=YES     -------让用户能够执行删除,改名的操作
注:除了上面的语句,其它的前面是anon的语句都可以用来限制虚拟账户访问FTP
比如限制上面下载的速度可以使用anon_max_rate=
改变虚拟用户登录的主目录可以使用anon_root=