在这个示例中,我使用了https://charbelnemnom.com/2019/06/how-to-deploy-sftp-service-on-microsoft-azure/提供的模板,他挂载了一个特定于用户的卷。这工作得很好。我想将挂载更改为只挂载"/home“目录,这样FTP服务器将自动在挂载的主目录下创建用户文件夹。启动容器时,每个用户的用户文件夹都是在启动容器时创建的,但是在登录时,我得到
chroot目录组件"/home/“的所有权或模式错误
我看到其他帖子指出root必须访问这些目录,但我感到困惑,因为它显然有足够的权限在挂载的主目录中创建用户文件夹。那么,当用户尝试登录时,为什么要获得错误呢?如何修改资源模板以允许用户文件夹由FTP服务器自动创建,同时也允许用户成为CHRooted?
以下部分起作用:
"volumeMounts": [
{
"mountPath": "/home/user1",
"name": "sftpvolume",
"readOnly": false
}
]这样做是行不通的:
"volumeMounts": [
{
"mountPath": "/home",
"name": "sftpvolume",
"readOnly": false
}
]我认为以上两种方法的主要区别在于,在第一种方法中,部署脚本创建用户目录(根用户可能拥有该目录的权限),而如果FTP服务器在启动时创建用户目录,则可能不会。但我不知道该怎么解决。
发布于 2020-06-05 22:23:26
我认为您所观察到的行为与底层的码头映像atmoz/sftp有关。他们的自述文件“使用”部分中的一条注释说:
请记住,用户不能直接在自己的主目录下创建新文件,因此,如果希望用户上传文件,请确保至少有一个子目录。
编辑: Azure文件共享不能与此停靠者图像的自动创建用户文件夹功能一起使用。
您收到的错误消息是因为/home文件夹具有不正确的权限(chroot需要755,以root为所有者)。您可以通过使用az container exec -g RESOURCE_GROUP -n sftp-group --exec-command /bin/bash启动容器中的shell,然后运行ls -la来确认这一点。你会看到:
# ls -la
total 80
drwxr-xr-x 1 root root 4096 Jun 6 13:57 .
drwxr-xr-x 1 root root 4096 Jun 6 13:57 ..
-rwxr-xr-x 1 root root 0 Jun 6 13:57 .dockerenv
drwxr-xr-x 1 root root 4096 Dec 28 2018 bin
drwxr-xr-x 2 root root 4096 Oct 20 2018 boot
drwxr-xr-x 5 root root 360 Jun 6 13:57 dev
-rwxr-xr-x 1 root root 2665 Dec 28 2018 entrypoint
drwxr-xr-x 1 root root 4096 Jun 6 13:57 etc
drwxrwxrwx 2 root root 0 Jun 6 13:57 home不幸的是,您将无法实现使用不同用户的主文件夹作为chroot目标所需的特定所有权和权限结构。
Azure文件共享卷是用一个所有权+权限组合挂载的。无法按照此技术的工作要求更改子文件夹的所有权或权限。
https://stackoverflow.com/questions/62221083
复制相似问题