本文主要介绍Centos6.x安装vsftpd、配置文件、以及客户端的使用。
1.FTP服务端和客户端的安装
Centos默认Yum源自带了ftp的服务端和客户端软件,直接使用Yum安装。1
# yum -y install vsftpd ftp
2.FTP主动模式与FTP被动模式
- 主动模式
主动:默认情况下,ftp服务是开放了21端口,用来接受控制命令,服务器用20端口去发送数据(连接客户端大于1024的随机端口)
1 | server client |
- 被动模式
被动:ftp服务也是开放21端口,用来接受命令控制,进行数据传输时,客户端会告知服务端打开一个大于1024的端口,然后客户端去主动连接服务
1 | server client |
主动模式:建立数据链路时由sever端去主动连接客户端的大于1024的随机端口
被动模式:建立数据链路时由client端去主动连服务端的随机端口
vsftpd默认使用被动模式。
3. FTP匿名登录
先启动vsftpd服务端:
1 | # /etc/init.d/vsftpd start |
使用ftp客户端连接:
1 | # ftp localhost |
匿名用户有两个:
用户名:anonymous 密码:空
用户名:ftp 密码:空
4.配置文件
- 默认配置文件
1 | # cat /etc/vsftpd/vsftpd.conf |grep -v ^# |grep -v ^$ |
匿名用户(anonymous)设置
- 不允许匿名用户登录
1
2
3# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #修改配置文件
# /etc/init.d/vsftpd reload- 匿名用户下载
匿名用户默认是可以登录,也可以下载。默认使用匿名用户登录的服务端的/var/ftp目录下。
- 匿名用户上传
默认是不允许匿名用户上传的
1
2
3
4
5
6# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #允许匿名用户登录
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=yes #允许匿名用户可以删除文件和重命名文件
# chmod 777 /var/ftp/pub #把pub改为可写,用于上传普通用户(local)设置
- 普通用户登录
配置文件中local_enable=YES,默认是允许普通用户登录的。如果要限制普通用户登录,可以通过户列表来控制。
1
2
3
4# vim /etc/vsftpd/vsftpd.conf
userlist_enable=yes #打开用户列表功能
userlist_deny=YES #这一句可加可不加,默认就是有这一句的
# vim /etc/vsftpd/user_list #加上要禁止的用户,一个用户写一行- 普通用户的下载和上传
默认是允许下载和上传的。允许上传除了系统目录有写权限外,还有与服务的参数write_enable=YES有关。
所有的本地用户(非匿名用户)登录后,都统一登录到/ftpdata/目录下:
方法一:把所有的用户家目录改成/ftpdata/。但这样做会影响到系统用户登录到自己的家目录
方法二:使用下面的参数,它不影响你系统用户登录到自己的家目录
local_root=/ftpdata- 关于chroot环境
默认情况下,普通用户(匿名用户除外)可以登录ftp后,cd切换到/下的任何地方,只要有r权限,就可以get文件,那么显示是不安全的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31ftp> ls /
227 Entering Passive Mode (127,0,0,1,182,179).
150 Here comes the directory listing.
dr-xr-xr-x 2 0 0 4096 Jun 26 19:11 bin
dr-xr-xr-x 5 0 0 1024 Apr 10 13:58 boot
drwxr-xr-x 2 0 0 4096 Oct 04 2017 cgroup
drwxr-xr-x 3 0 0 4096 Apr 10 13:38 data
drwxr-xr-x 18 0 0 3820 Jun 04 00:52 dev
drwxr-xr-x 129 0 0 12288 Jun 29 19:19 etc
drwxr-xr-x 4 0 0 4096 Jun 26 08:19 home
drwxr-xr-x 2 0 0 4096 Apr 16 07:58 ks
dr-xr-xr-x 11 0 0 4096 Apr 10 16:22 lib
dr-xr-xr-x 10 0 0 12288 Jun 26 19:11 lib64
drwx------ 2 0 0 16384 Apr 10 13:38 lost+found
drwxr-xr-x 3 0 0 4096 Jun 01 06:05 media
drwxr-xr-x 2 0 0 0 Jun 04 00:51 misc
drwxr-xr-x 3 0 0 4096 Apr 10 16:13 mnt
drwxr-xr-x 2 0 0 0 Jun 04 00:51 net
drwxr-xr-x 3 0 0 4096 Jun 26 09:25 opt
dr-xr-xr-x 151 0 0 0 Jun 04 00:51 proc
drwxr-xr-x 3 0 0 4096 Jun 21 06:52 pydash
dr-xr-x--- 38 0 0 4096 Jul 02 06:38 root
dr-xr-xr-x 2 0 0 12288 Jun 26 19:11 sbin
drwxr-xr-x 2 0 0 4096 Apr 10 13:42 selinux
drwxr-xr-x 2 0 0 4096 Sep 23 2011 srv
drwxr-xr-x 13 0 0 0 Jun 04 00:51 sys
drwxrwxrwt 8 0 0 4096 Jul 01 19:19 tmp
drwxr-xr-x 13 0 0 4096 Apr 10 13:42 usr
drwxr-xr-x 23 0 0 4096 Jun 26 08:16 var
dr-xr-xr-x 7 0 0 4096 Nov 29 2013 yum
226 Directory send OK.普通用户ls /,可以看到系统的根目录,进入相应的目录就可以下载。
通过chroot将普通用户限制在它的家目录。
1
2
3
4
5# vim /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# vim /etc/vsftpd/chroot_list #创建这个文件,并写上要加入笼环境的用户名,一行写一个
# /etc/init.d/vsftpd reload如何把所有的普通用户(匿名用户默认就是笼环境)加入到chroot环境?
1
# chroot_local_user=YES
注意:
对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
| chroot_local_user=YES | chroot_local_user=NO | |
|---|---|---|
| chroot_list_enable=YES | (1)所有用户都被限制在其主目录下 (2)使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制 | (1)所有用户都不被限制其主目录下 (2)使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制 |
| chroot_list_enable=NO | (1)所有用户都被限制在其主目录下 (2)不使用chroot_list_file指定的用户列表,没有任何“例外”用户 | (1)所有用户都不被限制其主目录下 (2)不使用chroot_list_file指定的用户列表,没有任何“例外”用户 |
- 被动连接模式,控制服务器数据传输端口的范围
1 | # vim /etc/vsftpd/vsftpd.conf |
5.客户端工具的使用
ftp使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25# ftp 127.0.0.1
ftp> ls #查看远程文件
ftp> !ls #感叹号后面执行本地命令
ftp> ! #退出ftp命令行
ftp> append ks.cfg a.txt #把本地的ks.cfg文件的内容追加到远程的a.txt
ftp> cd ftp #进入远程的ftp目录
ftp> lcd /root/ #改变本地工作目录
ftp> get hello.txt #复制单个远程文件到本地
ftp> put a.txt #复制一个本地文件到远程
ftp> del ftp.txt #删除远程单个文件
ftp> open 127.0.0.1 #连接到远程服务器
ftp> close #结束FTP会话并返回命令行
ftp> bye #结束FTP会话并退出
ftp> glob #开关文件名通配符(默认ON)
ftp> mget 1.tmp 2.tmp 3.tmp #复制一个或多个远程文件至本地 (ftp -i 127.0.0.1)
ftp> mdel *.php #删除远程一个或多个文件
ftp> mkdir tmp #创建一个远程目录
ftp> mput *.txt #复制一个或多个本地文件到远程
ftp> pwd #显示远程当前工作目录
ftp> recv 1.tmp #复制远程文件到本地
ftp> rename 1.tmp 1.tmp.bak #重命名远程文件
ftp> rmdir tmp #删除远程目录
ftp> send 1.tmp #复制一个本地文件到远程(功能同put)
ftp> passive #主被动模式切换