FTP 匿名 本地 虚拟用户认证方式

Posted wzj0015

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP 匿名 本地 虚拟用户认证方式相关的知识,希望对你有一定的参考价值。

FTP是在互联网中进行文件传输的一种协议,基于C/S模式,有一个服务端,有一个客户端
FTP默认有两个工作端口
       一个是20端口,用于数据的传输端口
       一个是21端口,是FTP服务端用于接收客户端发来的FTP指令和参数
       
       
FTP服务器按照FTP协议在互联网上提供文件存储,以便客户端能够快捷的访问数据
FTP客户端向服务端寻求资料

FTP工作模式主要分为两种
    主动模式:FTP服务器主动向客户端发起连接请求
    被动模式:FTP服务器在等待,等待客户端发来请求
    
    
##################安装FTP服务
FTP是一种文件传输协议,那么在linux系统下,有一款工具实现FTP协议,名为vsftpd,
非常安全的FTP守护进程服务

等于centos系统平台,直接用yum安装即可
yum install vsftpd -y

###########
学习修改vsftpd的配置文件,/etc/vsftpd/vsftpd.conf
linux在默认安装的软件配置文件都是/etc目录

[root@backup ~]# grep -Ev "^#|^$" /etc/vsftpd/vsftpd.conf
anonymous_enable=YES      #是否开启匿名用户允许访问
local_enable=YES           #是否允许本地用户登录FTP
write_enable=YES           #全局设置,是否允许写入,开启允许上传的权限
local_umask=022             #本地用户上传文件的umask
dirmessage_enable=YES        #允许为目录配置显示信息,显示每个目录下面的message_file文件内容    
xferlog_enable=YES           #开启日志功能,以及存放路径
connect_from_port_20=YES       #使用20端口进行连接
xferlog_file=/var/log/xferlog   #日志路径
xferlog_std_format=YES           #标准日志格式
listen=yes                       #绑定到监听端口
listen_ipv6=YES                # 开启ipv6
pam_service_name=vsftpd         #设置PAM的名称
userlist_enable=YES             #设置用户列表,允许或者禁止
tcp_wrappers=YES                #控制主机访问,检查/etc/hosts.allow  hosts.deny的配置得到防火墙作用



#########################333
vsftpd服务程序
vsftpd允许用户用三种认证的模式,登录到ftp服务器
-本地用户模式,基于linux本地账号密码进行认证,配置简单,但是一旦被破解,服务器信息很危险
-匿名用户模式,任何人无需密码直接登录
-虚拟用户模式,单独为ftp创建用户数据库,基于口令验证账户信息,只使用与FTP,不会影响其他
用户信息,最为安全。


【匿名用户模式】
修改/etc/vsftpd/vsftpd.conf配置文件如下参数
[root@backup ~]# grep "^anon" /etc/vsftpd/vsftpd.conf
anonymous_enable=YES                允许匿名用户访问
anon_upload_enable=YES              允许匿名用户上传
anon_mkdir_write_enable=YES          允许匿名用户创建目录
anon_other_write_enable=YES          允许匿名用户修改目录


重启服务,且加载开启自启
systemctl restart vsftpd
systemctl enable vsftpd


此时已经可以使用ftp命令连接到FTP服务器了
连接ftp服务端,其实连接的是目录/var/ftp/
[root@backup ftp]# pwd
/var/ftp
[root@backup ftp]# ls
pub

使用ftp客户端命令,连接ftp服务端
[root@backup ~]# ftp 10.0.0.200
Connected to 10.0.0.200 (10.0.0.200).
220 (vsFTPd 3.0.2)
Name (10.0.0.200:root): anonymous            输入默认账号
331 Please specify the password.
Password:                                    密码为空,直接回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (10,0,0,200,80,111).
150 Here comes the directory listing.
drwxr-xr-x    3 14       50             35 Jun 04 09:03 pub
226 Directory send OK.
ftp> cd pub                               切换目录
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (10,0,0,200,218,155).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Jun 04 08:56 匿名用户你好啊
226 Directory send OK.
ftp> ll
?Invalid command
ftp> mkdir chaoge                      
550 Create directory operation failed.          创建目录chaoge失败

由于我们使用的是匿名用户登录ftp,默认访问的/var/ftp/目录,我们检查下目录权限
[root@backup ftp]# ll
total 0
drwxr-xr-x 3 root root 35 Jun  4 17:03 pub
由于pub文件夹,是属于root用户,因此无法向其写入内容,可以修改文件夹属主属组
[root@backup ftp]# id ftp
uid=14(ftp) gid=50(ftp) groups=50(ftp)
[root@backup ftp]# chown  ftp.ftp /var/ftp/pub/
[root@backup ftp]# ll
total 0
drwxr-xr-x 3 ftp ftp 35 Jun  4 17:03 pub

再次登录ftp写入数据

ftp> mkdir chaoge                         ###########创建目录chaoge
257 "/pub/chaoge" created
ftp> ls
227 Entering Passive Mode (10,0,0,200,223,26).
150 Here comes the directory listing.
drwx------    2 14       50              6 Jun 04 09:25 chaoge
drwxr-xr-x    2 0        0               6 Jun 04 08:56 匿名用户你好啊
226 Directory send OK.
ftp> rename chaoge   chaoge668            ##########改变chaoge名称 为chaoge668
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (10,0,0,200,129,158).
150 Here comes the directory listing.
drwx------    2 14       50              6 Jun 04 09:25 chaoge668
drwxr-xr-x    2 0        0               6 Jun 04 08:56 匿名用户你好啊
226 Directory send OK.
ftp> rmdir chaoge668                          ###删除chaoge668
250 Remove directory operation successful.
ftp> ls
227 Entering Passive Mode (10,0,0,200,69,112).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Jun 04 08:56 匿名用户你好啊
226 Directory send OK.

此时已经成功向ftp文件夹写入了数据,服务器上检查文件信息
[root@backup ftp]# ll pub/
total 0
drwxr-xr-x 2 root root 6 Jun  4 16:56 匿名用户你好啊











【本地用户模式】
使用linux本地用户模式,比匿名用户来的安全,修改配置文件,关闭匿名模式,开启本地用户模式
/etc/vsftpd/vsftpd.conf 配置文件路径
[root@backup ftp]# grep -Ev "^$|^#" /etc/vsftpd/vsftpd.conf
anonymous_enable=no              ##关闭匿名模式
local_enable=YES                  ##开启本地用户模式
write_enable=YES                  ##允许用户写入
local_umask=022                  
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=yes
pam_service_name=vsftpd
userlist_enable=YES
userlist_denye=YES                  新增加的参数
tcp_wrappers=YES


重启vsftpd,加载配置
[root@backup ~]# systemctl  restart vsftpd

【此时我们可以用ftp客户端进行远程连接,使用linux本地账号】
1.确保服务器上有一个用户可以进行ftp连接,比如pyyu
[root@backup ~]#
[root@backup ~]# useradd pyyu
[root@backup ~]# passwd pyyu
Changing password for user pyyu.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.


2.此时用客户端连接ftp,使用pyyu账号,ftp连接后,默认进入用户家目录,以保证其他目录安全
linux系统的本地用户可以登录ftp,进入家目录后,进行增删改查
ftp 10.0.0.200
Connecting to 10.0.0.200:21...
Connection established.
To escape to local shell, press ‘Ctrl+Alt+]‘.
220 (vsFTPd 3.0.2)
Name (10.0.0.200:Administrator): pyyu
331 Please specify the password.
Password:
230 Login successful.
ftp:/home/pyyu>


3.有些用户是无法登录ftp,在一个用户名单里面被禁止了
[root@backup ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp    以下用户无法登录ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

尝试用这些用户登录ftp
ftp 10.0.0.200
Connecting to 10.0.0.200:21...
Connection established.
To escape to local shell, press ‘Ctrl+Alt+]‘.
220 (vsFTPd 3.0.2)
Name (10.0.0.200:Administrator): root            ##尝试用root用户登录
530 Permission denied.                    ####权限拒绝



############333
【ftp虚拟用户模式】
顾名思义虚拟用户认证方式,就是虚拟创建出来的用户,对于服务器而言也是最安全的方式

1.安装DB工具,能够转化普通文件为vsftpd识别的数据库加密文件
yum install db4 db4-utils -y

2.创建用于验证vsftpd的数据文件
[root@backup ~]# cd /etc/vsftpd/
[root@backup vsftpd]# vim ftp_user.txt
chaochao
888
chaoyu
666

3.由于这样普通文件很不安全。vsftpd也无法识别该TXT的文件数据,因此还得使用
db_load命令对于这个ftp_user.txt文件进行加密,并且修改他的文件属性,让普通
用户无法查看

3.1 加密文件
db_load -T -t hash -f /etc/vsftpd/ftp_user.txt  /etc/vsftpd/ftp_user.db

3.2降低文件的读写权限
[root@backup vsftpd]# chmod 600 /etc/vsftpd/ftp_user.db

3.3删除旧的数据文本
[root@backup vsftpd]# rm ftp_user.txt

4.创建当虚拟用户登录ftp之后进入的文件夹路径,且和linux中的一个用户做一个映射关系,
防止虚拟用户登录后,创建了文件夹,但是系统没有此用户会报错的一个问题

4.1 创建一个系统用和虚拟用户做映射,且不需要家目录,禁止用户登录shell
[root@backup vsftpd]# useradd -d /var/ftpdir -s /sbin/nologin virtual_chao
[root@backup vsftpd]# id virtual_chao
uid=1002(virtual_chao) gid=1002(virtual_chao) groups=1002(virtual_chao)


4.2检查该用户的家目录
[root@backup vsftpd]# ll -d  /var/ftpdir/
drwx------ 2 virtual_chao virtual_chao 62 Jun  5 04:58 /var/ftpdir/

4.3更改文件夹权限
[root@backup vsftpd]# chmod 755 /var/ftpdir/

4.4 修改virtual_chao用户添加到ftpsuer文件中,增大系统安全,该操作不会影响虚拟用户的操作
[root@backup vsftpd]# echo "virtual_chao" >> /etc/vsftpd/ftpusers

5.需要修改vsftpd的配置文件,添加一个虚拟用户验证的PAM文件,PAM是一组安全机制的模块,认证文件路径
在/etc/pam.d/vsftpd
注释掉文中所有语句,添加以下两句,注意db参数指定的db_load生成的文件路径。无需添后缀
auth        required    pam_userdb.so db=/etc/vsftpd/ftp_user
account     required    pam_userdb.so db=/etc/vsftpd/ftp_user

6.最后来修改vsftpd的配置文件,加载支持虚拟用户模式
[root@backup ftpdir]# grep -Ev "^$|^#" /etc/vsftpd/vsftpd.conf
anonymous_enable=no
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=yes
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=YES
tcp_wrappers=YES
guest_enable=YES                        ##开启虚拟用户
guest_username=virtual_chao             ##指定虚拟用户账号
allow_writeable_chroot=YES              ## 如果用户被限制只能在其家目录,允许用户可以对家目录写入数据

7.针对不同的虚拟用户设置不同的权限
chaochao    针对该用户,允许它能够上传、新建、修改、查看、删除等权限
chaoyu      只读权限

8.如上操作,需要修改vsftpd文件,定义 user_config_dir参数即可


8.1 创建一个管路虚拟用户的家目录,并且创建虚拟用户的配置文件
mkdir /etc/vsftpd/virtual_user_dir
[root@backup virtual_user_dir]# pwd
/etc/vsftpd/virtual_user_dir
[root@backup virtual_user_dir]# ll
total 8
-rw-r--r-- 1 root root 88 Jun  5 05:33 chaochao
-rw-r--r-- 1 root root 85 Jun  5 05:34 chaoyu

分别给两个虚拟用户的配置文件添加参数
[root@backup virtual_user_dir]# cat chaochao
anon_upload_enable=YES      
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

[root@backup virtual_user_dir]# cat chaoyu
anon_upload_enable=NO      
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

9.修改vsftpd的主配置文件,加载如上的权限控制
修改/etc/vsftpd/vsftp.conf  添加一行参数,自定义的vsftpd的用户配置文件
user_config_dir=/etc/vsftpd/virtual_user_dir

10.重启服务,加载配置
[root@backup virtual_user_dir]# systemctl restart vsftpd

11.此时使用客户端连接ftp,用虚拟用户进行验证

技术图片

 

以上是关于FTP 匿名 本地 虚拟用户认证方式的主要内容,如果未能解决你的问题,请参考以下文章

CentOS6.5下搭建ftp服务器(三种认证模式:匿名用户本地用户虚拟用户)

vsftpd 认证模式:匿名开放(匿名用户)本地用户虚拟用户区别?

vsftpd 认证模式:匿名开放(匿名用户)本地用户虚拟用户区别?

Vsftpd文件传输服务(三种认证模式:匿名开放 本地用户虚拟用户)

Vsftpd -- 验证方式

vsftp虚拟用户