2009年2月20日 星期五

Setting ftp over ssh (sftp)


  • ssh 本來就可以有傳檔的功能,如果你是這電腦的本機使用者的話,遠端登入 shell 或什麼的都可以,但很明顯作為一個匿名 ftp server 太不安全
  • ftp 的使用者管理有分兩種:
    1. 使用者名稱真的存在於本機
    2. 帳號由 ftp 軟體自己管理
    後者應該會較安全,但需要另裝軟體,設定也比較複雜
  • 如果沒有額外設定的話,方法 A 不儘可以讓使用者以 shell 登入指行任何指令,也可以切換目錄到你的 /etc/ 下查看一些重要資訊如 passwd 等,十分危險
  • 然而經過設定的話可以達到下列目標:
    1. 使用者只能以 sftp 登入,使用 sftp 內指令
    2. 只能看見 ftp 檔案結構,就像一般的 ftp server 一樣
    本篇即以這種設定方式作介紹,並沒有提到限流量或流速的方法
##ReadMore##

快速設定

建立單一個能下載上傳的帳號並達到上面的要求(只能使用 sftp, 無法看見本機系統)
具體來說是參考這篇完成的,不過它的作法是建立群組而我只想要單一使用者

  1. 安裝 openssh 4.8 版以上
  2. 建立使用者 sftppublic [root]# useradd -s /bin/bash -d / -N -g nobody sftppublic
  3. 設定 /etc/ssh/sshd_config #讓 sshd 知道你想建立一個內部的 sftp server Subsystem sftp internal-sftp #允許 sftppublic 使用者遠端登入 AllowUsers sftppublic #限制使用者 ssh 進來只能用 sftp 指令 Match User sftppublic ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
  4. 建立目錄 /home/sftppublic, owner 和 group 都是 root, 權限 755
  5. 建立目錄 /home/sftppublic/upload, owner sftppublic, group user, 權限 775。sftppublic 可以上傳檔案至此
  6. (範例,請參考變更路徑)建立目錄 /home/sftppublic/user 並使用指令 [root]# mount --bind /home/user/share /home/sftppublic/user 好讓 sftppublic 可以存取資料,注意這裡使用 ln -s 會失敗;sftppublic 存取其中的權限同 others
  7. 變更 sftppublic 的密碼 [root]# passwd sftppublic
  8. 設定 sshd 允許外連並啟動/重啟 sshd (可參考此篇)
  9. 收工

說明

  1. 透過 ssh 登入進來的使用者會參考它的設定切換到對應的設定家目錄,不過在這之前已經先被 chroot 過了,因此對這個登入的使用者他看到的檔案結構裡就不會有 /home/sftppublic 這目錄,而是 / ,故創立使用者時要指定成目錄為 /
  2. 指定 group 為 nobody 即不屬於任何群組之意,所以若一檔案非 sftppublic 擁有,即會和 others 相同權限
  3. internal-sftp 為設定檔內識別字,並非指任一個實體存在於系統的執行檔,其它具體內容可以指令 [user]$ man sshd_config查看內容
  4. 若要建立多人使用者的話可以直接照著參考文做,建立使用者群組,修改 sshd_config 內的 Match Group 達到每個人都有自己的目錄可以上傳的效果。

沒有留言:

張貼留言