如何在 sshd 配置中指定用户主目录?

如何在 sshd 配置中指定用户主目录?

我已将 sftp 用户 chroot 到 /var/www,并且我希望他们能够自动移动到他们的目录中。我发现这个答案对我帮助很大:Chroot SFTP-可以允许用户写入当前(chroot)目录。但我想将用户移动到他或她的主目录(=/= 用户的名称)(这是 var/www 的子目录)。我试过:

Match Group sftpusers
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory /var/www
  ForceCommand internal-sftp -d %h

但我明白fatal: percent_expand: unknown key %h [postauth]

编辑:我发现那%d是用户目录,但它似乎不起作用,因为它是根据 /var/www 来寻找它的。

答案1

据我了解,您面临的问题是 internal-sftp 调用是在 chroot 到位后发生的,因此 %h(以及尝试的 %d)正在 chroot 内扩展。即使您的用户居住在/var/www/$USERNAME,使用 %d 也会自然地指示 internal-sftp 用尽/var/www/var/www/$USERNAME

%u 应该可以解决这个问题:

Match Group sftpusers
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory /var/www
  ForceCommand internal-sftp -d /%u

因此将告诉 internal-sftp 运行名为 的目录/$USERNAME。由于此调用是在 chroot 建立之后发生的,因此它应该取消引用/var/www/$USERNAMEchroot 之外的内容。

正如评论中所讨论的,由于您的用户名和主目录名称不同,一种解决方法是使用上述配置,然后为每个用户创建一个 /var/www/USERNAME 并将 /var/www/USERNAME 绑定到 /var/www/CURRENT_HOMEDIR_NAME,如下所示: mkdir /var/www/USERNAME; mount -o bind /var/www/USERNAME /var/www/CURRENT_HOMEDIR_NAME

现在,/var/www 下将为每个用户名提供两个目录,但其中一个目录将简单地指向另一个目录 - internal-sftp 将按预期工作,并且任何需要以 /var/www/CURRENT_NAME 身份访问主目录的内容都不会中断。

相关内容