FTP的基本概念
1FTP是什么?
FTP叫做文件传输协议,它的作用就是上传下载文件
2FTP的传输模式(站在服务器角色去看)
⑴主动FTP模式:
第一个过程是客户机主动去连接服务器
第二个过程服务器会打开21端口来接受客户端的访问,以后这个链接就会传输命令
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

第三个当客户机要从服务器上下载东西的时候,会发一条指令给服务器
第四个过程服务器会打开自己的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=