六、FTP服务器搭建

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=YESchroot_local_user=NO
chroot_list_enable=YES1、所有用户都被限制在其主目录下; 2、使用chroot_list指定的用户列表, 这些用户为“例外“,不受限制。1、所有用户不被限制其主目录下; 2、使用chroot_list指定得用户列表, 这些用户作为“例外”,受到限制。
chroot_list_enable=NO1、所有用户都被限制在其主目录下; 2、不使用chroot_list指定的用户列表, 没有任何“例外“。1、所有用户都不被限制在其主目录下; 2、不使用chroot_list指定的用户列表, 没有任何“例外“。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值