=====

FTP(file transfer protocol)

=====

网络文件共享的几种方式

   HTTP NFS(unix like) SAMBA FTP

vsftpd (Very Secure FTP)

ftp需要两个端口

21:命令端口

20:数据端口

是一种跨平台的文件传输工具。

ftp有两种传输模式

   1、主动模式

服务器的端口:2120

   2、被动模式

服务器的端口:21,随机端口

ftp主动模式和被动模式的区别:

主动模式:

主动模式的过程:

任何端口到FTP服务器的21端口(客户端初始化的连接 S<-C)

FTP服务器的21端口到大于1023的端口(服务器响应客户端的控制端口S->C)

FTP服务器的20端口到大于1023的端口(服务器端初始化数据连接到客户端的数据端口 S->C)

大于1023端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口 S<-C)

当用户登录到ftp服务器的时候,匿名用户进入到/var/ftp,系统帐户进入到自己的家目录

ftp的被动模式

从任何端口到服务器的21端口(客户端初始化的连接 S<-C)

服务器的21端口到任何大于1023的端口(服务器响应到客户端的控制端口的连接 S->C)

从任何端口到服务器的大于1023端口(入;客户端初始化数据连接到服务器指定的任意端口 S<-C)

服务器的大于1023端口到远程的大于1023的端口(出;服务器发送 ACK响应和数据到客户端的数据端口 S->C)

软件安装:

#yum install vsftpd -y

服务启动:

   #servicevsftpd start

   #/etc/init.d/vsftpdstart

   #chkconfigvsftpd on

# netstat -antulp | grep vsftpd

tcp  0   0 0.0.0.0:21     0.0.0.0:*       LISTEN      28997/vsftpd

配置文件的位置:

   /etc/vsftpd/vsftpd.conf

在编辑配置文件之前,最好备份一份,以防万一

ftp配置的目标:

1、搞定匿名帐户的访问

2、本地帐户

3、虚拟帐户

匿名用户访问:

#vi /etc/vsftpd/vsftpd.conf

12anonymous_enable=YES   //允许匿名用户登录

                              //匿名用户指的是: ftpanonymous

28anon_upload_enable=YES //匿名用户可以上传

#cd /

# touch a

# ftp localhost

Connected to localhost.localdomain.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (localhost:root): ftp

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,50,241)

150 Here comes the directory listing.

drwxr-xr-x   2 0        0            4096 Oct 13 13:29 pub

226 Directory send OK.

ftp> cd pub

250 Directory successfully changed.

ftp> ls

227 Entering Passive Mode (127,0,0,1,191,136)

150 Here comes the directory listing.

226 Directory send OK.

ftp> put a

local: a remote: a

227 Entering Passive Mode (127,0,0,1,192,96)

553 Could not create file.

ftp> quit

221 Goodbye.

允许匿名用户上传但是为什么上传不了文件呢?

还必须看目录有没有可写权限。

# chmod 777 /var/ftp/pub

# ftp localhost

Connected to localhost.localdomain.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (localhost:root): ftp

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,200,175)

150 Here comes the directory listing.

drwxrwxrwx   2 0        0            4096 Oct 13 13:29 pub

226 Directory send OK.

ftp> cd pub

250 Directory successfully changed.

ftp> put a

local: a remote: a

227 Entering Passive Mode (127,0,0,1,168,25)

150 Ok to send data.

226 File receive OK.

ftp> quit

221 Goodbye.

----------------------------------------------

本地帐户

指的就是服务器本身的拥有的帐号

   vim/etc/vsftpd/vsftpd.conf

   anonymouns_enable=NO

 #anon_upload_enable=YES

   15  local_enable=YES

      //本地帐户认证方式启动

   18  write_enable=YES

      //表示开启写权限

   22  local_umask=022

      //表示上传文件的权限掩码

   /etc/init.d/vsftpdrestart

   ftplocalhost

   ftp>cd /etc

   ftp>pwd

      /etc

那么这个时候,就可以下载u1拥有权限的任意文件。用户u1可以随意切换所在目录

解决用户瞎溜达的问题?

      vim/etc/vsftpd/vsftpd.conf

      96  chroot_list_enable=YES

      98  chroot_list_file=/etc/vsftpd/chroot_list

      vim /etc/vsftpd/chroot_list

          u1

          u2

          //表示这是一个关于chroot的黑名单,凡是在chroot_list中出现的用户名

          //都会实现chroot的限制

限制所有的本地用户:

      vim/etc/vsftpd/vsftpd.conf

          chroot_local_user=YES

限制用户chroot的白名单设置:

      vim/etc/vsftpd/vsftpd.conf

          chroot_local_user=YES

          chroot_list_enable=YES

         chroot_list_file=/etc/vsftpd/chroot_list

          //chroot_list文件中,列出不进行chroot限制的用户列表

ftp

虚拟帐户

具体实现:

   1.通过创建本地数据库实现虚拟用户

yum   install db4-utils -y

创建一个用于映射虚拟用户的真实用户:

useradd -d /var/ftp/vuserdir -s /sbin/nlogin  vuser

   2.修改配置文件:

      #vim/etc/vsftpd/vsftpd.conf

          guest_enable=YES

          guest_username=vuser

   3.生成虚拟用户文件

      #vim/etc/vsftpd/vftpuser.txt

          neo

          123

          mike

          456

   4.生成虚拟用户数据文件

db_load -T -t hash -f /etc/vsftpd/vftpuser.txt/etc/vsftpd/vftpuser.db

   #chmod600 /etc/vsftpd/vftpuser.db

   5.创建一个新的pam认证程序

   vim/etc/pam.d/vsftpd1

   auth  required   /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

   account  required   /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

vim /etc/vsftpd/vsftpd.conf

   pam_service_name=vsftpd1

   /etc/init.d/vsftpdrestart

登录之后,出现这样的问题:

   226Transfer done (but failed to open directory).

修改配置文件:

   vim/etc/vsftpd/vsftpd.conf

      anon_world_readable_only=NO

额外的ftp配置:

   vim/etc/vsftpd/vsftpd.conf

   ftpd_banner=Welcometo uplooking ftp service

   anon_max_rate=100  (单位是字节)

   max_clients=1

   deny_file={*.ext,*.dll}

关于用户访问控制的两个文件:

   user_list

   ftpusers

综合练习:

在一台主机上创建三个基于域名的虚拟主机,每个主机的磁盘配额为80M90M100M,使用ftp分别管理三个虚拟主机,每个虚拟主机的管理员,只能管理自己的虚拟主机。要求,每个网站的磁盘具有高性能,高可靠性,并且可以磁盘扩展。

附录:

vsftpd.conf的参数:Anonymous_enable=yes    允许匿名登陆

Dirmessage_enable=yes  切换目录时,显示目录下.message的内容

Local_umask=022  FTP上本地的文件权限,默认是077

Connect_form_port_20=yes   启用FTP数据端口的数据连接*

Xferlog_enable=yes       激活上传和下传的日志

Xferlog_std_format=yes 使用标准的日志格式

Ftpd_banner=XXXXX   欢迎信息

Pam_service_name=vsftpd    验证方式*

Listen=yes      独立的VSFTPD服务器*

Anon_upload_enable=yes      开放上传权限

Anon_mkdir_write_enable=yes     可创建目录的同时可以在此目录中上传文件

Write_enable=yes   开放本地用户写的权限

Anon_other_write_enable=yes      匿名帐号可以有删除的权限

Anon_world_readable_only=no    放开匿名用户浏览权限

Ascii_upload_enable=yes      启用上传的ASCII传输方式

Ascii_download_enable=yes  启用下载的ASCII传输方式

Banner_file=/var/vsftpd_banner_file     用户连接后欢迎信息使用的是此文件中的相关信息

Idle_session_timeout=600()      用户会话空闲后10分钟

Data_connection_timeout=120(秒)将数据连接空闲2分钟断

Accept_timeout=60(秒)将客户端空闲1分钟后断

Connect_timeout=60(秒)中断1分钟后又重新连接

Local_max_rate=50000bite本地用户传输率50K

Anon_max_rate=30000bite匿名用户传输率30K

Pasv_min_port=50000   将客户端的数据连接端口改在

Pasv_max_port=60000   50000—60000之间

Max_clients=200    FTP的最大连接数

Max_per_ip=4       IP的最大连接数

Listen_port=5555   5555端口进行数据连接

Local_enble=yes     本地帐户能够登陆

Write_enable=no    本地帐户登陆后无权删除和修改文件

下面这是一组

Chroot_local_user=yes   本地所有帐户都只能在自家目录

Chroot_list_enable=yes  文件中的名单可以调用

Chroot_list_file=/任意指定的路径/vsftpd.chroot_list  前提是chroot_local_user=no

这又是一组

Userlist_enable=yes       在指定的文件中的用户不可以访问

Userlist_deny=yes  

Userlist_file=/指定的路径/vsftpd.user_list

又开始单的了

Banner_fail=/路径/文件名连接失败时显示文件中的内容

Ls_recurse_enable=no    

Async_abor_enable=yes

one_process_model=yes

Listen_address=10.2.2.2 将虚拟服务绑定到某端口

Guest_enable=yes   虚拟用户可以登陆

Guest_username=所设的用户名将虚拟用户映射为本地用户

User_config_dir=/任意指定的路径/为用户策略自己所建的文件夹指定不同虚拟用户配置文件的路径

又是一组

Chown_uploads=yes      改变上传文件的所有者为root

Chown_username=root  

又是一组

Deny_email_enable=yes 是否允许禁止匿名用户使用某些邮件地址

Banned_email_file=//任意指定的路径/xx/  

又是单的

Pasv_enable=yes    服务器端用被动模式

User_config_dir=/任意指定的路径//任意文件目录指定虚拟用户存放配置文件的路径