Centos 7 vsftp 详解

栏目: 服务器 · 发布时间: 5年前

内容简介:1.安装2.登陆或者
[root@vm-50-156 ~]# yum -y install vsftpd


[root@vm-50-156 ~]# systemctl enable vsftpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

客户端连接

1.安装

sudo apt-get install ftp

2.登陆

pi@raspberrypi:~ $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

或者

pi@raspberrypi:~ $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

匿名用户登陆

但是目前匿名用户只能访问,下载文件 不能上传,需要设置配置文件

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    2 0        0              15 May 06 05:47 pub
226 Directory send OK.
ftp> put test.txt
local: test.txt remote: test.txt
200 PORT command successful. Consider using PASV.
550 Permission denied.

配置文件修改

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES

    anon_upload_enable=YES #允许上传
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES #允许创建和写入文件

重启服务,上传测试

ftp> put test.txt
local: test.txt remote: test.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
19 bytes sent in 0.00 secs (240.9700 kB/s)
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r--    1 0        0               4 May 06 05:47 a
-rw-------    1 14       50             19 May 06 05:59 test.txt
226 Directory send OK.
ftp>

本地用户登陆

1.创建用户

[root@vm-50-156 ~]# useradd ftp1 -s /sbin/nologin -g ftp
[root@vm-50-156 ~]# passwd ftp1
Changing password for user ftp1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

2.然后客户端登陆

pi@raspberrypi:~/ftp $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): ftp1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/ftp1"
ftp>

禁止登陆

1.全局禁止

local_enable=YES //改为 NO

2.配置文件禁止

  • ftpusers 黑名单 添加进去后禁止登陆

比如,在末尾添加了 ftp2 这个用户

[root@vm-50-156 vsftpd]# cat ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
ftp2

那么当你去登陆的时候就会出现

pi@raspberrypi:~/ftp $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): ftp2
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
  • user_list //这个文件由主配置文件的 userlist_enable 参数控制,当其值为 NO,则允许登陆,当其值为 YES 则禁止登陆

例如:

userlist_enable=NO

则结果

pi@raspberrypi:~/ftp $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): ftp1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

如果为 YES

userlist_enable=YES

pi@raspberrypi:~/ftp $ ftp 192.168.50.156

Connected to 192.168.50.156.

220 (vsFTPd 3.0.2)

Name (192.168.50.156:pi): ftp1

530 Permission denied.

Login failed.

ftp>

定制登陆信息

1.配置文件

[root@vm-50-156 ftp1]# vim /etc/vsftpd/vsftpd.conf

dirmessage_enable=YES

默认情况会读取 ftp 用户家目录的.message文件,所以你可以创建一个.message文件到家目录中,比如有个用户 ftp1,

[root@vm-50-156 ftp1]# pwd
/home/ftp1
[root@vm-50-156 ftp1]# ls
[root@vm-50-156 ftp1]# ll -a
total 16
drwx------  2 ftp1 ftp   78 May  6 14:41 .
drwxr-xr-x. 8 root root  89 May  6 14:19 ..
-rw-r--r--  1 ftp1 ftp   18 Dec  7 07:19 .bash_logout
-rw-r--r--  1 ftp1 ftp  193 Dec  7 07:19 .bash_profile
-rw-r--r--  1 ftp1 ftp  231 Dec  7 07:19 .bashrc
-rw-r--r--  1 root root 113 May  6 14:41 .message

查看文件内容

[root@vm-50-156 ftp1]# cat .message
--欢迎您来到awen 的FTP!
--博客: https://awen.me

客户端登陆

pi@raspberrypi:~/ftp $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): ftp1
331 Please specify the password.
Password:
230---欢迎您来到awen 的FTP!
230---博客: https://awen.me
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

禁锢在用户的主目录

默认情况下

ftp> pwd
257 "/home/ftp1"
ftp> cd / # 切换到根目录,发现可以查看根目录下的所以目录了,通常这样是不被运行的
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
lrwxrwxrwx    1 0        0               7 May 01 11:31 bin -> usr/bin
dr-xr-xr-x    5 0        0            4096 May 06 01:10 boot
drwxr-xr-x   21 0        0            3420 May 06 05:23 dev
drwxr-xr-x  101 0        0            8192 May 06 06:19 etc
-rw-rw----    1 0        0           36741 May 04 03:12 frpc.2017-05-03.log
-rw-rw----    1 0        0           83890 May 06 05:23 frpc.log
drwxr-xr-x    8 0        0              89 May 06 06:19 home
lrwxrwxrwx    1 0        0               7 May 01 11:31 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 May 01 11:31 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Nov 05 15:38 media
drwxr-xr-x    2 0        0               6 Nov 05 15:38 mnt
drwxr-xr-x    5 0        0            4096 May 06 02:33 opt
dr-xr-xr-x  286 0        0               0 May 06 05:23 proc
dr-xr-x---    9 0        0            4096 May 06 06:47 root
drwxr-xr-x   32 0        0            1140 May 06 05:34 run
lrwxrwxrwx    1 0        0               8 May 01 11:31 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Nov 05 15:38 srv
dr-xr-xr-x   13 0        0               0 May 06 05:23 sys
drwxrwxrwt   36 0        0            4096 May 06 06:46 tmp
drwxr-xr-x   13 0        0             155 May 01 11:31 usr
drwxr-xr-x   21 0        0            4096 May 06 05:34 var
drwxr-xr-x    3 0        0             239 May 05 08:27 vm-images
drwxr-xr-x    2 0        0              99 May 03 04:43 vm-iso
226 Directory send OK.

注释

chroot_local_user=NO # 如果未 NO 则chroot_list文件中的用户禁止访问其他目录,如果为 YES,则chroot_list中的用户可以访问其他目录
chroot_list_enable=YES
allow_writeable_chroot=YES #添加这行
chroot_list_file=/etc/vsftpd/chroot_list

然后重启服务,然后将禁止访问上一级目录的用户添加到

[root@vm-50-156 vsftpd]# cat chroot_list
ftp1

当我们的chroot_local_user 设置为 NO 的时候,访问 发现被禁止了

pi@raspberrypi:~/ftp $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): ftp1
331 Please specify the password.
Password:
230---欢迎您来到awen 的FTP!
230---博客: https://awen.me
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> cd /
250 Directory successfully changed.
ftp> pwd
257 "/"
ftp> pwd
257 "/"
ftp> cd /
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> quit

反之为 YES 则

pi@raspberrypi:~/ftp $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): ftp1
331 Please specify the password.
Password:
230---欢迎您来到awen 的FTP!
230---博客: https://awen.me
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> cd /
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
lrwxrwxrwx    1 0        0               7 May 01 11:31 bin -> usr/bin
dr-xr-xr-x    5 0        0            4096 May 06 01:10 boot
drwxr-xr-x   21 0        0            3420 May 06 05:23 dev
drwxr-xr-x  101 0        0            8192 May 06 06:19 etc
-rw-rw----    1 0        0           36741 May 04 03:12 frpc.2017-05-03.log
-rw-rw----    1 0        0           83890 May 06 05:23 frpc.log
drwxr-xr-x    8 0        0              89 May 06 06:19 home
lrwxrwxrwx    1 0        0               7 May 01 11:31 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 May 01 11:31 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Nov 05 15:38 media
drwxr-xr-x    2 0        0               6 Nov 05 15:38 mnt
drwxr-xr-x    5 0        0            4096 May 06 02:33 opt
dr-xr-xr-x  288 0        0               0 May 06 05:23 proc
dr-xr-x---    9 0        0            4096 May 06 07:07 root
drwxr-xr-x   32 0        0            1140 May 06 05:34 run
lrwxrwxrwx    1 0        0               8 May 01 11:31 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Nov 05 15:38 srv
dr-xr-xr-x   13 0        0               0 May 06 05:23 sys
drwxrwxrwt   36 0        0            4096 May 06 07:04 tmp
drwxr-xr-x   13 0        0             155 May 01 11:31 usr
drwxr-xr-x   21 0        0            4096 May 06 05:34 var
drwxr-xr-x    3 0        0             239 May 05 08:27 vm-images
drwxr-xr-x    2 0        0              99 May 03 04:43 vm-iso
226 Directory send OK.
ftp>

虚拟用户

1.创建一个文件vusers.list 添加内容

[root@vm-50-156 vsftpd]# vim vusers.list
[root@vm-50-156 vsftpd]# cat vusers.list
mike 用户名
123 密码
john
456

2.生成 db 文件

[root@vm-50-156 vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@vm-50-156 vsftpd]# ls
chroot_list  ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh  vusers.db  vusers.list
[root@vm-50-156 vsftpd]#

查看文件类型

[root@vm-50-156 vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 9, native byte-order)

设置权限

[root@vm-50-156 vsftpd]# chown 600 /etc/vsftpd/vusers.*

创建用户

#useradd -d /var/ftproot/ -s /sbin/nologin virtual
useradd -d /var/ftproot/ -s /sbin/nologin virtual
useradd: user 'virtual' already exists

赋予其权限

chmod 755 /var/ftproot/

3.建立支持虚拟用户的 PAM 认证文件

[root@vm-50-156 /]# vim /etc/pam.d/vsftpd.vu
[root@vm-50-156 /]# cat /etc/pam.d/vsftpd.vu
auth required pam_userdb.so.db=/etc/vsftpd/vusers.db
account required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

4.修改配置文件

[root@vm-50-156 /]# vim /etc/vsftpd/vsftpd.conf
[root@vm-50-156 /]# systemctl restart vsftpd.service

配置文件内容

guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
userlist_enable=NO
tcp_wrappers=YES
allow_writeable_chroot=YES

登陆失败

pi@raspberrypi:~ $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): john
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

查看

[root@vm-50-156 vsftpd]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-05-06 15:43:42 CST; 38s ago
  Process: 8596 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 8597 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           ├─8597 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
           ├─8598 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
           └─8599 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

May 06 15:43:42 vm-50-156 systemd[1]: Stopping Vsftpd ftp daemon...
May 06 15:43:42 vm-50-156 systemd[1]: Starting Vsftpd ftp daemon...
May 06 15:43:42 vm-50-156 systemd[1]: Started Vsftpd ftp daemon.
May 06 15:43:54 vm-50-156 vsftpd[8598]: PAM unable to dlopen(/usr/lib64/security/pam_userdb.so.db=/etc/vsft...ctory
May 06 15:43:54 vm-50-156 vsftpd[8598]: PAM adding faulty module: /usr/lib64/security/pam_userdb.so.db=/etc...users
Hint: Some lines were ellipsized, use -l to show in full.
[root@vm-50-156 vsftpd]#

检查是认证文件配置错了

[root@vm-50-156 /]# cat /etc/pam.d/vsftpd.vu
auth required pam_userdb.so.db=/etc/vsftpd/vusers.db
account required pam_userdb.so.db=/etc/vsftpd/vusers # 这里手残多打了个.
account required pam_userdb.so db=/etc/vsftpd/vusers

重启下

pi@raspberrypi:~ $ ftp 192.168.50.156
Connected to 192.168.50.156.
220 (vsFTPd 3.0.2)
Name (192.168.50.156:pi): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

ok 了

配置参数

vsftpd是(very secure FTP)的缩写,是一款咋*nix上非常安全的ftp软件,它基于GPL开发,支持IPV6、SSL加密等等。其安全性主要体现在:

  • 进程分离,处理不同人物的进程是彼此独立运行。
  • 进程均以最小的权限运行。
  • 多数进程使用chroot进行锁定,防止越权访问非法目录。

chroot 是一种改变根的技术,比如我们创建一个/var/ftp/pub/,则该目录对于客户来说就是共享的根目录。

ftp的端口号是21

ftp的工作模式

1.主动工作模式

工作步骤:

  • 第一步,客户端随机开启大于1024的端口X与服务器的21端口进行连接通信,建立连接后,客户端可以随时通过该连接通道与服务器进行上传或下载。
  • 第二步,当客户端需要与服务器进行数据传输时,客户端会再开启一个大于1024的随机端口Y,并将Y端口号通过之前的命令通道传送给服务器的21端口
  • 第三步,服务器获取到可短的第二个端口后会主动连接客户端的该端口,通过TCP三次握手后,完成服务器与客户端数据通道的建立,所有数据均通过该端口进行传输。

2.被动模式

  • 第一步,客户端随机开启大于1024的X端口与服务器的21端口进行连接。
  • 第二步,当客户端需要与服务器进行数据传输时候,客户端从命令通道发送数据请求要求上传或下载数据。
  • 第三部,服务器收到数据请求后会随机开启一个端口Y,并且通过命令通道将该端口信息传输给服务端。
    -第四步,客户端收到服务器发送的端口Y信息,在客户端本地开启一个随机端口Z,此时客户端在主动通过本机的Z端口与服务器的Y端口进行连接,通过TCP三次握手后,进行数据传输

FTP协议需要多个网络端口才可以正常工作,期中一个端口专门用于命令的传输,另一个用于数据的传输。主动模式在传输数据时,服务器会主动连接客户端,被动模式下,客户端主动连接服务器。

为什么会有被动模式?

因为客户端大多数主机都在防火墙内,防火墙有可能会阻止端口对外发送数据,这样客户端连接ftp服务器,但是外网不能响应客户端,因此就有了被动模式。

Centos 7 vsftp 详解

安装

yum -y install vsftpd

安装完成后,我们关闭防火墙,开启ftp服务

/etc/init.d/vsftpd restart
/etc/init.d/iptables stop
 chkconfig iptables off

通过filezilla 去连接,只需要填写主机名就可以匿名连接到ftp服务

Centos 7 vsftp 详解

配置文件

vsftp的配置文件在 /etc/vsftpd 目录下,

[root@elk-node-1 ~]# cd /etc/vsftpd/
[root@elk-node-1 vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
  • ftpusers 黑名单
  • user_list 控制名单(由配置文件控制是白名单还是黑名单)
  • /var/ftp ftp共享目录
  • /var/log/xferlog 日志文件

主配置文件参数

vsftpd的主配置文件是vsftpd.conf

# 是否允许匿名登录FTP服务器,默认设置为YES允许
# 用户可使用用户名ftp或anonymous进行ftp登录,口令为用户的E-mail地址。
# 如不允许匿名访问则设置为NO
anonymous_enable=YES
# 是否允许本地用户(即 linux 系统中的用户帐号)登录FTP服务器,默认设置为YES允许
# 本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub
# 若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES 
# 掩码,本地用户默认掩码为077
# 你可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值
#local_umask=022
# 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
#anon_upload_enable=YES
# 是否允许匿名用户创建新文件夹
#anon_mkdir_write_enable=YES 
# 是否激活目录欢迎信息功能
# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息
# 默认情况下,欢迎信息是通过该目录下的.message文件获得的
# 此文件保存自定义的欢迎信息,由用户自己建立
#dirmessage_enable=YES
# 是否让系统自动维护上传和下载的日志文件
# 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定
# 默认值为NO
xferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# 是否设定FTP服务器将启用FTP数据端口的连接请求
# ftp-data数据传输,21为连接控制端口
connect_from_port_20=YES
# 设定是否允许改变上传文件的属主,与下面一个设定项配合使用
# 注意,不推荐使用root用户上传文件
#chown_uploads=YES
# 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名
# 可以把上传的文件都改成root属主。whoever:任何人
#chown_username=whoever
# 设定系统维护记录FTP服务器上传和下载情况的日志文件
# /var/log/vsftpd.log是默认的,也可以另设其它
#xferlog_file=/var/log/vsftpd.log
# 是否以标准xferlog的格式书写传输日志文件
# 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定
# 默认值为NO
#xferlog_std_format=YES
# 以下是附加配置,添加相应的选项将启用相应的设置
# 是否生成两个相似的日志文件
# 默认在/var/log/xferlog和/var/log/vsftpd.log目录下
# 前者是wu_ftpd类型的传输日志,可以利用标准日志 工具 对其进行分析;后者是vsftpd类型的日志
#dual_log_enable
# 是否将原本输出到/var/log/vsftpd.log中的日志,输出到系统日志
#syslog_enable
# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒
# 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改
#idle_session_timeout=600
# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改
#data_connection_timeout=120
# 运行vsftpd需要的非特权系统用户,缺省是nobody
#nopriv_user=ftpsecure
# 是否识别异步ABOR请求。
# 如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用
# 而一般此设定并不安全,所以通常将其取消
#async_abor_enable=YES
# 是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。
# 启用此选项将允许服务器以ASCII方式传输数据
# 不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击
#ascii_upload_enable=YES
#ascii_download_enable=YES
# 登录FTP服务器时显示的欢迎信息
# 如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后
#ftpd_banner=Welcome to blah FTP service.
# 黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限
# 可以将某些特殊的email address抵挡住。
#deny_email_enable=YES
# 当上面的deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器
# 此文件需用户自己创建,一行一个email address即可
#banned_email_file=/etc/vsftpd/banned_emails
# 用户登录FTP服务器后是否具有访问自己目录以外的其他文件的权限
# 设置为YES时,用户被锁定在自己的home目录中,vsftpd将在下面chroot_list_file选项值的位置寻找chroot_list文件
# 必须与下面的设置项配合
#chroot_list_enable=YES
# 被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录
# 从而有利于FTP服务器的安全管理和隐私保护。此文件需自己建立
#chroot_list_file=/etc/vsftpd/chroot_list
# 是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O
#ls_recurse_enable=YES
# 是否允许监听。
# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
# 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,
# 则必须运行两套vsftpd,采用两套配置文件
# 同时确保其中有一个监听选项是被注释掉的
#listen_ipv6=YES
# 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
# 此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中
#pam_service_name=vsftpd
# 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO
# 若此项设为YES,则user_list文件中的用户允许登录FTP服务器
# 而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息有
#userlist_enable=YES/NO
# 设置是否阻扯user_list文件中的用户登录FTP服务器,默认为YES
#userlist_deny=YES/NO
# 是否使用tcp_wrappers作为主机访问控制方式。
# tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制
# 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制
# 前者设置允许访问记录,后者设置拒绝访问记录。
# 如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令:
# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器
# 此时FTP服务器虽可以PING通,但无法连接
tcp_wrappers=YES

##登录方式

vsftp提供3种远程的登录方式:

  • 匿名登录方式

就是不需要用户名,密码。就能登录到服务器电脑里面

  • 本地用户方式

需要帐户名和密码才能登录。而且,这个帐户名和密码,都是在你linux系统里面,已经有的用户。

  • 虚拟用户方式

同样需要用户名和密码才能登录。但是和上面的区别就是,这个用户名和密码,在你linux系统中是没有的(没有该用户帐号)

建立本地账户连接

1.修改配置文件

[root@elk-node-1 vsftpd]# cat vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

重启ftp服务

[root@elk-node-1 vsftpd]# /etc/init.d/vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]

2.建立本地用户

# useradd -s /sbin/nologin tom
# useradd -s /sbin/nologin awen
[root@elk-node-1 vsftpd]# cd /home/
awen/ tom/  
[root@elk-node-1 vsftpd]# touch /home/{awen,tom}/test.txt

3.连接ftp

安装ftp

yum -y install ftp

连接

[root@elk-node-1 vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (127.0.0.1:root): awen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
ftp> 
ftp> dir
227 Entering Passive Mode (127,0,0,1,135,237).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Mar 18 12:24 test.txt
226 Directory send OK.

也可以使用filezilla连接

Centos 7 vsftp 详解

配置SSL

由于ftp默认的配置是普通ftp模式,数据都是明文传输,特别是密码也会被明文显示,这个我们可以就上面的配置去登陆抓包看

Centos 7 vsftp 详解

可以看到,密码完全明文,假如说被非法分子拦截数据包,后果不堪设想,这样我们就需要配置加密的连接,让FTP变得安全些。

首先,在/etc/vsftpd/目录创建一个ssl目录,然后申请证书,参考 使用验证 DNS 的方式申请 Let’s encrypt 证书 ,证书申请完成后,将证书复制到创建的ssl目录中

cp fullchain.cer v0.ftp.v5linux.com.key /etc/vsftpd/ssl/

在上面的ftp配置文件中追加

allow_anon_ssl=NO #阻止匿名用户使用 SSL 登录
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO 所有的 SSL 数据链接都需重用已经建立的 SSL 会话
ssl_ciphers=HIGH
pasv_min_port=40000
pasv_max_port=50000
debug_ssl=YES
tcp_wrappers=YES
ssl_enable=YES
ssl_tlsv1=YES #开启tlsv1
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/ssl/fullchain.cer #设置公钥
rsa_private_key_file=/etc/vsftpd/ssl/v0.ftp.v5linux.com.key #设置私钥

该部分配置参考: https://linux.cn/article-8295-1.html

然后重启ftp服务

Centos 7 vsftp 详解 通过wireshark 抓包看下

Centos 7 vsftp 详解

最终结果

Centos 7 vsftp 详解

建立虚拟账户

未完待续。。

FTP常见故障

一般使用filezilla 连接ftp的话,如果有报错,在地址栏下方的状态区会有提示。

1.530 login incorrect

这个说明是账户验证失败

2.500 oops:cannot change directory

这种表述无权限切换目录

3.不支持TLS登陆,这种情况可以使用filezilla 选择文件—站点管理器,新建一个站点,然后填写相关信息后,加密方式选择普通FTP模式。

Centos 7 vsftp 详解

4.报错如下,这种是因为配置文件多了个空格,需要检查下配置文件

# /etc/init.d/vsftpd restart
Shutting down vsftpd:                                      [FAILED]
Starting vsftpd for vsftpd: 500 OOPS: bad bool value in config file for: allow_anon_ssl
                                                           [FAILED]

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Jakarta Struts Cookbook中文版

Jakarta Struts Cookbook中文版

斯格科 / 清华大学 / 2007-7 / 56.00元

Jakarta Struts Cookbook(中文版),ISBN:9787302155638,作者:(美)斯格科一起来看看 《Jakarta Struts Cookbook中文版》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具