2024-10-25 18:07:02 +08:00

193 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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)