1、简介
vsftpd 是“very secure FTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件。特点 是:非常高的安全性需求、带宽限制、良好的可伸缩性等
2、工作原理
vsftpd使用ftp协议,该协议属于应用层协议。它是典型的c/s架构,ftp服务端用来存储文件,ftp客户端 可以通过ftp协议连接服务端实现上传和下载资源。ftp使用tcp的21端口进行命令传输,然后用tcp 的20端口进行数据传输(主动模式)。默认是被动模 式。
3、安装部署
yum install -y vsftpd ftp lftp
vsftpd: 为服务端软件
ftp、lftp: 为客户端工具,推荐使用lftp
#服务端启动服务
systemctl start vsftpd
4、客户端匿名用户访问
用ftp客户端匿名登录需要输入用户名及密码验证,匿名用户名为:ftp或者anonymous,密码为空。 用lftp客户端匿名登录则不需要输入以上信息。
#客户端ftp访问
[root@localhost ~]# ftp 10.0.0.129
Connected to 10.0.0.129 (10.0.0.129).
220 (vsFTPd 3.0.2)
Name (10.0.0.129:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
#客户端lftp访问
[root@localhost ~]# lftp 10.0.0.129
lftp 10.0.0.129:~>
5、配置文件详解
ftp的根目录默认是/etc/vsftpd/
[root@localhost vsftpd]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
vsftpd.conf:vsftpd 的核心配置文件
ftpusers: 黑名单,指定哪些用户不能访问FTP 服务器。
user_list:白名单,指定允许使用vsftpd 的用户列表文件。
vsftpd.conf配置详解:
anonymous_enable=NO #允许匿名用户访问为了安全选择关闭
local_enable=YES # 允许本地用户登录
write_enable=YES # 是否允许写入
local_umask=022 # 本地用户上传文件的umask
dirmessage_enable=YES #为YES则进入目录时显示此目录下由message_file选项指定的文本文件(,默认为.message)的内容
xferlog_enable=YES #开启日志
xferlog_std_format=YES #标准格式
connect_from_port_20=YES
xferlog_file=/var/log/xferlog #ftp日志目录
idle_session_timeout=6000 #设置客户端连接时间
data_connection_timeout=1200 #设置数据连接时间 针对上传,下载
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #设置为YES则下面的控制有效
chroot_list_enable=YES #若为NO,则记录在chroot_list_file所指定的文件(默认是/etc/vsftpd.chroot_list)中的用户将被chroot在登录后所在目录中,无法离开.如果为YES,则所记录的用户将不被chroot.这里YES.
chroot_local_user=YES
userlist_deny=NO #若设置为YES则记录在userlist_file选项指定文件(默认是/etc/vsftpd.user_list)中的用户将无法login,并且将检察下面的userlist_deny选项
userlist_enable=YES #若为NO,则仅接受记录在userlist_file选项指定文件(默认是/etc/vsftpd.user_list)中的用户的login请求.若为YES则不接受这些用户的请求.
userlist_file=/etc/vsftpd/user_list #白名单
chroot_list_enable=YES
local_root=/var/ftp/pub #根目录
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
6、文件下载
服务端进入/var/ftp/pub创建文件
[root@localhost pub]# cd /var/ftp/pub/
[root@localhost pub]# touch file{1..9}
[root@localhost pub]# ls
file1 file2 file3 file4 file5 file6 file7 file8 file9
单个文件下载
[root@localhost]# lftp 10.0.0.129
lftp 10.0.0.129:~> ls
drwxr-xr-x 3 0 0 35 Dec 06 08:21 pub
lftp 10.0.0.129:/> cd pub
lftp 10.0.0.129:/pub> lcd /data
lcd 成功, 本地目录=/data
lftp 10.0.0.129:/pub> get file1
lftp 10.0.0.129:/pub> exit
[root@localhost data]# ls /data
file1
#当客户端已经连接上服务端,cd是用于切换服务器中的目录命令,切换客户端本地的目录则使用lcd命令。
退出连接使用exit或者quit
批量文件下载
[root@localhost data]# lftp 10.0.0.129
lftp 10.0.0.129:~> cd pub
cd 成功, 当前目录=/pub
lftp 10.0.0.129:/pub> lcd /data
lcd 成功, 本地目录=/data
lftp 10.0.0.129:/pub> mget file*
Total 9 files transferred
lftp 10.0.0.129:/pub> quit
[root@localhost data]# ls
file1 file2 file3 file4 file5 file6 file7 file8 file9
# 如果是ftp客户端下载,需要关闭交互,否则每个文件都会询问:
ftp> mget file*
mget file1? y
227 Entering Passive Mode (10,0,0,129,115,184).
150 Opening BINARY mode data connection for file1 (0 bytes).
226 Transfer complete.
mget file2?
关闭ftp批量下载询问交互
ftp> prompt off
Interactive mode off.
ftp> mget file*
ftp>
下载目录
lftp 10.0.0.129:/pub> mirror mypackage
7、文件上传和写入
ftp默认配置只能进行文件的读取和下载,不能进行写入和上传文件,当服务端已存在某个文件时,客户端上传该文件将报错。
lftp 10.0.0.129:/pub> put /data/cluo
put: Access failed: 550 Permission denied. (cluo)
lftp 10.0.0.129:/pub> mkdir meixi
mkdir: Access failed: 550 Permission denied. (meixi)
#上传和创建均失败
服务端开启匿名用户创建文件、上传权限
vim /etc/vsftpd/vsftpd.conf
#开启上传权限
anon_upload_enable=YES
#开启创建文件权限
anon_mkdir_write_enable=YES
#添加重命名、删除权限
anon_other_write_enable=YES
服务端重启服务,客户端再次进行上传和创建,还是不行,报错信息和上次不同
服务端重启
systemctl restart vsftpd
客户端再次尝试
lftp 10.0.0.129:/pub> put /data/meixi
put: Access failed: 553 Could not create file. (meixi)
lftp 10.0.0.129:/pub> mkdir mypachage
mkdir: Access failed: 550 Create directory operation failed. (mypachage)
这是因为服务端目录其他用户没有写权限,给pub目录授权
[root@localhost vsftpd]# chmod o+w /var/ftp/pub/
[root@localhost vsftpd]# ll /var/ftp/pub/ -d
drwxr-xrwx. 3 root root 152 12月 6 16:31 /var/ftp/pub/
客户端再次进行上传和创建,成功
lftp 10.0.0.129:/pub> put /data/meixi
lftp 10.0.0.129:/pub> mkdir mypackage
mkdir 成功, 建立 `mypackage'
lftp 10.0.0.129:/pub> ls
-rw-r--r-- 1 0 0 0 Dec 06 08:14 cluo
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file1
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file2
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file3
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file4
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file5
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file6
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file7
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file8
-rw-r--r-- 1 0 0 0 Dec 06 08:31 file9
-rw------- 1 14 50 0 Dec 06 09:15 meixi
drwx------ 2 14 50 6 Dec 06 09:16 mypackage
#要想匿名用户有写的权限,一是需要服务端配置文件开启写的权限,二是所在的目录本身有其他用户写的权限!
如果是使用ftp客户端,不能直接用绝对路径进行文件上传,需先切换到本地目录方可进行文件上传
ftp> put /data/luoben
local: /data/luoben remote: /data/luoben
227 Entering Passive Mode (10,0,0,129,190,104).
553 Could not create file.
ftp> lcd /data
Local directory now /data
ftp> put luoben
local: luoben remote: luoben
227 Entering Passive Mode (10,0,0,129,121,39).
150 Ok to send data.
226 Transfer complete.
上传文件并修改文件名,加参数-o refile
lftp 10.0.0.129:/pub> put /data/neimaer -o baxineimaer
#以上将本地文件neimaer进行上传并改名为baxineimaer
批量上传
put和mput命令上传多个文件,多个文件之间用空格分隔,其中mput命令支持通配符
lftp 10.0.0.129:/pub> put /data/qidanei1 /data/qidanei2
Total 2 files transferred
lftp 10.0.0.129:/pub> mput qida*
Total 2 files transferred
lftp 10.0.0.129:/pub> mput qida*
8、删除
删除目录
lftp 10.0.0.129:/pub> rmdir mypackage
rmdir 成功, 删除 `mypackage'
删除文件
lftp 10.0.0.129:/pub> rm qidanei1
rm 成功, 删除 `qidanei1'
9、服务端本地用户访问
服务端创建用户
[root@localhost /]# useradd cluo
[root@localhost /]# passwd cluo
更改用户 cluo 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost /]# id cluo
uid=1005(cluo) gid=1006(cluo) 组=1006(cluo)
编辑配置文件设置不让匿名用户登录,只能本地用户登录,并重启服务
[root@localhost /]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
[root@localhost /]# systemctl restart vsftpd
匿名用户进行访问
#无法访问
[root@localhost data]# lftp 10.0.0.129
lftp 10.0.0.129:~> ls
‘ls' at 0 [重新连接前延时:30]
本地用户进行访问
#访问成功
[root@localhost /]# lftp cluo@10.0.0.129
口令:
lftp cluo@10.0.0.129:~> ls
lftp cluo@10.0.0.129:~>
10、限制系统用户越狱
在默认配置中,系统用户是可以向上切换到其他目录的,出于安全考虑,需限制系统用户的访问内容
限制所有用户都不能切换家目录
vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=NO
#添加允许写
allow_writeable_chroot=YES
# chroot_local_user: 是否将所有用户限制在主目录,YES为启用,NO禁用.
# chroot_list_enable: 是否启动限制用户(特例)的名单 YES为启用,NO禁用(包括注释掉也为禁用)
若想让部分用户有切换家目录的权限,则需要开启限制
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#chroot_list中写上要放行的用户
chroot_local_user=YES | chroot_local_user=NO | |
---|---|---|
chroot_list_enable=YES | 1、所有用户都被限制在其主目录下; 2、使用chroot_list指定的用户列表, 这些用户为“例外“,不受限制。 | 1、所有用户不被限制其主目录下; 2、使用chroot_list指定得用户列表, 这些用户作为“例外”,受到限制。 |
chroot_list_enable=NO | 1、所有用户都被限制在其主目录下; 2、不使用chroot_list指定的用户列表, 没有任何“例外“。 | 1、所有用户都不被限制在其主目录下; 2、不使用chroot_list指定的用户列表, 没有任何“例外“。 |