=====

FTP(file transfer protocol)

=====

网络文件共享的几种方式

   HTTP NFS(unix like) SAMBA FTP

vsftpd (Very Secure FTP)

ftp需要两个端口

21:命令端口

20:数据端口

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

ftp有两种传输模式

   1、主动模式

服务器的端口:21,20

   2、被动模式

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

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

主动模式:

wKiom1MBZmvT0RQLAACb4ayUWPc892.jpg

主动模式的过程:

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

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

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

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

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

ftp的被动模式

wKioL1MBZqbB3c-yAACcT96VVW4616.jpg

从任何端口到服务器的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
10-02 04:23