透過 OpenSSH 使用 SFTP 登入時將帳戶設為 chroot 的方法

  分享到噗浪!

當使用 WinSCPFileZilla Client 使用 SFTP 協定登入 OpenSSH 伺服器時,在預設的情況下使用者可以自由的在檔案系統間遊走,當我們基於安全的理由希望透過 SFTP 登入伺服器後能透過 chroot() 的方法將使用者 關在(chroot) 特定目錄下,讓他不能跑到其他目錄瀏覽資料,透過一些簡單的設定就能達到,以下就是設定的方式。

下圖是用 WinSCP 登入 SFTP 伺服器後的畫面,預設路徑在 /home/test01 家目錄 (Home Directory) ,所以使用者可以回到上一層進入 /home 目錄,或進入到任何有權限的目錄,例如使用者可以進入 /etc 查看所有系統設定等等,這不是我們樂見的。

因此我在系統管理上的需求如下:

  • 不允許使用者登入 Shell 進行操作 ( 讓使用者只能使用 SFTP 傳輸檔案 )
  • 不允取使用者建立 SSH 通道 (SSH Tunnel 或稱 TCP Forwarding)
  • 不允取使用者建立 X11 Forwarding
  • 登入後需透過 chroot 限制存取目錄

要達到以上需求,我們必須修改 OpenSSH 的設定檔,並且在建立帳號時設定正確的參數,以及建立一個擁有者為 root 的 Chroot 目錄才行,以下是詳細的設定步驟說明:

1. 新增一個 SFTP 專用的群組

在這裡我們先建立一個 sftponly 群組(你當然也可以建立其他的名稱)

addgroup --system sftponly

 

2. 修改 OpenSSH 的設定檔

編輯 "/etc/ssh/sshd_config" 檔案,先找到以下 Subsystem 設定:

Subsystem sftp /usr/lib/openssh/sftp-server internal-sftp

並修改成:

Subsystem sftp internal-sftp

然後在該設定檔最後加上以下設定,其中的 ChrootDirectory 設定的 %u 代表使用者帳號:

Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

 

3. 建立新使用者,並加入 sftponly 群組

建立新使用者後,預設會建立 /home/USERNAME 家目錄 (Home Directory):

adduser sftpuser

由於我們在 sshd_config 設定檔中有宣告只要符合 sftponly 群組的使用者都套用 ChrootDirectory 的設定,因此必須將該使用者加入到 sftponly 群組中:

adduser sftpuser sftponly

另一個重點是,由於要套用 chroot() 的關係,該使用者登入後的根目錄必須擁有一些必要的目錄,為了節省設定上的麻煩,我們只要將該使用者的家目錄修改為根目錄 ( / ) 即可:

usermod -d / sftpuser

 

4. 修正使用者帳戶的家目錄權限

也是由於 chroot() 的特殊限制,這個要 chroot() 目錄的擁有者必須為 root,而且該目錄的權限也必須設定為 755 才行:

chown root.root /home/sftpuser
chmod 755 /home/sftpuser

這裡沒有設定正確的話將永遠無法成功登入,像我第一次設定時就遇到了以下錯誤: ( /var/log/auth.log )

sshd[8636]: pam_unix(sshd:session): session opened for user sftpuser by (uid=0)
sshd[8707]: fatal: bad ownership or modes for chroot directory "/home/sftpuser"
sshd[8636]: pam_unix(sshd:session): session closed for user

 

5. 在使用者目錄下建立允許上傳檔案的目錄,並賦予適當的目錄權限

這一個步驟也是蠻重要的,因為 chroot() 過的目錄擁有者必須為 root 且目錄權限為 755,所以使用者登入後一定無法上傳任何檔案到這個目錄,若要讓使用者能上傳檔案,則必須先幫使用者建立好適當的目錄與設定權限才能夠上傳檔案:

cd /home/sftpuser
mkdir upload
chown sftpuser.sftpuser upload

由於該帳戶只需讓使用者上傳檔案,不允許使用者登入使用 shell,所以也建議將一些家目錄內的隱藏檔刪除,以免使用者透過 WinSCPFileZilla Client 登入時看到一些奇怪的檔案。

 

經過幾個簡單的設定過程,就能夠給客戶使用安全的檔案傳輸功能,又能兼顧開放 SSH 的安全性!

 

相關連結


此文章由 will 發表於 2011/8/12 上午 07:59:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Linux | Security | 系統管理

標籤: , , , ,

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading