193 lines
5.4 KiB
Markdown
193 lines
5.4 KiB
Markdown
---
|
||
title: "Ftp 笔记"
|
||
date: 2019-10-30T17:48:02+08:00
|
||
lastmod: 2019-10-31T21:49:00+08:00
|
||
tags: ["ftp", "vsftp"]
|
||
categories: ["storage"]
|
||
---
|
||
|
||
## 环境
|
||
- CentOS7
|
||
- vsftpd
|
||
- 关闭 selinux
|
||
|
||
## 安装 vsftpd 服务
|
||
```bash
|
||
yum install vsftpd
|
||
```
|
||
|
||
## 常用客户端
|
||
- ftp
|
||
- lftp
|
||
- curl
|
||
|
||
## 主动模式
|
||
- 建立控制命令连接
|
||
- 客户端连接服务端 21 号端口
|
||
|
||
- 建立数据传送连接
|
||
- 客户端在本地监听一个端口(大于 1024 ),并通过 PORT 命令通知服务端
|
||
- 服务端从 20 端口连接客户端正在监听的端口,向客户端发送数据
|
||
|
||
- 相关配置
|
||
```
|
||
# 开启主动模式
|
||
pasv_enable = no
|
||
```
|
||
|
||
## 被动模式
|
||
- 建立控制命令连接
|
||
- 客户端连接服务端 21 号端口
|
||
|
||
- 建立数据传送连接
|
||
- 服务端在本地再次监听一个端口(大于 1024),并通过 PASV 命令通知客户端
|
||
- 客户端连接服务端新监听的端口,下载服务端数据
|
||
|
||
- 相关配置
|
||
```
|
||
# 开启被动模式
|
||
pasv_enable = yes
|
||
# 数据连接可以使用的端口范围的最大端口,0 表示任意端口,默认值为0
|
||
pasv_max_port=30999
|
||
# 数据连接可以使用的端口范围的最小端口,0 表示任意端口,默认值为0
|
||
pasv_min_port=30000
|
||
```
|
||
|
||
## 匿名用户相关配置
|
||
```
|
||
# 控制是否允许匿名用户登入
|
||
# 匿名用户使用的登陆名为 ftp 或 anonymous,口令为空
|
||
# 匿名用户不能离开匿名用户家目录/var/ftp,且只能下载不能上传
|
||
anonymous_enable=YES/NO(YES)
|
||
|
||
# 匿名登入时,不会询问密码
|
||
no_anon_password=YES/NO(NO)
|
||
|
||
# 定义匿名登入的使用者名称,默认值为ftp
|
||
ftp_username=ftp
|
||
|
||
# 是否允许登陆用户有写权限,属于全局设置
|
||
write_enable=YES/NO(YES)
|
||
|
||
# 使用匿名登入时,所登入的目录,默认值为/var/ftp
|
||
# 注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限
|
||
anon_root=/var/ftp
|
||
|
||
# 是否允许匿名者有上传文件(非目录)的权限
|
||
# 只有在write_enable=YES时,此项才有效
|
||
# 匿名用户必须要有对上层目录的写入权
|
||
anon_upload_enable=YES/NO(NO)
|
||
|
||
# 是否允许匿名者下载可阅读的档案
|
||
anon_world_readable_only=YES/NO(YES)
|
||
|
||
# 是否允许匿名者有新增目录的权限
|
||
# 只有在write_enable=YES时,此项才有效
|
||
# 匿名用户必须要有对上层目录的写入权
|
||
anon_mkdir_write_enable=YES/NO(NO)
|
||
|
||
# 是否允许匿名入者拥有其他权限,譬如删除或者重命名
|
||
# 如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件
|
||
# 如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的目录
|
||
anon_other_write_enable=YES/NO(NO)
|
||
|
||
# 是否改变匿名用户上传文件(非目录)的属主
|
||
chown_uploads=YES/NO(NO)
|
||
|
||
# 设置匿名用户上传文件(非目录)的属主名
|
||
# 建议不要设置为root
|
||
chown_username=username
|
||
|
||
# 设置匿名登入者新增或上传档案时的 umask 值,默认值为 077
|
||
anon_umask=077
|
||
```
|
||
|
||
## 匿名用户上传下载
|
||
- 创建匿名用户登陆目录
|
||
```bash
|
||
mkdir -p /var/ftp/pub
|
||
chown -R ftp.ftp /var/ftp/pub
|
||
chmod o+w /var/ftp/pub
|
||
```
|
||
|
||
- 修改 vsftpd.conf
|
||
```
|
||
#允许匿名用户登录FTP
|
||
anonymous_enable=YES
|
||
#设置匿名用户的登录目录(如需要,需自己添加并修改)
|
||
anon_root=/var/ftp/pub
|
||
#打开匿名用户的上传权限
|
||
anon_upload_enable=YES
|
||
#打开匿名用户创建目录的权限
|
||
anon_mkdir_write_enable=YES
|
||
#打开匿名用户删除和重命名的权限(如需要,需自己添加)
|
||
anon_other_write_enable=YES
|
||
anon_umask=022
|
||
```
|
||
|
||
## 单用户
|
||
- 创建用户及数据目录
|
||
```bash
|
||
cd /sbin
|
||
ln -s nologin ftplogin
|
||
echo '/sbin/ftplogin' >> /etc/shells
|
||
useradd -M -s /sbin/ftplogin user1
|
||
passwd user1
|
||
mkdir -p -m 0700 /path/to/ftpdata
|
||
chown user1:user1 /path/to/ftpdata
|
||
```
|
||
|
||
- 修改 vsftpd.conf
|
||
```
|
||
# 不允许匿名用户登入
|
||
anonymous_enable=no
|
||
# 允许本地用户登入
|
||
local_enable=YES
|
||
# 当本地用户登入时,将被更换到定义的目录下
|
||
# 默认值为各用户的家目录
|
||
local_root=/path/to/ftpdata
|
||
# 是否允许登陆用户有写权限
|
||
# 属于全局设置,默认值为YES。
|
||
write_enable=YES/NO(YES)
|
||
# 本地用户新增档案时的 umask 值,默认值为077
|
||
local_umask=022
|
||
# 指定 local_root 为根目录,不允许切换到上级目录
|
||
chroot_local_user=YES
|
||
# chroot 后可写
|
||
allow_writeable_chroot=YES
|
||
```
|
||
|
||
## 多用户
|
||
- 创建用户及数据目录
|
||
```bash
|
||
cd /sbin
|
||
ln -s nologin ftplogin
|
||
echo '/sbin/ftplogin' >> /etc/shells
|
||
useradd -d /ftp_disk/user1 -s /sbin/ftplogin user1
|
||
useradd -d /ftp_disk/user2 -s /sbin/ftplogin user2
|
||
passwd user1
|
||
passwd user2
|
||
```
|
||
|
||
|
||
- 修改 vsftpd.conf
|
||
```
|
||
# 不允许匿名用户登入
|
||
anonymous_enable=no
|
||
# 允许本地用户登入
|
||
local_enable=YES
|
||
# 是否允许登陆用户有写权限
|
||
# 属于全局设置,默认值为YES。
|
||
write_enable=YES/NO(YES)
|
||
# 本地用户新增档案时的 umask 值,默认值为077
|
||
local_umask=022
|
||
# 指定家目录为根目录,不允许切换到上级目录
|
||
chroot_local_user=YES
|
||
# chroot 后可写
|
||
allow_writeable_chroot=YES
|
||
```
|
||
|
||
## 参考
|
||
- [vsftpd 详细配置](http://vsftpd.beasts.org/vsftpd_conf.html)
|
||
|