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 认证模式:匿名开放(匿名用户)本地用户虚拟用户区别?