安装vsftpd服务:

yum install vsftpd -y
[root@wadeson ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
启动vsftpd服务:
[root@wadeson ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson ~]# lsof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 32465 root 3u IPv4 249471 0t0 TCP *:ftp (LISTEN)
然后进行访问:

这里的pub目录实际是linux的/var/ftp/pub目录:
[root@wadeson tools]# cp php-5.6.30.tar.bz2 /var/ftp/pub/
[root@wadeson tools]# ll /var/ftp/pub/
total 14660
-rw-r--r--. 1 root root 15011816 Jul 11 22:11 php-5.6.30.tar.bz2
[root@wadeson tools]#
然后刷新网页:

访问的时候是使用的匿名用户,默认配置文件中匿名用户是启用的:
anonymous_enable=YES
现在将匿名用户取消:
anonymous_enable=NO
重启服务:
[root@wadeson tools]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
然后再次访问网页:

使用本地用户登陆:

# Uncomment this to allow local users to log in.
local_enable=YES          这句意思是可以用系统上已经存在的用户登陆ftp
[root@wadeson tools]# id wadeson
uid=500(wadeson) gid=500(wadeson) groups=500(wadeson)

默认登陆进来的是用户自己的家目录:

可以随意切换到任意目录

当然用户也可以在命令行登陆ftp:
首先安装ftp客户端命令:yum install ftp -y
[root@wadeson tools]# ftp 192.168.23.129
Connected to 192.168.23.129 (192.168.23.129).
220 (vsFTPd 2.2.2)
Name (192.168.23.129:root): wadeson
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/wadeson"
ftp>
 
 
现在打开匿名登陆,并且开启匿名用户有上传和write的权限:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson 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): ftp                 匿名用户使用ftp就可以,密码为空

331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,70,12).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Jul 11 14:11 pub
drwxr-xr-x 4 14 50 4096 Jul 12 01:01 test
226 Directory send OK.
ftp> cd test
250 Directory successfully changed.
ftp> put /etc/inittab
local: /etc/inittab remote: /etc/inittab
227 Entering Passive Mode (127,0,0,1,103,252).
553 Could not create file.
ftp>

可以看出还是不能上传,但是可以创建文件

ftp> mkdir test02
257 "/test/test02" created

为啥可以创建文件,是因为在test目录下面的权限为:

[root@wadeson ftp]# ll test/
total 528
-rw-------. 1 ftp ftp 521169 Jul 12 09:00 2016-5.7z
drwx------. 2 ftp ftp 4096 Jul 12 09:00 test
drwx------. 2 ftp ftp 4096 Jul 12 09:01 test01
drwx------. 2 ftp ftp 4096 Jul 12 10:37 test02
-rw-------. 1 ftp ftp 1806 Jul 11 23:02 Tsgateway.RDP

现在使用ftp客户端工具匿名用户登陆:

可以看出这种情况下可以传输成功,但是ftp命令行下面一直却失败

现在将匿名的设置全部关闭掉,使用本地作限制:

[root@wadeson 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): wadeson
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,244,146).
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd
257 "/home/wadeson"
ftp> put /etc/inittab
local: /etc/inittab remote: /etc/inittab
227 Entering Passive Mode (127,0,0,1,125,218).
553 Could not create file.                       这种方式传输文件还是不行
ftp> mkdir test
257 "/home/wadeson/test" created
ftp> ls
227 Entering Passive Mode (127,0,0,1,141,36).
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
226 Directory send OK.

但是这种方式传输又可以:

本地用户登陆可以随意切换目录,现在将它限制一下,只能在自己家目录访问:

只需要将chroot_local_user=YES这一行启用:

[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson 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): wadeson
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,71,18).
150 Here comes the directory listing.
-rw-r--r-- 1 500 500 521169 Jul 07 04:21 2016-5.7z
drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
226 Directory send OK.
ftp> cd /var
550 Failed to change directory.

现在将本地的用户切换目录做限制,哪些可以切换哪些不能切换:

将配置文件做如下修改:

#chroot_local_user=YES
chroot_list_enable=YES                 启用列表文件中的本地用户不能切换目录
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list        将本地用户存在这个文件列表中,这个文件中存储了wadeson这个用户

现在进行测试:

root@wadeson vsftpd]# chmod 600 chroot_list
[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson 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): wadeson
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,223,113).
150 Here comes the directory listing.
-rw-r--r-- 1 500 500 521169 Jul 07 04:21 2016-5.7z
drwxr-xr-x 2 500 500 4096 Jul 12 02:44 test
226 Directory send OK.
ftp> pwd
257 "/"
ftp> cd /var
550 Failed to change directory.

然后更换一个本地用户:

[root@wadeson 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): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,186,236).
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd
257 "/home/test"
ftp> cd /var/
250 Directory successfully changed.
ftp> pwd
257 "/var"

发现可以随意切换目录,现在目的已经成功了

现在将本地用户做限制,一部分可以登陆ftp,一部分不能登陆:

配置如下:

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list       在该文件中的本地用户都不能登陆ftp

# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.

向里面新增用户wadeson

然后测试:

[root@wadeson vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@wadeson 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): wadeson
530 Permission denied.
Login failed.

而另外一个刚刚创建的test用户依然可以登陆:

[root@wadeson 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): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/test"

如果将userlist_deny=YES改为NO那么该/etc/vsftpd/user_list 中的本地用户可以登陆,没有存进去的用户则不能登陆

现在开始配置基于虚拟用户登陆的机制:

总共有七个步骤:

1、建立虚拟ftp用户的账号数据库文件

2、创建ftp根目录及虚拟用户映射的系统用户

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

4、在vsftpd.conf文件中添加支持配置

5、为个别虚拟用户建立独立的配置文件

6、重新加载vsftpd配置

7、使用虚拟ftp账户访问测试

开始操作第一步:

1、建立虚拟ftp用户的账号数据库文件

建立虚拟账户的账户名和密码列表

[root@wadeson vsftpd]# vim vuser.txt

admin     账号
12345    密码
test     账号
12345    密码

将账号密码列表文件转化为db:

[root@wadeson vsftpd]# db_load -T -t hash -f vuser.list vuser.db

修改两个文件的权限:

[root@wadeson vsftpd]# chmod 600 vuser.*

-rw-------. 1 root root 12288 Jul 12 11:19 vuser.db
-rw-------. 1 root root 40 Jul 12 11:14 vuser.txt

2、创建ftp根目录及虚拟用户映射的系统用户

[root@wadeson ~]# mkdir /var/ftproot

drwxr-xr-x.  2 root root 4096 Jul 12 11:21 ftproot

创建一个系统用户用来被虚拟用户映射使用:

[root@wadeson var]# useradd -d /var/ftproot/ -s /sbin/nologin ftpuser    系统用户ftpuser
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@wadeson var]# cat /etc/passwd

ftpuser:x:502:502::/var/ftproot/:/sbin/nologin

[root@wadeson var]# chown ftpuser:ftpuser /var/ftproot/

drwxr-xr-x.  2 ftpuser ftpuser 4096 Jul 12 11:21 ftproot

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

[root@wadeson var]# cd /etc/pam.d/

[root@wadeson pam.d]# vim vsftpd.vu

auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/ets/vsftpd/vuser

4、在vsftpd.conf文件中添加支持配置

pam_service_name=vsftpd.vu
guest_enable=YES
guest_username=ftpuser

整个vsftpd.conf的配置内容:

anonymous_enable=NO
local_enable=YES
#write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_port=21
userlist_enable=YES
chroot_local_user=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=ftpuser     (如果系统上没有该用户,需要创建)
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
pasv_min_port=50000
pasv_max_port=60000
pasv_enable=yes
max_clients=200
max_per_ip=4
idle_session_timeout=600
ftpd_banner=Welcome to opendoc FTP service.

将虚拟用户映射到本地用户,那么本地用户还是要支持访问ftp
local_enable=YES必须启用
5、为个别虚拟用户建立独立的配置文件
[root@wadeson vsftpd]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@wadeson vsftpd]# vim vsftpd_user_conf/admin

write_enable=YES
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=Yes
local_root=/var/ftproot        配置了chroot不能随意切换目录,整个admin虚拟用户权限为可创建可删除,可上传,可下载

配置另一个test用户:         该用户只能下载

write_enable=NO 
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_umask=022
download_enable=yes
local_root=/var/ftproot

vsftpd搭建ftp服务,并实现虚拟用户访问的更多相关文章

  1. 使用vsftpd 搭建ftp服务

    ftp 基础服务器基础知识 ftp有三种登录方式.匿名登录(所有用户).本地用户.虚拟用户(guest). FTP工作模式 主动模式:服务端从20端口主动向客户端发起链接. 控制端口21:数据传输端口 ...

  2. CentOS7 FTP服务搭建(虚拟用户访问FTP服务)

    概述 最近在搞Oracle在Linux系统下集群,针对Linux系统,笔人也是一片空白.Liunx外部文件的传输,避免不了使用FTP服务,所以现在就整理下,CentOS7环境下,FTP服务的搭建.FT ...

  3. FTP相关、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    1.FTP相关(file transfer protocol,文件传输协议)   2.用vsftpd搭建ftp安装:yum install vsftpd -y创建一个虚拟用户:useradd  vft ...

  4. FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务

    FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...

  5. 在Win7的IIS上搭建FTP服务及用户授权

    FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属于应用层协议(端口号通常为21),用于Internet上的双向文件传输(即文件的上传和下载).在网络上有 ...

  6. 在Win7的IIS上搭建FTP服务及用户授权——转载!!

    原文地址:http://blog.sina.com.cn/s/blog_6cccb1630100q0qg.html FTP服务 FTP是文件传输协议(File Transfer Protocol)的简 ...

  7. 【转】在Win7的IIS上搭建FTP服务及用户授权

    [转]在Win7的IIS上搭建FTP服务及用户授权 [转]在Win7的IIS上搭建FTP服务及用户授权 FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属 ...

  8. exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

    6月22日任务 14.4 exportfs命令14.5 NFS客户端问题15.1 FTP介绍15.2/15.3 使用vsftpd搭建ftp 14.4 exportfs命令 当我们修改nfs的配置文件e ...

  9. xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    6月25日任务 15.4 xshell使用xftp传输文件15.5 使用pure-ftpd搭建ftp服务扩展vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.co ...

随机推荐

  1. jenkins配置邮件报警

    author:headsen chen date: 2018-05-15  13:49:21 在jerkins的主配置页面上: 注意:不用 安装什么报警邮件的插件.直接配置就可以了. 系统管理 --- ...

  2. 【BZOJ2253】[2010 Beijing wc]纸箱堆叠 cdq分治

    [BZOJ2253][2010 Beijing wc]纸箱堆叠 Description P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n p a , , 之后,即可自动化生产三边边长为 ...

  3. 在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案

    在开发网站时候我们会遇到下面问题? - 在引用网页中引用js和css或者动态的Servlet的时候我们是写绝对路径还是相对路径? - 如果写相对路径吧,上线偶尔会报404,还要手动去拼接绝对路径 - ...

  4. DocumentFragment 不支持 innerHTML

    在需要多次使用 innerHTML 的地方,一般是推荐用 DocumentFragment 来缓存,最后一次性插入 body,从而减少浏览器的渲染,提高性能,不过最近也发现一个 bug: Docume ...

  5. 160512、nginx+多个tomcat集群+session共享(windows版)

    第一步:下载nginx的windows版本,解压即可使用,点击nginx.exe启动nginx 或cmd命令 1.启动: D:\nginx+tomcat\nginx-1.9.3>start ng ...

  6. CLR via 笔记4.2 类型转换 is 与 as 区别

    is 和 as 操作符是用来进行强制类型转换的 is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常 object o = new object(); if (o i ...

  7. the ONLY_FULL_GROUP_BY SQL mode is enabled (which it is by default) 用户变量

    MySQL :: MySQL 8.0 Reference Manual :: 5.1.11 Server SQL Modes https://dev.mysql.com/doc/refman/8.0/ ...

  8. __destruct()析构函数的执行时刻 __construct()构造函数传入参数 构造函数与后台登录安全

    <?php class test_construct_avg { function __construct($input = '') { $this->input = $input; } ...

  9. [报错]Unable to simultaneously satisfy constraints

    项目中自定义Cell,控件使用autoLayout来设置约束,发现运行页面表现正常,但是控制台报如下错误: Unable to simultaneously satisfy constraints. ...

  10. XAF 如何从Excel复制多个单元格内容到GridView(收藏)

    XAF 如何从Excel复制多个单元格内容到GridView 2012年04月11日 ⁄ 综合 ⁄ 共 10998字 ⁄ 字号 小 中 大 ⁄ 评论关闭 how to paste some excel ...