- ssh 本來就可以有傳檔的功能,如果你是這電腦的本機使用者的話,遠端登入 shell 或什麼的都可以,但很明顯作為一個匿名 ftp server 太不安全
- ftp 的使用者管理有分兩種:
- 使用者名稱真的存在於本機
- 帳號由 ftp 軟體自己管理
- 如果沒有額外設定的話,方法 A 不儘可以讓使用者以 shell 登入指行任何指令,也可以切換目錄到你的 /etc/ 下查看一些重要資訊如 passwd 等,十分危險
- 然而經過設定的話可以達到下列目標:
- 使用者只能以 sftp 登入,使用 sftp 內指令
- 只能看見 ftp 檔案結構,就像一般的 ftp server 一樣
快速設定
建立單一個能下載上傳的帳號並達到上面的要求(只能使用 sftp, 無法看見本機系統)
具體來說是參考這篇完成的,不過它的作法是建立群組而我只想要單一使用者
- 安裝 openssh 4.8 版以上
- 建立使用者 sftppublic
[root]# useradd -s /bin/bash -d / -N -g nobody sftppublic - 設定 /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 - 建立目錄 /home/sftppublic, owner 和 group 都是 root, 權限 755
- 建立目錄 /home/sftppublic/upload, owner sftppublic, group user, 權限 775。sftppublic 可以上傳檔案至此
- (範例,請參考變更路徑)建立目錄 /home/sftppublic/user 並使用指令
[root]# mount --bind /home/user/share /home/sftppublic/user 好讓 sftppublic 可以存取資料,注意這裡使用 ln -s 會失敗;sftppublic 存取其中的權限同 others - 變更 sftppublic 的密碼
[root]# passwd sftppublic - 設定 sshd 允許外連並啟動/重啟 sshd (可參考此篇)
- 收工
說明
- 透過 ssh 登入進來的使用者會參考它的設定切換到對應的設定家目錄,不過在這之前已經先被 chroot 過了,因此對這個登入的使用者他看到的檔案結構裡就不會有 /home/sftppublic 這目錄,而是 / ,故創立使用者時要指定成目錄為 /
- 指定 group 為 nobody 即不屬於任何群組之意,所以若一檔案非 sftppublic 擁有,即會和 others 相同權限
- internal-sftp 為設定檔內識別字,並非指任一個實體存在於系統的執行檔,其它具體內容可以指令
[user]$ man sshd_config 查看內容 - 若要建立多人使用者的話可以直接照著參考文做,建立使用者群組,修改 sshd_config 內的 Match Group 達到每個人都有自己的目錄可以上傳的效果。
沒有留言:
張貼留言