# vsftpd 简介 [参考][1]
vsftpd 是**very secure FTP daemon**的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
### 特性
* 安全性检查规则非常严格
* 轻量级、高性能
* 支持虚拟用户
* 默认是被动模式 passive
## 基于PAM实现用户认证,支持虚拟用户
/etc/pam.d/*
/lib/securuty/* 认证模块
/lib64/securuty/* 认证模块
## vsftpd安全性
/var/ftp:除了root用户外,其他用户没有写权限,以此来提高安全性;
同时,可以在/var/ftp下建立子文件,使ftp用户获得写权限
# vsftpd安装
~~~
# yum install -y vsftpd
~~~
安装后直接启动即可使用,ftp默认访问/var/ftp,系统用户默认访问自己的家目录。
## 启动ftp
~~~
# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
# chkconfig vsftpd on
# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# netstat -tlnp可以看到监听了tcp/21端口
~~~
## 测试1
在windows终端测试,匿名登录,无密码,help查看相关命令
~~~bash
ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (localhost:root): ftptest03
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.
~~~
## man vsftpd.conf 查看帮助文档
```
listen=YES
anonymous_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
local_root=/disk1/pub
pam_service_name=vsftpd
allow_writeable_chroot=YES
chroot_local_user=YES
listen_port=21
write_enable=YES
local_enable=YES
log_ftp_protocol=YES
xferlog_enable=YES
```
## 测试2
在浏览器中登录系统用户,使用系统用户登录
```
# 创建用户
useradd -d /disk1/vsftpd_data/ -s /sbin/nologin ftptest02
```
![](https://box.kancloud.cn/3437a756e4dfbd685188d2cba9cdccb6_198x28.png)
## 测试3
在linux测试
~~~
# ftp 192.168.8.60
ftp> lcd /etc
Local directory now /etc
ftp> put inittab
local: inittab remote: inittab
227 Entering Passive Mode (192,168,8,60,46,147)
150 Ok to send data.
226 File receive OK.
1666 bytes sent in 0.00062 seconds (2.6e+03 Kbytes/s)
~~~
## 应用1 匿名用户上传
匿名上传默认是关闭的
1 取消注释
~~~
anon_upload_enable=YES
~~~
2 但对于/var/ftp/pub文件的属主和属组是root,因此还是不能上传文件
可以在/var/ftp下创建upload,并添加访问控制
~~~
# setfacl -m u:ftp:rwx upload
# getfacl upload
# file: upload
# owner: root
# group: root
user::rwx
user:ftp:rwx
group::r-x
mask::rwx
other::r-x
~~~
>[info]文件服务权限=文件系统权限×文件共享权限
## 匿名服务其他选项
~~~
启用anon_mkdir_write_enable=YES,允许匿名用户创建目录
启用anon_other_write_enable=YES,允许匿名用户删除目录和文件
启用dirmessage_enable=YES,在文件夹下创建.message,每次切换目录时会显示此提示信息
启用xferlog_enable=YES,xferlog_file=/var/log/vsftpd.log,开启传输日志,删除,创建目录不会记忆
~~~
可以用来控制匿名上传后的属主,用来控制权限
~~~
#chown_uploads=YES
#chown_username=whoever
~~~
## 应用2 限制ftp用户家目录
系统用户拥有ftp登录权限后,将有能力查看系统中的很多内容,这样的ftp权限过大,需要进行限制。
### 限制指定的用户,chroot_list为限制名单
~~~
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
~~~
并创建文件/etc/vsftpd/chroot_list,文件格式,每行一个用户名即可;在这个文件文件中的用户将被限制在家目录下,不在其目录中用户不受影响
### 限制所有用户的家目录,列表变成不限制名单
~~~
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
~~~
## ftp安全
1 不允许匿名用户登录和上传
~~~
anonymous_enable=NO
anon_upload_enable=NO
~~~
2 限制系统用户家目录,并且不允许其ssh登录 /sbin/nologin
~~~
chroot_local_user=YES
~~~
3 只允许白名单登录 /etc/vsftpd/user_list
~~~
userlist_enable=YES
userlist_deny=NO
~~~
[1]:[https://www.cnblogs.com/st-jun/p/7743255.html](https://www.cnblogs.com/st-jun/p/7743255.html)
- 目录
- 离散的内容
- IO模型
- 网卡绑定
- ssh
- 硬件测试
- 硬件
- limits
- 网络流量
- 硬盘IO
- 硬盘
- tmux
- 主机名和域名
- http_proxy
- iptables
- 内核参数
- 块设备和字符设备
- 内存
- 虚拟内存并非交换分区
- 网络延时
- 概念
- 多核压缩
- linux基础
- SSH协议
- 软件管理
- yum
- 制作本地源 yum系列
- 制作本地源 apt系列
- apt
- 在 Linux 中移除从源代码安装的程序的一种简单的方法
- 其他
- 源码编译和二进制安装后更改配置
- DNS
- bind
- 守护进程
- 特殊权限
- limit.conf配置
- 网络
- shell-ok
- 变量ok
- 数组ok
- 系统变量和环境变量
- 运算符和计算-ok
- 条件测试-ok
- 选择-ok
- shell循环-ok
- 输出echo和printf-ok
- 技巧-ok
- pre-web
- http协议
- web服务器
- Apache
- apache安装
- yum安装
- 二进制安装
- 编译安装
- httpd命令
- 运行 监控apache
- apache配置文件
- 常用配置
- MPM多处理模块
- 编译模块
- apache模块
- apache核心模块
- apache标准模块
- apache第三方模块
- 虚拟主机
- 1
- CGI-FastCGI-SSI
- 别名和重定向
- apache应用
- 301重定向
- apache防盗链
- http转化为https
- 访问时间段控制
- 控制访问目录
- 限制指定USER_AGENT
- 不同客户端访问不同网页
- apache黑名单
- httpd之禁止解析php
- 不记录css/js/img的访问日志
- 浏览器端静态缓存
- apache访问日志自动切割
- order-require
- 压缩传输
- httpd-ssl
- apache代理
- 正向代理
- 反向代理
- apache调优
- httpd压力测试工具ab
- CGI测试
- php
- php原理
- httpd和php的结合方式
- php yum安装之DSO模式
- php 编译安装之DSO模式
- php-fpm详解
- php yum安装之php-fpm模式
- php 编译安装之FastCGI模式
- php扩展之mysql
- php扩展之gd
- php扩展之pcntl
- php扩展之xcache
- php扩展之ZendGuardLoader
- phpMyAdmin
- wordpress
- 数据库-mysql
- 数据库原理
- mysql数据库原理
- mysql源码编译安装
- mysql二进制包安装
- mysql命令行工具
- 更改密码
- 数据库授权grant
- mysql日志
- 命令
- 常用
- 小命令大作为
- awk 报告生成器
- 网络命令
- 命令查找
- 压缩归档命令
- 文件管理
- 文件管理命令
- 文件查看命令
- 目录管理命令
- 用户管理命令
- 用户权限管理
- curl
- cheat
- chrony
- command
- crontab任务计划
- cut
- date
- dd
- df
- echo
- find
- grep
- hash
- iftop
- kill pkill killall
- ls
- lsmod和modprobe
- lsof
- man
- mkpasswd
- mount
- mtr
- netstat
- nmap
- nc
- NTP
- passwd
- rm
- rdate
- pv
- sar系统活动情况报告
- sed文本处理命令
- setup
- screen
- shutdown
- sort 命令
- sudo
- tcpdump
- top
- uniq
- wget
- who
- xargs
- 监控
- zabbix邮件报警
- Redis
- redis安装
- redis数据类型和操作方法
- redis持久化和配置
- redis主从配置
- php连接redis
- redis实现session共享
- 安装测试
- redis设置密码
- ELK日志分析系统
- elasticsearch
- logstash
- logstash插件
- filebeat日志收集
- kibana
- jenkins
- jenkins安装与配置
- 案例1
- 案例2
- 案例3
- 代码仓库之svn
- svn服务端配置
- 常用操作
- svn备份
- LB集群
- LVS负载均衡集群
- ipvsadm使用方法
- LVS调度方法
- NAT原理
- NAT实践
- DR原理
- DR实践
- TUN原理
- LVS持久连接
- HA集群
- HPC集群
- 共享存储
- ftp协议
- vsftpd
- NFS
- 网站架构发展
- 文件同步
- rsync基本用法
- rsync安装和使用_拉取模式
- lsyncd安装和用法
- zabbix
- zabbix服务端安装
- zabbix客户端安装
- zabbix编译安装
- zabbix监控tomcat
- zabbix监控mysql
- gitlab
- supervisor
- nsq
- ruby
- nodejs
- consul
- mesos
- zookeeper
- rwho
- 对象存储
- 工具
- rclone
- minio
- linux 性能调优
- CPU
- 第一部分 CPU
- 安全