FTP 搭建
第一部分:理论
一. FTP服务器的基本原理
1. 基本概念:ftp是文件传输协议,(file transport portocol)
2. 数据传输模式:主动模式和被动模式 (要和binary ascii 区分一下)
3. 使用的端口号: A 主动模式 :命令控制端口:21 数据传输端口:20
B 被动模式 :命令控制端口:21 数据传输端口:1024之后的随机端口
二. 常用的FTP 服务器软件
1. windows下:iis server-U
2. Linux下:wu-ftp proftp vsftp (现在的主流是vsftp,其他的两种基本被淘汰)
三. Linux常用的服务器软件:vsftp 它是本章的重点:vsery security transport portocol
四.常用的ftp客户端软件
1. 特点:运行在图形环境下的窗口程序,可使用鼠标和通过菜单进行操作,操作方便
2.常用的ftp客户端软件: windows下有Cuteftp leapftp flashxp filezilla是windows下运行的开源软件
Linux下有gftp,是GNOME桌面环境中运行的ftp客户的软件,是我GNOME的重要组成部分
五. voftpd.conf中常用的配置参数:
anonymous_enable=YES (启用匿名用户,即:允许匿名用户登录)
local_enable=YES (启用本地用户,即:允许本的用户登录)
write_enabe=YES (启用本地用户写的权限,即:本的用户登录到宿主目录后有写的权限)
local_umask=022 (本地用户生成文件的掩码,上传文件的权限是644)
【如果上传文件夹的总权限为777,文件为666,可以用 file_open_mode=0777】
【注:文件夹的最大权限是777,文件的最大权限是666】
xferlog_enable=YES (设置为YES时,ftp服务器将启用上传和下载日志。日志文件:/var/log/xferlog
xferlog_std_format=YES (设为YES时,ftp服务器将使用标准的ftp xferlog 日志格式)
dual_log_enable=YES (设置为时将生成两个相似的日志文件分别是/var/log/xferlog和/var/log/vsfptpd.log)
connect_from_port_20=YES (设为YES时,将启用ftp数据端口的连接请求)
pam_service_name=YES (设置PAM认证服务的配置文件名称)
userlist_enable=YES (设为YES时,FTP服务器将检查vsftpd.user_list 文件中的用户是否可以访问ftp服务器)
【userlist_enable=YES userlist_deny=NO 表示vsftpd.user_list 文件中的用户可以登录ftp服务器】
【userlist_enable=YES userlist_deny=NO 表示vsftpd.user_list文件中的用户不可以登录ftp服务器】
【默认情况下userlist_deny=YES,即:vsftpd.user_list文件中的用户不能登录发图片服务器】
listen=YES 设为YES时,ftp服务器以独立方式启动,否则以超级进程的方式启动
tcp_wrappers=YES 设为YES时,ftp服务器将使用tcp_wrappers作为主机访问控制方式
chroot_local_user=YES/NO 限制本地用户是否禁锢在自己的宿主目录中
chroot_list_enable=YES/NO
chroot_list_file=/etc/vsftpd/chroot_list [chroot_list文件中的用户被禁锢在自己的宿主目录中]
max_clients=100 最大客户端的数量
max_per_ip=5 每个ip的最大连接数
local_mal_rate=50000 本地用户最大的传输速率 (单位是byte,字节)
anon_max_rate=20000 匿名用户最大传输速率 (单位是byte,字节)
listen_port=2121 更改ftp默认的端口号
六. ftp 服务器中默认的黑名单:/etc/vsftpd.ftpusers (此文件中的用户不能登录ftp服务器)
七. /etc/vsftpd.user_list 文件具有对vsftpd服务器跟灵活的用户访问控制
1. 如果想让该文件中的用户禁止登录ftp服务器:
userlist_enable=YES
userlist_deny=YES
2. 如果想让该文件中的用户可以登录ftp服务器:
userlist_enable=YES
userlist_deny=NO
八. vsftpd支持的用户类型
1. 匿名用户:匿名用户名称:ftp和anonymous 登录目录:/var/ftp
2. 系统用户:系统中实际存在的用户 登录目录:/该用户的宿主目录
3. 虚拟用户:非系统用户 登录目录: 可手工指定
九. 命令行模式下常用命令:
put (上传,这能上传一个文件)
get (下载,这能下载一个文件)
mput(上传,可上传多个文件)
mget(下载,可下载多个文件)
第二部分:实验
实验一:测试匿名用户和系统用户
1.安装ftp软件包:# rpm -ivh vsftpd
2.启动ftp服务器:# service vsftpd start
3.建立系统用户。(匿名用户不用建立)
4.在客户端登录ftp进行测试:
A. 在cmd里面用命令测试,格式为:ftp 服务器的ip 然后输入用户名和密码
B. 用客户端软件测试: windows下可用flashxp cuteftp leapftp 测试
Linux下可用 gftp测试(先安装gftp 软件包)
【匿名用户测试时,用户名为ftp或anonymous,输入密码时,直接回车即可】
【系统用户测试时,输入系统用户的用户名和密码】
实验二:虚拟用户的支持
1. 建立虚拟用户的口令库文件。(奇数行是用户名,偶数行是密码。在/etc/vsftpd/目录下建立该文件,假设为benet。文件名可自定义)
2. 生产vsftpd的认证文件(需要先安装db4-util软件包)
# db_load -T -t hash -f /etc/vsftpd/benet /etc/vsftpd/benet.db (注意修改该文件的权限)
3. 建立虚拟用户所需要的PAM 配置文件(在/etc/pam.d/目录下创建该文件。文件名可自定义,假设为ftp)
# vim /etc/pam.d/ftp 输入下面内容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/benet(库名)
account required /lib/security/pam_userdb.so db=/etc/vsftpd/benet(库名)
3. 建立虚拟用户登录目录,并修改相应权限(修改主目录权限为700)
# useradd -s /sbin/nologin/ -d /aa qq
# chmod 700 /aa
【该系统用户qq不能登录,宿主目录是/aa。所有的虚拟用户都将登录到/aa这个目录中。-s 和 -d 参数不是必须的】
4. 设置/etc/vsftpd/vsftpd.conf配置文件,在文档末尾添加如下内容:
guest_enable=YES
guest_username=qq(qq是上面的系统用户)
pam_service_name=ftp(ftp是pam认证的模块名称)
user_config_dir=/etc/vsftpd/config(config要手动创建,它是虚拟用户权限配置目录。在该目录中以虚拟用户的用户名编辑文件,设置权限)
5. 进入/etc/vsftpd/config目录,以虚拟用户的名字编辑权限配置文件,可用参数如下:
anon_world_readable_only=NO (表示用户可以浏览ftp目录和下载文件)
anon_upload_enable=YES (表示用户可以上传文件)
anon_mkdir_write_enable=YES (表示用户具有建立目录的权限,但不能删除目录)
anon_other_write_enable=YES (表示用户具有文件改名和删除文件的权限)
local_root=/zz (指定虚拟用户的登录目录)
补充实验
1. 如何实现匿名用户的上传文件权限?
A. 在/var/ftp/目录下建立目录。
B.修改/etc/vsftpd/vsftpd.conf文件: anon_upload_enable=YES (虚拟用户可上传文件)
anon_mkdir_write_enable=YES (虚拟用户可创建目录)
anon_world_readable_only=YES (虚拟用户可浏览和下载文件)
【根据需要设置相应的权限】
2. 如何限制系统用户任意切换宿主目录?
chroot_local_user=YES
3. 虚拟用户aa,权限设置可上传,可建立文件夹,可删除文件夹,最大传输速率为0.5MB,登录目录为/ftpsite
local_root=/ftpsite
anon_world_readable_only=NO
anon_upload-enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=500000