FTP全名是FileTransfer Protocol(文件传输协议) C/S架构linux
简介:数据库
下面是关于FTP这个服务的属性vim
(1)FTP服务相关软件windows
IISServ-U Vsftpd proftpd pureftpd服务器
(2)FTP客户端相关软件网络
ftp命令 CuteFTP FlashFTP LeapFTP Filezilla gftp kuftp架构
(3)VSFTP的守护进程并发
/usr/sbin/vsftpdapp
(4)FTP的启动脚本tcp
/etc/init.d/vsftpd
(5)FTP的端口
TCP协议的20,21端口与客户端进行通讯
20用于创建数据链接,传输文件数据。(数据端口)
21用于创建控制链接,并传输FTP控制命令。(命令端口)
(6)用户控制列表文件
/etc/vsftpd/ftpusers 文件中的用户禁止登陆FTP服务器(黑名单)
/etc/vsftpd/user_list 文件中的用户可能被禁止或容许登陆FTP服务器,具体看vsftpd.conf的设置
(7)工做模式
主动模式:
客户端想服务端21端口发送创建链接请求,须要传输数据时,客户端会经过port命令告诉服务器本身监听的端口,服务器会主动经过20端口与客户端创建数据链接。
被动模式
客户端想服务端21端口发送创建链接请求,须要传输数据时,
服务器以pasv命令告诉客户我打开了某个端口(非20端口),你来链接我,客户端会像服务器的非20端口创建数据链接
(8)根据传输文件是否进行字符转换分为:
文本模式(又称为ASCII)以文本序列传输数据,用的较多
二进制模式(又称为Binary模式)以二进制序列传输数据
主配置文件
/etc/vsftpd/vsftpd.conf
搭建FTP服务:
1、搭建yum仓库
(1)mount/dev/cdrom /mnt
(2)cat /etc/yum.repos.d/rhel-debuginfo.repo
[rhel-Server]
name=Red Hat Enterprise Server
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
2、安装
yum-y install vsftpd*
配置选项讲解
实验1
1. 建立测试文件
2. 匿名用户ftp对/var/ftp/pub有写入权限
3. 容许匿名用户浏览
4. 容许用户(匿名,本地,虚拟)有上传权限
5. 容许匿名用户有上传权限
6. 容许匿名用户有上传文件夹权限
7. 禁止匿名用户有删除,覆盖等权限
(1)查看ftp的默认根路径,默认是有一个pub目录(默认的跟目录),
[root@Centos2~]# ls /var/ftp/
pub
(2)备份配置文件
cd /etc/vsftpd/vsftpd.confg
cp vsftpd.conf vsftpd.bak
vim vsftpd.conf
内容以下
write_enable=YES
anon_umask=022
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO 是否容许匿名用户有其余写入权(更名,删除,覆盖)
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
(3)启动服务
service vsftpd start
(4)改变根目录的属主,若是不改变的话,只能访问,其余权限不能生效。由于咱们是以ftp用户的身份访问的,而pub默认的属主属组是root。
chown ftp /var/ftp/pub
验证:
在网络或是计算中输入ftp地址:格式以下图。
咱们会看到默认的pub目录。
进入到pub目录下,能够建立和上传测试目录了。如图2
注意:(1)修改完配置以后须要重启完服务才能生效
(2)还须要重新从客户端登录,不然修改后的配置看不到效果。
实验2
1. 建立测试账号u1、u2、u3密码都为“user”
2. 容许本地用户访问
3. 将权限掩码设为077
4. 将本地账号禁锢在宿主目录中
5. 只容许u1、u2两个用户能够登陆
建立测试用户,而且设置密码
[root@crushlinux ~]# useradd u1
[root@crushlinux ~]# echo "user" |passwd --stdin u1
[root@crushlinux ~]# useradd u2
[root@crushlinux ~]# echo "user" |passwd --stdin u2
[root@crushlinux ~]# useradd u3
[root@crushlinux ~]# echo "user" |passwd --stdin u3
在配置文件中加入红色部份内容
[root@crushlinux ~]# vi /etc/vsftpd/vsftpd.conf
local_enable=YES
local_umask=077
chroot_local_user=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
将容许登录的用户加入到白名单中
vi /etc/vsftpd/user_list
u1
u2
service vsftpd restart
登录验证
格式为:ftp://用户名:密码@ftpIP地址
登录上默认是空白的,由于这是用户的家目录。
用u3用户登录,会报错误(windows不一样系统报错不会彻底一致):
实验3
构建基于虚拟用户的FTP服务
建立帐号数据
1.创建虚拟FTP用户的账号数据库文件
2.建立FTP根目录及虚拟用户映射的系统用户
3.创建支持虚拟用户的PAM认证文件
添加虚拟用户支持
4.在vsftpd.conf文件中添加支持配置
5.为个别虚拟用户创建独立的配置文件
启动服务并测试
6.从新加载vsftpd配置
7.使用虚拟FTP帐户访问测试
实验部分
1.创建虚拟FTP用户的账号数据库文件用到db_load工具先安装软件包
rpm -ivh db4-utils-4.7.25-17.el6.x86_64.rpm
cd/etc/vsftpd/
2、建立虚拟用户文件
vim user
a
1
b
1
c
1
基数行表明用户名,偶数行表明密码
经过db_load工具建立出Berkeley DB格式的数据库文件
db_load -T -t hash -f user user.db
-f 指定数据原文件
-T 容许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
-t hash 读取文件的基本方法
3、建立虚拟用户对应的系统用户
useradd -s /sbin/nologin vu
4、创建支持虚拟用户的PAM认证文件
vi/etc/pam.d/vsftpd.vu
加入如下两行
auth required /lib64/security/pam_userdb.sodb=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
对应刚才生成user.db的文件
5、在vsftpd的配置文件中支持虚拟用户
注意:在作虚拟用户的时候,必定要去掉userlist_deny=NO
这个选项,不然会显示用户验证失败
vi /etc/vsftpd/vsftpd.conf
guest_enable=YES 启用用户映射功能
guest_username=vu 指定映射的系统用户名称
pam_service_name=vsftpd.vu 指定新的PAM认证文件
local_enable=YES
local_umask=077
chroot_local_user=YES 若是红色3条配置没有的话就会报错:用户身份验证失败
virtual_use_local_privs=YES
若是没有这条配置的话上传将会显示错误.这条最重要
还要注意每行配值的末尾不要有空行,不然也会有报错
6.为个别虚拟用户创建独立的配置文件
vi /etc/vsftpd/vsftpd.conf 加入下面一行
user_config_dir=/etc/vsftpd/user_dir 用户配置目录支持
为用户a、b创建独立的配置目录及文件这一行也是必须有的
mkdir /etc/vsftpd/user_dir
vim a
local_root=/test 规定了a用户的根目录 注意:必定要把目录的属主改成虚拟用户对应的系统用户。
默认就是全部权限
总结:本地用户和虚拟用户不能同时登陆、由于认证方式只有一种
本地是pam_service_name =vsftpd
虚拟是pam_service_name=vsftpd.vu
实验4
1 修改vsftpd服务的监听地址,端口
1.1 IP为:192.168.200.129
1.2 端口为:2121
2 使用vsftpd服务的被动模式
2.1 下限端口为24500
2.2 上限端口为24600
3 限制vsftpd服务的并发数,传输速度
3.1 限制并发客户链接最多200
3.2 限制每一个IP地址的链接数最多50
3.3 限制匿名用户传输速率为50KB/s
3.4 限制本地用户传输速率为200KB/s
[root@crushlinux ~]# netstat-naptu |grep "vsftpd"
[root@crushlinux ~]# vi/etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.200.129
listen_port=2121
pasv_enable=YES
pasv_min_port=24500
pasv_max_port=24600
max_clients=200
max_per_ip=50
anon_max_rate=50000
local_max_rate=200000
[root@crushlinux ~]# servicevsftpd restart
[root@crushlinux ~]# netstat-naptu |grep "vsftpd"
tcp 0 0 192.168.200.129:2121 0.0.0.0:* LISTEN 3552/vsftpd