

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 实现逻辑目录
<a name="implement-log-dirs"></a>

**重要**  
**根目录要求**
如果您未使用 Amazon S3 性能优化设置，则启动时必须存在根目录。
对于 Amazon S3，这意味着创建一个以正斜杠 () `/` 结尾的零字节对象。
为避免此要求，请考虑在创建或更新服务器时启用 Amazon S3 性能优化。
 HomeDirectory 使用 LOGICAL 指定 a 时 HomeDirectoryType，该值必须映射到您的一个逻辑目录映射。该服务在用户创建和更新过程中都会对此进行验证，以防止配置失效。
**逻辑主目录配置**
使用 LOGICAL 作为您的时 HomeDirectoryType，请注意以下几点：  
该 HomeDirectory 值必须对应于您现有的逻辑目录映射之一。
在用户创建和更新过程中，系统会自动对此进行验证。
此验证可防止可能导致访问问题的配置。

## 启用逻辑目录
<a name="enable-log-dirs-small"></a>

要为用户使用逻辑目录，请将`HomeDirectoryType`参数设置为`LOGICAL`。在创建新用户或更新现有用户时执行此操作。

```
"HomeDirectoryType": "LOGICAL"
```

## `chroot`为用户启用
<a name="chroot"></a>

对于 **chroot**，创建一个由每个用户的单个 `Entry` 和 `Target` 配对组成的目录结构。Entry**/**代表根文件夹，而 **Targ** et 则指定存储桶或文件系统中的实际位置。

------
#### [ Example for Amazon S3 ]

```
[{"Entry": "/", "Target": "/amzn-s3-demo-bucket/jane"}]
```

------
#### [ Example for Amazon EFS ]

```
[{"Entry": "/", "Target": "/fs-faa1a123/jane"}]
```

------

您可以像前面的示例一样使用绝对路径，也可以使用 `${transfer:UserName}` 动态替换用户名，如下例所示。

```
[{"Entry": "/", "Target":
"/amzn-s3-demo-bucket/${transfer:UserName}"}]
```

在前面的示例中，用户被锁定到其根目录，且无法在层次结构中向上移动。

## 虚拟目录结构
<a name="virtual-dirs"></a>

对于虚拟目录结构，只要用户的 IAM 角色映射有权访问它们，您就可以创建多个 `Entry` `Target` 配对，目标位于您的 S3 存储桶或 EFS 文件系统的任意位置，包括跨多个存储桶或文件系统。

在以下虚拟结构示例中，当用户登录 AWS SFTP 时，他们位于根目录中，子目录为`/pics`、`/doc``/reporting`、和。`/anotherpath/subpath/financials`

**注意**  
除非您选择优化 Amazon S3 目录的性能（当您创建或更新服务器时），否则如果目录尚不存在，则用户或管理员需要创建这些目录。避免这个问题是考虑优化 Amazon S3 性能的理由。  
对于 Amazon EFS，您仍然需要管理员来创建逻辑映射或`/`目录。

```
[
{"Entry": "/pics", "Target": "/amzn-s3-demo-bucket1/pics"}, 
{"Entry": "/doc", "Target": "/amzn-s3-demo-bucket1/anotherpath/docs"},
{"Entry": "/reporting", "Target": "/amzn-s3-demo-bucket2/Q1"},
{"Entry": "/anotherpath/subpath/financials", "Target": "/amzn-s3-demo-bucket2/financials"}]
```



**注意**  
 您只可以将文件上传到映射的特定文件夹。这意味着，在前面的示例中，您不能上传到 `/anotherpath` 或 `anotherpath/subpath` 目录；仅限 `anotherpath/subpath/financials`。您也无法直接映射到这些路径，因为不允许重叠路径。  
 例如，假设您创建以下映射：  

```
{
   "Entry": "/pics", 
   "Target": "/amzn-s3-demo-bucket/pics"
}, 
{
   "Entry": "/doc", 
   "Target": "/amzn-s3-demo-bucket/mydocs"
}, 
{
   "Entry": "/temp", 
   "Target": "/amzn-s3-demo-bucket2/temporary"
}
```
 您只可以将文件上传到这些存储桶中。当您首次通过 `sftp` 连接时，您会被放到根目录 `/` 中。如果您尝试将文件上传到该目录，则上传将失败。以下命令显示了一个示例序列：  

```
sftp> pwd
Remote working directory: /
sftp> put file
Uploading file to /file
remote open("/file"): No such file or directory
```
要上传到任何 `directory/sub-directory`，必须将路径明确映射到 `sub-directory`。

有关配置逻辑目录以及**chroot**为用户配置逻辑目录的更多信息，包括您可以下载和使用的 AWS CloudFormation 模板，请参阅 AWS 存储博客中的使用 [chroot 和逻辑目录简化 AWS SFTP 结构](https://aws.amazon.com/blogs/storage/simplify-your-aws-sftp-structure-with-chroot-and-logical-directories/)。