一.ftp文件传输协议)介绍

1FTP连接及传输模式

FTP服务器默认使用TCP协议的2021端口与客户机进行通信。如:

20端口用于建立数据连接。并传输文件数据;

21端口用于建立控制连接,并传输FTP控制命令。


2.ftp的两种工作模式

1主动模式PORT当客户端主动连接时,客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接收连接,建立一条命令链路。当需要传送数据时,客户端以PORT命令告知服务器我打开了某端口>1024,你来连接我,于是服务器从20端口向客户端的该端口发送请求并建立数据连接。


(2)被动模式(PASV)当客户端被动连接时,客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接收连接,建立一条命令链路。当需要传输数据时,服务器告知客户端我打开了某端口,你来连接我。于是客户端向服务器的该端口发送请求并建立数据连接。

3.FTP用户服务类型:

1匿名用户:

  anonymous或ftp

2本地用户:

  账号名称、密码等信息保存在passwd、shadow文件中

3虚拟用户:

使用独立的账号和密码数据文

4.ftp的主配置文件

listen=YSE                  是否监听服务

listen_address=0.0.0.0         FTP服务的IP地址

listen_port=21                FTP服务的端口号

write_enable=YES            写入权限

download_enable=YES        是否允许下载

dirmessage_enable=YSE     用户切换进入目录是显示.message(如果存在)文件的内容

xferlog_enable=YES          启用xferlog日志,默认记录到“/var/log/xferlog”

xferlog_std_format=YES       启用xferlog标准日志格式

connect_from_port_20=YES 允许服务器主动模式(从20端口建立数据连接)

pasv_enable=YES             允许被动模式连接

pasv_max_port=24600          服务器最大端口

pasv_min_port=24500          服务器最小端口

pam_service_name=vsftpd   用于用户认证的PAM文件位置

userlist_enable=YES             suer_list用户类表文件

userlist_deny=YES              ser_list列表文件中的用户账号

max_clients=0                  最多允许多少个客户端同时连接(0无限制)

max_per_ip=0                  最多允许多少个并发连接(0无限制)

tcp_wrappers=YES              是否启用TCP_Wrappers主机访问控制


二.具体配置

(1)匿名用户

@1.ftp服务器默认就支持匿名用户,下载好包,启动服务就可以了

[root@tx1 ~]# yum install -y vsftpd

[root@tx1 ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES启用匿名访问

local_umask=022                 匿名用户上传文件权限的掩码

anon_upload_enable=YES          允许上传文件

anon_mkdir_write_enable=YES     允许创建目录

[root@tx1 ~]# service vsftpd restart

Shutting down vsftpd:                                      [FAILED]

Starting vsftpd for vsftpd:                                [  OK  ]

复制一些文件供用户下载

[root@tx1 default]# cp /etc/passwd /var/ftp/

[root@tx1 default]# cp /etc/group /var/ftp/

[root@tx1 default]# cp /etc/fstab /var/ftp/


@2.客户端测试

[root@tx2 ~]# ftp 192.168.8.70

Connected to 192.168.8.70.

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 (192.168.8.70: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 (192,168,8,70,33,125)

150 Here comes the directory listing.

-rw-r--r--    1 0        0             608 Jul 23 02:50 fstab

-rw-r--r--    1 0        0             631 Jul 23 02:50 group

-rw-r--r--    1 0        0            1595 Jul 23 02:50 passwd

drwxr-xr-x    2 0        0            4096 Dec 05  2011 pub

226 Directory send OK.

客户端下载

ftp> ls

227 Entering Passive Mode (192,168,8,70,51,26)

150 Here comes the directory listing.

-rw-r--r--    1 0        0             608 Jul 23 02:50 fstab

-rw-r--r--    1 0        0             631 Jul 23 02:50 group

-rw-r--r--    1 0        0            1595 Jul 23 02:50 passwd

drwxr-xr-x    2 0        0            4096 Dec 05  2011 pub

226 Directory send OK.

ftp> lcd ///改变本地目录

Local directory now /

ftp> get fstab//下载文件

local: fstab remote: fstab

227 Entering Passive Mode (192,168,8,70,35,55)

150 Opening BINARY mode data connection for fstab (608 bytes).

226 File send OK.

608 bytes received in 0.00014 seconds (4.2e+03 Kbytes/s)

ftp> quit//t退出

221 Goodbye.

[root@tx2 /]# ls//fstab文件已下载

bin   dev  fstab  lib         media  mnt  opt   root  selinux  sys       tmp  var

boot  etc  home   lost+found  misc   net  proc  sbin  srv      tftpboot  usr

客户端上传

ftp> cd pub

250 Directory successfully changed.

ftp> ls

227 Entering Passive Mode (192,168,8,70,148,26)

150 Here comes the directory listing.

226 Directory send OK.

ftp> put fstab

local: fstab remote: fstab

227 Entering Passive Mode (192,168,8,70,180,30)

553 Could not create file.//错误!!!

解决办法

 服务端

[root@tx1 ~]# cd /var/ftp/

[root@tx1 ftp]# ll

total 16

-rw-r--r-- 1 root root  608 Jul 23 10:50 fstab

-rw-r--r-- 1 root root  631 Jul 23 10:50 group

-rw-r--r-- 1 root root 1595 Jul 23 10:50 passwd

drwxr-xr-x 2 root root 4096 Dec  5  2011 pub

[root@tx1 ftp]# chmod 757 pub/

客户端测试

ftp> cd pub

250 Directory successfully changed.

ftp> put fstab

local: fstab remote: fstab

227 Entering Passive Mode (192,168,8,70,32,246)

553 Could not create file.

ftp> put fstab

local: fstab remote: fstab

227 Entering Passive Mode (192,168,8,70,188,161)

150 Ok to send data.

226 File receive OK.

608 bytes sent in 9.8e-05 seconds (6.1e+03 Kbytes/s)

ftp> lcd /etc

Local directory now /etc

ftp> put inittab

local: inittab remote: inittab

227 Entering Passive Mode (192,168,8,70,187,201)

150 Ok to send data.

226 File receive OK.

1666 bytes sent in 0.00036 seconds (4.5e+03 Kbytes/s)

注:不能上传和以后文件名相同的文件!!!


(2)系统用户

@1.服务器添加用户:

[root@tx1 ~]# useradd f1

[root@tx1 ~]# passwd f1

@2.配置文件

12#anonymous_enable=YES启用匿名访问要注释掉

15 local_enable=YES

18 write_enable=YES

22 local_umask=022

[root@tx1 ~]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]


下载:使用系统用户,下载的时候,只要服务器上有文件就可以;下载文件之后,保存在连接之前所在的目录,如果使用lcd切换之后,保存在切换后的目录里。

上传:上传的时候,不需要作任何修改,因为我是向自己的家目录里面传输文件

(和上面基本上相同,这里就不做演示了.................

问题:使用f1这种用户连接了服务器之后,能够在服务器上随意的切换目录,对服务器来说,这样不安全!!!


解决:让f1这种用户连接之后,只在自己的家目录里面待着。禁锢普通用户

[root@tx1 ~]# vim /etc/vsftpd/vsftpd.conf

96 chroot_list_enable=YES

98 chroot_list_file=/etc/vsftpd/chroot_list   保存着被禁锢的用户

[root@tx1 vsftpd]# echo f1 > chroot_list  (写用户名的时候要一行一个)


三.虚拟用户

1    在vsftpd服务器中,使用虚拟用户的主要好处在于,可以将登录的账号与系统登录的账号区分开来,用户名,密码都不相同,从而进一步增强了FTP服务器的安全性。另外虚拟用户都具有独立的配置选项。可以灵活的控制对ftp服务器的访问。可以控制用户读的权限写权限下载,上传的权限

(2)具体配置

@1.创建一个保存虚拟用户信息的文件:

[root@tx1 vsftpd]# vim login.txt

v1  用户名

123 密码


@2.把这个文件转换成数据库文件

[root@tx1 vsftpd]# yum install -y db4-utils

[root@tx1 vsftpd]# db_load -T -t hash -f login.txt vsftpd_login.db

-T转换成数据库格式

-t hash 转换的格式-hash

-f指定原文件


@3.编写ftp虚拟用户需要的新的pam文件及配置文件

[root@tx1 vsftpd]# vim /etc/pam.d/vsftpd.v

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

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

[root@tx1 vsftpd]#  vim vsftpd.conf

pam_service_name=vsftpd.v使用新的pam验证文件

guest_enable=YES支持虚拟用户

guest_username=vv使用的系统用户是vv

user_config_dir=/etc/vsftpd/vuser保存虚拟用户的配置文件的目录


[root@tx1 vsftpd]# mkdir vuser

[root@tx1 vsftpd]# cd vuser

[root@tx1 vuser]# vim v1

anon_world_readable_only=NO全局只读,能够浏览

anon_upload_enable=YES允许上传

anon_mkdir_write_enable=YES允许创建目录

anon_other_write_enable=YES允许修改文件名

local_root=/var/ftp/pub登录的目录

注:(vsftpd服务中,虚拟用户被默认作为匿名用户进行处理以降低权限,因此对应的配置项通常以anon_开头。
[root@tx1 vuser]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

测试:

[root@tx2 ftp]# ftp 192.168.8.70

Connected to 192.168.8.70.

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 (192.168.8.70:root): v1

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 (192,168,8,70,126,242)

150 Here comes the directory listing.

-rw-------    1 14       50            608 Jul 23 03:39 fstab

-rw-------    1 14       50           1666 Jul 23 03:39 inittab

226 Directory send OK.

(3)访问控制

@1.ftpusers

要把配置文件恢复到配置虚拟用户之前的状态 这个文件,只要用户写进去就不允许访问ftp。一行一个用户名

@2.user_list

[root@tx1 vsftpd]# vim vsftpd.conf

userlist_enable=YES

这个文件,只要用户写进去就不允许访问ftp。一行一个用户名

userlist_enable=NO 取消限制


@3.tcp_wrappers=YES  支持tcp_wrappers 访问控制

/etc/hosts.allow

/etc/hosts.deny


[root@tx1 vsftpd]# vim /etc/hosts.deny

vsftpd:192.168.8.20    把你要拒绝访问的客户端ip或网段写进去就行了。


四.lftp命令

1.. 登陆:lftp -u test 192.168.0.1 -p 2121
-u  登陆用的用户名
-p  ftp的端口,标准21端口可以省略
get test.txt         下载单个文件  
     mget *.txt           下载多个文件
     put test.txt         上传单个文件
     mput *.txt           上传多个文件
     mirror test          下载目录
     mirror -R test       上传目录
     pget -n 10 test.bin  多线程下载文件

2. 匿名用户:

(1)lftp


[root@tx2 vsftpd]# lftp 192.168.8.70

支持tab补齐


(2)mget * 同时下载多个文件


ftp> prompt off  关掉提示

ftp> mget *



@1.匿名用户:

[root@tx2 vsftpd]# wget ftp://172.16.1.2:21/* --ftp-user=ftp -r


@2.普通用户:

[root@mail vsftpd]# wget ftp://172.16.1.2:21/* --ftp-user=f1 --ftp-password=123 -r

windows下也可以使用ftp传输文件。


@3.windows下也可以使用ftp传输文件。

ftp://server_ip