如何在 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 查找它。
據我了解,您面臨的問題是內部 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/$USERNAME
chroot 外部的引用。正如評論中所討論的,由於您的使用者名和 homedir 名稱不同,解決方法是使用上述配置,然後為每個使用者創建一個 /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 訪問主目錄的任何內容不會破裂。