OpenSSH網(wǎng)站上那只SSH刺河豚將FTP埋葬
有關(guān)sftp有人推薦www.ssh.com的實(shí)現(xiàn),不過(guò)我更喜歡開(kāi)源的產(chǎn)品,特別是Open系列的安全產(chǎn)品。
需求
首先我們明確我們的目標(biāo),我們是希望通過(guò)SFTP代替FTP,需求是這樣的:
- 這些用戶(hù)只能通過(guò)SFT訪問(wèn)服務(wù)器
- 用戶(hù)要鎖定在相應(yīng)的目錄下
我想通常的思路是這樣的:
- 打開(kāi)OpenSSH的SFTP
- 將這些用戶(hù)設(shè)置在一個(gè)組中
- 讓OpenSSH識(shí)別這個(gè)組,只允許這些用戶(hù)使用SFTP
- 最后系統(tǒng)要自動(dòng)的將用戶(hù)chroot在用戶(hù)目錄下
配置
我開(kāi)始都覺(jué)得是不是要求太高,不過(guò)OpenSSH可以解決以上所有問(wèn)題。話(huà)說(shuō)回來(lái),如果不能解決怎么可以把FTP埋葬呢。
SSHD_CONFIG
sshd通常是打開(kāi)了sftp的,不過(guò)我們應(yīng)該使用
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
解釋一下:當(dāng)sshd匹配到sftponly組中的用戶(hù),就會(huì)強(qiáng)制使用sftp(ForceCommand的作用),并將用戶(hù)限定在/sftphome/下相應(yīng)用戶(hù)的目錄下(ChrootDirectory的作用)。
創(chuàng)建用戶(hù)
我們需要?jiǎng)?chuàng)建相應(yīng)的用戶(hù)了:
#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
你可以在其他機(jī)器上用sftp登錄試試了。你的連接將會(huì)被reset!去看看sshd的日志,你會(huì)發(fā)現(xiàn)pam.d的認(rèn)證是通過(guò)了的,但是chroot失敗了。按網(wǎng)絡(luò)上的說(shuō)法
#chown root /sftphome/sftpuser
#chmod 755 /sftphome/sftpuser
再試,可以登錄。新的問(wèn)題是不能在此目錄下寫(xiě)入。對(duì)的嘛,755對(duì)于組用戶(hù)是不能寫(xiě)啊。再試試775,剛才的問(wèn)題就來(lái)又了,chroot失敗。
以上內(nèi)容網(wǎng)絡(luò)上一google一大把。可以登錄不能寫(xiě)這個(gè)問(wèn)題真讓人困惑!后來(lái)我想可能應(yīng)該這樣理解:既然要chroot,那個(gè)目錄不屬于root肯定是不行的(說(shuō)錯(cuò)了,猛拍磚)。那我們就不能為用戶(hù)提供完整的sftp服務(wù)了嗎?我想可以這樣
#mkdir /sftphome/sftpuser/space
#chown sftpuser.sftpuser /sftphome/sftpuser/space
由系統(tǒng)管理員為sftp用戶(hù)提供一個(gè)目錄,并設(shè)置其用戶(hù)屬性,用戶(hù)在這個(gè)目錄下用戶(hù)是可寫(xiě)的。當(dāng)然可以創(chuàng)建很多個(gè)。
這樣算不算解決這個(gè)問(wèn)題呢?暫且如此吧。如果您有好方法,一定告知哦。