ftp详解

FTP

简介

ftp(file transfer protocol,文件传输协议)是 Internet 上仍常用的最老的网络协议之一 , 它为系统提供了通过网络与远程服务器进行传输的简单方法。FTP是一个客户机/服务器系统

ftp是文件共享服务。工作在应用层。

linux中三种常用的文件服务:

(1)ftp:工作在应用层的文件共享协议,在client端和server端的通信是通过tcp/ip协议的上层服务来实现的。

(2)nfs(Netwok File System网络文件系统):基于rpc(remote Procedure Call远程过程调用)的文件共享服务。rpc:让两台主机间的进程直接依赖于二进制协议完成通信。如hadoop

(3)samba:基于CIFS(通用文件系统)/SMB文件共享。实现文件跨平台传输。让linux支持cifs协议。让linux出现在windows的网上邻居中

linux实现ftp协议的软件:

服务器端的程序(红帽中):

Vsftpd(Very Secure File Transfer Protocol Damon)注重安全

客户端程序:

命令行格式(CLI):ftp,lftp

FTP有两个连接:

命令连接(控制连接):接收用户发来的命令并检查文件发来的命令;一直在线。服务端端口21/tcp

数据连接:进行传输文件;按需打开,按需关闭。

按数据传输的请求由谁发起分为主动模式和被动模式。主动、被动模式是站在服务器端的角度。

主动模式:当客户端请求数据传输时,服务器打开20/tcp端口主动向客户端发送数据。此时服务器端的端口是20/tcp。如果客户端有防火墙则不能进行数据传输。因为主动连接时,服务器端主动连接客户端的请求会被客户端的防火墙挡掉,所以连接不上。

被动模式:当客户端请求数据传输时,服务器端通过命令连接给客户端发送一个报文,告诉客户端自己已经打开了一个端口,让客户端主动连接这个端口,从而进行传输数据。此时服务器端口随机。

主动模式:

Server

Client

2121221




0222




被动模式:

Server

Client







防火墙:“挡掉进来的连接”。当主机接入互联网,防火墙将屏蔽“不请自来的请求和连接。关闭不需要的端口。端口就相当于“门”

防火墙的“连接追踪”功能:自行判断连接和连接的关系。

追踪来回请求的特征

客户端发起的新建立的连接请求:new

建立连接的响应:established

每一个数据连接和每一个命令连接有关系:related(相关联的会放行)

两种模式的比较:

共同点:都是通过21/tcp端口进行用户验证及管理

不同点:传输数据的方式不同

关于端口:tcp/ip协议中,Tcp 65535个端口,Udp 65535多个端口

一般用到的端口是1~65535。

1~1023为系统端口(BSD保留端口),只有系统特许的进程才能使用;

1024~65535为用户端口;

1024~5000为BSD临时端口,一般的应用程序使用1024~4999来进行通信;

5001~65535为BSD服务器(非特权)端口,用户自定义端口


Vsftpd

vsftpd(Very Secure FTP Deamon):非常安全的ftp后台服务。

21/tcp(/etc/services查看端口号)

配置文件目录:/etc/vsftpd(rpm包)

服务脚本:/etc/init.d/vsftpd

主程序:/usr/sbin/vsftpd

匿名用户文件根目录(ftp用户的家目录):/var/ftp(不允许除了root外用户其他用户有对此目录的写权限,包括ftp用户)。不能允许运行这个服务的用户拥有写权限,所以在/var/ftp/下建立子目录放置上传的文件。setfacl -m u:ftp:rwx /var/ftp/upload

默认配置文件让匿名用户(anonymous)只能下载位于CHROOT(/var/ftp)目录中的内容。意为远程FTP客户端能以用户anonymous或ftp身份连接到服务器(不需要密码),并从/var/ftp目录下载文件(其本地ftp用户可以读取这些文件)。getent passwd ftp  ##查看ftp用户的家目录

支持上传和下载

下载风险小

上传风险大

基于PAM(可插入式认证模块)实现用户认证:

/etc/pam.d/*

/lib/security/*  模块文件

ftp本身信息传输是明文的,包括认证机制都是明文的。抓包分析后就能得到用户名和密码

数据传输模式(自动):两种传输都支持(遵循传输文件本身的模式)

二进制传输:

文本传输:

ftp的用户:

匿名用户anonymous(最终会映射为系统用户):ftp

虚拟用户(最终会映射为系统用户):

系统用户

(1)安装vsftpd:yum install vsftpd  大小140k

安装生成的文件:rpm –ql vsftpd

  1. 开启服务

/etc/init.d/vsftpd start

(3)基本配置

文件服务权限:文件系统权限*文件共享权限

默认:匿名用户可以登录、可以下载;本地用户可以登录、上传

【几个常见报错】

550:表示服务本身禁止使用某项功能

530:登录系统时输错密码,登录失败

553:本地文件的权限

【匿名用户】

匿名用户登录:anonymous_enable=YES | NO  ##默认情况下

匿名用户上传:

1.配置文件

write_enable=YES

anon_upload_enable=YES

2.上传目录权限:

Chgrp ftp /var/ftp/pub

Chmod 770 /var/ftp/pub或

Mkdir /var/ftp/upload

Chgrp ftp /var/ftp/upload

Chmod 770 /var/ftp/upload

3.selinux相关设置

setsebool -P allow_ftpd_anon_write on

setenforce 0

匿名用户上传文件权限修改:anon_umask=022 ##将文件权限改为644

匿名用户家目录修改(注意家目录除root用户外,其他用户不能有写权限)

anon_root=/dir

匿名用户建立目录:anon_mkdir_write_enable=YES

匿名用户删除、重命名:anon_other_wtite_enable=YES

匿名用户下载:anon_world_readable _only =NO(对于权限为600的文件默认无法下载,必须使用此参数)

匿名用户上传身份的修改:不能为root,不能为系统不存在的用户

Chown_uploads=YES

Chown_username=student

匿名用户上传限速(单位为字节):anon_max_rate=102400

【本地用户】注意此处selinux关闭或者设置相应规则

本地用户登录:新建用户tom,并给tom一个密码:本地用户即能在/etc/passwd中找到的用户。

# echo ‘cyl&647308‘ |passwd --stdin tom

local_enable=YES

pam_service_name=vsftpd,这是本地用户默认的认证模块

本地用户可写:write_enable=YES

本地用户上传文件权限:local_umask=077

本地用户家目录更改:local_root=/dir

将所有本地用户锁在家目录中:chroot_local_user=YES(注意本地用户目录权限小于755)

3.本地用户登录进去默认在自己的家目录里,eg:/home/tom

可以进入其他目录查看文件等,可以获取到自己想要的资源。

4.将某个用户锁定在自己的家目录中:

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list(在此文件中写入用户名)

eg:vim /etc/vsftpd/chroot_list

tom

5.所有写在/etc/vsftpd/ftpusers中的用户被拒绝访问ftp服务器(cat /etc/pam.d/vsftpd)

例如:jerry在此文件中,且在/etc/vsftpd/loginusers文件中,进行了用户验证

(2)启用/etc/vsftpd/userlist文件:

userlist_enable=YES

白名单userlist_deny=NO

# Cat /etc/vsftpd/user_list

Jerry

(2)黑名单 userlist_deny=YES

6.守护进程:

独立守护进程:xinetd是一个独立守护进程。适用于访问量特别大,用户在线时间比较长的。

瞬时守护进程:由超级守护进程xinetd代为管理。访问量比较小,用户连接时间不大长。

vsftpd配置为瞬时守护进程时,在/etc/xinetd.d/下添加一个瞬时守护进程脚本或者配置文件(格式后文再说)

【虚拟用户】

(1)创建虚拟账号:

#vim /etc/vsftpd/loginusers  //loginusers名称任意取,注意一行用户名一行密码

ftpuser1

123

ftpuser2

123

#db_load -T -t hash -f /etc/vsftpd/loginusers  /etc/vsftpd/loginusers.db

-T  //指定执行动作为transfer

-t  //转化方式哈希加密

-f  //指定文件名

#vim /etc/pam.d/ckvsftpd

account required pam_userdb.so db=/etc/vsftpd/loginusers

auth requied pam_userdb.so db=/etc/vsftpd/loginusers

//用户帐号 认证必须

目录/etc/pam.d下的文件均为认证文件,认证就是一个将外来信息与系统文件中记录的信息匹配的一个过程,匹配通过则通过认证,认证是一个程序,需要相关的模块来完成,这些模块记录在系统库文件中

(2)创建本地用户到虚拟用户的映射:(默认ftp用户为虚拟用户的本地用户映射),可以登录到其他目录。

Useradd ftpuser

#vim /etc/vsftpd/vsftpd.conf

guest_username=ftpuser

guest_enable=YES

(3)虚拟账号家目录独立设定:

mkdir /ftpusershome

chgrp ftpuser /ftpusershome

chmod g+s /ftpusershome

mkdir /ftpuserhome/ftpuser{1,2}

#vim /etc/vsftpd/vsftpd.conf

local_root=/ftpuserhome/$USER  //指定本地用户家目录

user_sub_token =$USER  //指定$USER是个shell中的变量,使其生效

(4)虚拟帐号配置独立

打开账户独立功能:user_config_dir=/etc/vsftpd/userconf

mkdir /etc/vsftpd/userconf

vim /etc/vsftpd/userconf/ftpuser1

在此文件中配置文件中的所有参数,此文件的优先级高

在每一个目录下创建隐藏文件.massage:dirmassage_enable=YES,当客户端切换到此目录下,会先显示.massage文件中的内容。

定义vsftpd的资源访问:

Max_client=

Max_per_ip=

默认以文本模式上传文件:ascii_upload_enable=YES(一般不要设置!)

默认以文本模式下载文件:ascii_download_enable=YES(一般不要设置!)

将vsftpd定义为独立守护进程:listen=YES

安全通信方式:

(1)ftps:ftp+ssl/tls

(2)sftp:OpenSSH,SubSystem,sftp

虚拟用户映射到匿名用户ftp。

基于mysql中的数据库和表中的字段验证用户账号。

虚拟用户:

  1. 本地数据文件方式
    1.添加虚拟用户口令文件
    [[email protected] /]#vi /etc/vsftpd/vftpuser.txt
    添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。
    ftpuser1

123

ftpuser2

123

将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。
首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。

[[email protected] /]#rpm –qa |grep db4-utils
[[email protected] /]#rpm –ivh db4-utils-4.3.29-9.fc6.i386.rpm
下面使用db_load命令生成虚拟用户口令认证文件。
[[email protected] /]#db_load –T –t hash –f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db

3.编辑vsftpd的PAM认证文件
在/etc/pam.d目录下,
[[email protected] /]#vi /etc/pam.d/vsftpd
将里面其他的都注释掉,添加下面这两行:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser

//64为64,32位的是/lib/…..
4.建立本地映射用户并设置宿主目录权限
所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码。
[[email protected] /]#useradd –d /home/vftpsite –s /sbin/nologin vftpuser
[[email protected] /]#chmod 700 /home/vftpsite

5.配置vsftpd.conf(设置虚拟用户配置项)
[[email protected] /]#vi /etc/vsftpd/vsftpd.conf
guest_enable=YES #开启虚拟用户
guest_username=vftpuser #FTP虚拟用户对应的系统用户
pam_service_name=vsftpd #PAM认证文件

6.重启vsftpd服务
[[email protected] /]#service vsftpd restart

7.测试虚拟用户登录FTP
C:\User\Administrator>ftp 192.168.120.240
连接到192.168.120.240。
220 Welcome to BOB FTP server
用户(192.168.120.240(none)):ftpuser1
331 Please specify the password.
密码:
230 Login successful.

实验:

linux主机部署ftp服务,建立两个ftp用户t01,t02 属于ftp组,不允许登陆linux系统,只能登陆ftp;要求能实现匿名用户下载,限制同时最多连接3个用户,FTP日志文件放在 /var/log/FTP/ftp.log

安装vsftpd并开启服务,火墙selinux关闭
useradd -g ftp -d /var/ftp/pub/ -s /sbin/nologin t01

useradd -g ftp -d /var/ftp/pub/ -s /sbin/nologin t02

# cat /etc/passwd

t01:x:500:50::/var/ftp/pub/:/sbin/nologin

t02:x:501:50::/var/ftp/pub/:/sbin/nologin

max_clients=3                      #允许的最大连接数3

vsftpd_log_file=/var/log/FTP/ftp.log               #指定日志文件位置

[[email protected] pub]# ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

500 OOPS: failed to open xferlog log file:/var/log/FTP/ftp.log

ftp> quit

解决

# vim /etc/vsftpd/vsftpd.conf

vsftpd_log_file=/var/log/FTP/ftp.log

[[email protected] pub]# /etc/init.d/vsftpd restart

Shutting down vsftpd: [  OK  ]

Starting vsftpd for vsftpd: [  OK  ]

[[email protected] pub]# ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

220 (vsFTPd 2.2.2)

Name (localhost:root): t01

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls

227 Entering Passive Mode (127,0,0,1,31,70).

150 Here comes the directory listing.

-rw-r--r--    1 0        0               0 Aug 18 12:01 cyl

-rw-r--r--    1 0        0           10240 Aug 19 02:43 shell.tar.gz

226 Directory send OK.

ftp> quit

221 Goodbye.

时间: 2024-10-10 11:50:07

ftp详解的相关文章

详解“FTP文件传输服务”安装配置实例

"FTP文件传输服务"安装配置实例 家住海边喜欢浪:zhang789.blog.51cto.com 目录 简介 ftp工作原理 常见的FTP服务 Vsftpd服务器的安装 Vsftpd.conf配置文件详解 配置FTP服务器实例 实例:配置匿名用户 实例:配置本地用户登录 实例:配置虚拟用户登录(MySQL认证) 实例:控制用户登录 实例:设置欢迎信息 分析vsftpd日志管理 FTP服务器配置与管理 简介 FTP 是File Transfer Protocol(文件传输协议)的英文简

linux FTP配置详解

一.vsftpd说明: LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd. 访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:  (1)anonymous(匿名帐号) 使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己

FTP命令详解

转载自http://www.edu.cn/20010830/210045.shtml FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令.熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效. FTP的命令行格式为:ftp -v -d -i -n -g [主机名],其中-v显示远程服务器的所有响应信息:-n限制ftp的自动登录,即不使用:.n etrc文件:-d使用调试方式:-g取消全局文件名. f

ftp用户类型、配置文件详解以及“425 Security:Bad IP connection”解决方式

一:ftp用户类型 1:匿名用户anonymous,实际登陆访问文件目录时,是使用本地系统用户ftp登陆,访问ftp的家目录即/var/ftp,默认此目录只有root才有写权限(ftp的安全机制),推荐在此目录下创建目录并赋予ftp写权限 2:本地系统用户,登陆时会直接访问此用户的家目录,为了安全起见在操作系统创建用户时添加"-d /bin/nologin",设置此用户为不可登陆操作系统 3:虚拟用户,使用mysql等数据库管理用户,需在配置文件上将用户映射到某一本地系统用户 二:ft

FTP服务器工作原理的及配置详解

FTP服务器工作原理的及配置详解 FTP工作原理概述 FTP:file transfer protocol 它也是一个C/S架构的服务.server:监听在套接字21/tcp端口.按照套接字监听工作状态可以分为两类: 命令连接:发送文件管理类命令,始终处于连接状态,始终监听在21/tcp端口. 数据连接:主要是实现数据传输,这种连接是按需连接的,而且在传输结束会立刻中断. 对于数据连接还有两种不同的工作模式: 主动工作的模式:服务器根据监听在21端口接收到的命令,使用自己的20号端口,将数据传输

linux 下FTP服务的搭建详解

第1章 centos 6.8搭建FTP服务详解 1.1搭建环境: [[email protected] ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [[email protected] ~]# uname -r 2.6.32-642.el6.x86_64 [[email protected] ~]# uname -m x86_64 [[email protected] ~]# 1.2yum 安装FTP软件: [[email pro

Linux中搭建一个ftp服务器详解

来源:Linux社区  作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道:控制通道 , 数据通道在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种模式:port模式(主动模式)和pasv(被动模式)PORT模式:在客户端需要接收数据时,ftp_client(大于1024的随机端口)-PORT命令->ftp_server(21)  发送PORT命令,这个PORT命令包含了客户端是用什么端口来接收数据(大于1024的随机端口),在传送数据时,ft

DNS服务相关概念详解

实验环境:RHEL 32Bit DNS服务相关概念详解 DNS是一种域名解析服务,DNS服务的核心以及DNS服务的标准都是基于一个软件来实现的,这个软件叫做BIND(Berkeley Internet Name Domain),互联网上几乎所有的DNS服务都是由BIND来构建的,虽然也有其它的DNS服务构建标准,但是它们的使用语法以及工作机制都和BIND非常接近. ·Linux服务器和Windows服务器的比较 Linux服务器在没有SELinux的时候它的安全级别和Windows服务器的安全级

zabbix专题:第九章 zabbix自动发现功能详解

zabbix自动发现功能详解 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.co zabbix自动发现功能详解 网络发现简介 有100台服务器,不想一台台主机去添加,能不能让zabbix自动添加主机呢,当然可以,网络发现便是这个功能,当然前提条件是所有服务器都已经安装了agent或者snmp(其实也可以不用,鉴于我们大部分功能都用agent,所以请安装上agent),server扫描配置好的ip段,自动添加ho