Linux

如何在 sshd 配置中指定使用者主目錄?

  • May 6, 2020

我將我的 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/$USERNAMEchroot 外部的引用。

正如評論中所討論的,由於您的使用者名和 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 訪問主目錄的任何內容不會破裂。

引用自:https://serverfault.com/questions/1015956