我正在運行 Debian stable,並且希望為“sftponly”群組中的使用者建立以下環境:
- 入獄
- 可以透過SFTP傳輸
- 可以透過SCP傳輸
- 無法使用 SSH 互動登入
根據我的實驗和研究,sshd_config 中的以下節似乎讓我達到了 90%:
Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
這給了我被監禁的 SFTP 而沒有 SSH,這很好。但它也會停用SCP,這不太理想,因為相當多的客戶端是使用SCP 而不是SFTP 的遺留腳本化進程(我們要替換的伺服器支援這兩種協定),並且因為這些客戶端不受我們的控制並且很容易修改後,完全停用 SCP 可能不切實際。
此配置將停用 SCP 是有道理的,因為傳入的 SCP 連線會導致 sshd 透過使用者的登入 shell 產生一個「scp」進程(作為該使用者)。如果沒有特殊的「internal-sftp」處理程序,SFTP 似乎也是如此。
所以,我想我的問題是:有沒有一種方法可以達到與「internal-sftp」相同的效果,但對於 SCP,而不需要使用 scponly 和 rssh 等第三方工具? 「internal-sftp」真正好的一點是,它不需要使用支援文件來設定監獄,也不需要處理可能被利用的第三方 setuid 二進位(特別是 rssh,有被利用的歷史)。
答案1
答案2
您需要透過 ssh 執行此操作嗎?
如果你可以嘗試將他們的 shell 設定為:
/usr/libexec/openssh/sftp-server
並確保將以上內容新增至 /etc/shells 中
如果您想與使用內建帳戶分離,您可以設定 proftpd
我使用 proftpd 設定了安全的 SFTP。像這樣編譯proftpd:
./configure --prefix=/usr --sysconfdir=/etc --with-modules=mod_sftp
可以使用下面的這篇文章,以及谷歌上更多關於如何設定它的文章:
http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html
答案3
恐怕 OpenSSH 沒有任何類似的簡單或可靠的功能,因為正如您所觀察到的,有一個內建的 SFTP 伺服器,但沒有內建的 SCP 伺服器。
警告:中的建議文斯·伯克的回答由於多種原因,情況很糟糕:
shell 關於啟動檔案的行為可能會受到環境變數的影響,SSH 可以根據伺服器設定遠端設定這些變數。
使用者只需運行
ssh /bin/bash
並獲取 shell。它沒有tty,所以使用起來會很不方便,但那又怎樣……。更不用說他可以運行的所有其他程序,而您可能不希望他運行。.bash_profile
如果使用者只能這樣做,那麼更改 的權限就沒有什麼好處ssh host rm -f .bash_profile
。沒有提及主目錄權限。
… 等等。這種方法太脆弱了。
答案4
這是一個第三方工具,不在問題的範圍內,但我認為無論如何它都值得一提。
監獄套件:https://olivier.sessink.nl/jailkit/
它有一系列工具可以輕鬆設定使用者監獄 - 將二進位檔案和庫複製到監獄,並設定從監獄內部到作業系統的日誌記錄。我用它建構了 sftp/scp/rsync-only chroots。
它還附帶jk_lsh
(jailkit 有限 shell),可以在監獄外使用它來限制使用者可以運行的命令,例如,如果您只想在沒有 chroot 的情況下允許 scp/sftp/rsync。