OpenSSH網站上那只SSH刺河豚將FTP埋葬
有關sftp有人推薦www.ssh.com的實現,不過我更喜歡開源的產品,特別是Open系列的安全產品。
需求
首先我們明確我們的目標,我們是希望通過SFTP代替FTP,需求是這樣的:
- 這些用戶只能通過SFT訪問服務器
- 用戶要鎖定在相應的目錄下
我想通常的思路是這樣的:
- 打開OpenSSH的SFTP
- 將這些用戶設置在一個組中
- 讓OpenSSH識別這個組,只允許這些用戶使用SFTP
- 最后系統要自動的將用戶chroot在用戶目錄下
配置
我開始都覺得是不是要求太高,不過OpenSSH可以解決以上所有問題。話說回來,如果不能解決怎么可以把FTP埋葬呢。
SSHD_CONFIG
sshd通常是打開了sftp的,不過我們應該使用
internal-sftp在sshd_conf中作如下配置:
1 # Subsystem sftp /usr/lib/openssh/sftp-server # 注釋掉
2 Subsystem sftp internal-sftp
3
4 ##
5 Match group sftponly
6 ChrootDirectory /sftphome/%u
7 X11Forwarding no
8 AllowTcpForwarding no
9 ForceCommand internal-sftp
10
解釋一下:當sshd匹配到sftponly組中的用戶,就會強制使用sftp(ForceCommand的作用),并將用戶限定在/sftphome/下相應用戶的目錄下(ChrootDirectory的作用)。
創建用戶
我們需要創建相應的用戶了:
#useradd -G sftponly -d /sftphome/sftpuser -s /usr/sbin/nologin sftpuser
#tail /etc/password

sftpuser:x:1000:1000::/sftphome/sftpuser:/usr/sbin/nologin
#passwd sftpuser
你可以在其他機器上用sftp登錄試試了。你的連接將會被reset!去看看sshd的日志,你會發現pam.d的認證是通過了的,但是chroot失敗了。按網絡上的說法
#chown root /sftphome/sftpuser
#chmod 755 /sftphome/sftpuser
再試,可以登錄。新的問題是不能在此目錄下寫入。對的嘛,755對于組用戶是不能寫啊。再試試775,剛才的問題就來又了,chroot失敗。
以上內容網絡上一google一大把。可以登錄不能寫這個問題真讓人困惑!后來我想可能應該這樣理解:既然要chroot,那個目錄不屬于root肯定是不行的(說錯了,猛拍磚)。那我們就不能為用戶提供完整的sftp服務了嗎?我想可以這樣
#mkdir /sftphome/sftpuser/space
#chown sftpuser.sftpuser /sftphome/sftpuser/space
由系統管理員為sftp用戶提供一個目錄,并設置其用戶屬性,用戶在這個目錄下用戶是可寫的。當然可以創建很多個。
這樣算不算解決這個問題呢?暫且如此吧。如果您有好方法,一定告知哦。