在 sftp 設定上共用 ssh 公鑰

在 sftp 設定上共用 ssh 公鑰

我已經在 CentOS 上設定了 SFTP 伺服器,如下所示這個文檔。我的目的是禁止屬於該群組的新使用者( user1user2)的控制台登錄sftpusers,但仍可登入各自的sftp資料夾。

另外,我想使用 CentOS 用戶使用的相同金鑰(可以毫無問題地登入控制台sftp)。為此,我將.ssh資料夾從 CentOS 使用者複製到user1user2home 資料夾,更改使用者、700資料.ssh夾和檔案600的所有權authorized_keys

儘管如此,我還是不斷收到訊息Server refused our key。 CentOS 用戶使用的金鑰就像所有伺服器中的主金鑰一樣,這就是為什麼我想為新用戶重複使用該金鑰。

我怎麼才能實現這個配置?

更新

為每個使用者產生金鑰後,兩個使用者都可以使用其私鑰遠端存取伺服器,但是當我啟動/etc/ssh/sshd_config權限中的以下配置時,使用該sftp命令會被拒絕。

固態硬碟配置

Match Group sftpusers #Or you could replace Group with User and specify a different configuration for each user
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
ChrootDirectory /path/to/shared_folder/%u # %h the path to upload the files
ForceCommand internal-sftp

來自 shell 的訊息

packet_write_wait: Connection to IPSERVER port 22: Broken pipe
Couldn't read packet: Connection reset by peer

答案1

更新引入了與原始問題不同的問題。看來原來的問題已經不再是問題了。我正在解決更新問題。

手動的內容如下:

ChrootDirectory
chroot(2)指定身份驗證後的 目錄路徑名。在會話啟動時,sshd(8)檢查路徑名的所有組成部分是否為 root 擁有的目錄,任何其他使用者或群組都無法寫入這些目錄。

我的測試表明,如果不滿足此條件,那麼Broken pipe在嘗試使用sftp.

在你的情況下,路徑名是/path/to/shared_folder/%u.注意%u(擴展後)是一個組件;因此它應該是「root 擁有的並且不能被任何其他使用者或群組寫入」。您應該修復所有權和權限。那麼,顯然,用戶將無法寫入該目錄。無論您使用什麼路徑名ChrootDirectory,使用者都將無法寫入它(除非使用者是 root)。換句話說,使用者將無法/在 chroot 環境中進行寫入。為了允許寫入,您需要一個子目錄。解決這個問題的方法很少。

  • 使用公用 chroot 目錄中的主目錄。

    手冊也指出:

    之後chrootsshd(8)將工作目錄變更為使用者的主目錄。

    我假設預設情況下主目錄類似於/home/user1/home/user2。這表示以下情況:

    1. 將伺服器設定為 chroot 到/path/to/shared_folder(否%u):

      ChrootDirectory /path/to/shared_folder
      
    2. 在那裡複製相關的目錄結構(/path/to/shared_folder/home/user1等等)。

    3. path滿足、to和的條件shared_folder
    4. 使所有權和權限home與常規/home.
    5. 使內部目錄的所有權和權限home/home.

    透過此設置,sftp將在身份驗證後自動放置user1/path/to/shared_folder/home/user1但他們會將其視為/home/user1由於chroot.

  • 在公用 chroot 目錄中使用自訂目錄。

    ForceCommand internal-sftp您可以指定起始目錄(internal-sftp支援與sftp-server)。像這樣:

    ChrootDirectory /path/to/shared_folder
    ForceCommand internal-sftp -d /home/%u
    

    以確保sftp使用者將使用/path/to/shared_folder/home/…作業系統中的正式主目錄。或者像這樣:

    ChrootDirectory /path/to/shared_folder
    ForceCommand internal-sftp -d /%u
    

    簡化路徑並擺脫home中間的這個。這樣在使用 登入後user1就會看到他們在。在這種情況下應直接包含使用者資料夾(而不是)。/user1sftpshared_folderhome

  • 使用特定於使用者的 chroot 目錄中的至少一個子目錄。

    上述解決方案允許使用者瀏覽彼此的目錄。使用者將能夠對其chmod文件(sftp支援chmod)授予或拒絕存取權限。

    您使用%uChrootDirectory,因此您很可能想要建立單獨的 chroot 目錄。在這種情況下,請執行您所做的操作:

    ChrootDirectory /path/to/shared_folder/%u
    

    並設定每個組件(包括擴展的組件)的所有權和權限%u以滿足條件。除非涉及唯讀訪問,否則您至少需要一個使用者可寫入的子目錄。幾種可能性:

    • 複製作業系統中定義的使用者主目錄的路徑;
    • 強迫/home/%uForceCommand internal-sftp -d /home/%u;
    • 強迫/%uForceCommand internal-sftp -d /%u;
    • 使用固定的子目錄名稱,例如ForceCommand internal-sftp -d /files.

    在每種情況下,您都需要準備內部的目錄結構/path/to/shared_folder。例如,如果您想強制/home/user1for user1,相關路徑將是:

    /path/to/shared_folder/user1/home/user1
    

    其中pathtoshared_folder和(第一個)user1滿足條件,home進行模擬/home,並且(第二個)user1可由使用者寫入。

更靈活的方法是可能的。例如,您可以為user1和擁有一個共同的 chroot 目錄user2,但為user3.

Chroot 目錄是否常見,我個人會以最不令人驚訝的方式建立子目錄,這樣任何使用者都會發現自己位於他們期望的目錄中。pwd輸入後,sftp他們應該會看到類似的內容/home/user1。我發現其他可能性 ( /user1, /files) 有點令人驚訝。

相關內容