由于SFTP是SSH的一部分(與傳統(tǒng)的FTP沒(méi)有任何關(guān)系),因此,配置SFTP不需要傳統(tǒng)的FTP服務(wù)器軟件刀森。僅需要OpenSSH服務(wù)器即可。
$ yum install openssh-server openssl
$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
$ vim +132 /etc/ssh/sshd_config
注釋掉下面這行
Subsystem????? sftp??? /usr/libexec/openssh/sftp-server
添加如下幾行
Subsystem?????? sftp??? internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand??? internal-sftp
AllowTcpForwarding no
X11Forwarding no
解釋一下每一行的意思
Subsystem?????? sftp??? internal-sftp
這行指定使用sftp服務(wù)使用系統(tǒng)自帶的internal-sftp
Match Group sftp
匹配sftp組的用戶报账,如果有多個(gè)組用逗號(hào)分割
也可以使用“Match User mysftp”匹配用戶研底,多個(gè)用戶之間也是用逗號(hào)分割
ChrootDirectory /data/ftp/%u
用chroot將用戶的根目錄指定到/data/ftp/%u,%u代表用戶名,%h表示用戶根目錄
另一種寫法: ChrootDirectory %h
chroot可以參考:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
ForceCommand??? internal-sftp
指定sftp命令
AllowTcpForwarding no
X11Forwarding no
禁止用戶使用端口轉(zhuǎn)發(fā)
建立用戶和組
$ mkdir -p /data/sftp/
$ groupadd sftp
$ useradd -m -d /data/sftp/user1 -g sftp -s /sbin/nologin user1
#通過(guò)上面這條命令建立的用戶,其家目錄權(quán)限是700,需要改成755才可以正常登陸
$ chmod -R 755 /data/sftp/
$ chown root:sftp /data/sftp/
$ chown root:sftp /data/sftp/user1??? #重要
錯(cuò)誤的目錄權(quán)限設(shè)定會(huì)導(dǎo)致在log中出現(xiàn)”fatal: bad ownership or modesfor chroot directoryXXXXXX”的內(nèi)容
目錄的權(quán)限設(shè)定有兩個(gè)要點(diǎn):
1笙什、由ChrootDirectory指定的目錄開(kāi)始一直往上到系統(tǒng)根目錄為止的目錄擁有者都只能是root
2飘哨、由ChrootDirectory指定的目錄開(kāi)始一直往上到系統(tǒng)根目錄為止都不可以具有群組寫入權(quán)限(最大權(quán)限755)
因?yàn)橛昧薱hroot,所以/data/sftp/user1屬主一定要是root琐凭,并且所屬組不能有寫入權(quán)限芽隆,如果上傳需要寫入在/data/sftp/user1下建立可寫屬主的文件夾供上傳使用。
$ mkdir /data/sftp/user1/upload
$ chown -R user1:sftp /data/sftp/user1/upload
===========================================
2015.01.12補(bǔ)充
在Ubuntu 12.04 64bit系統(tǒng)部按如上方法部署好了SFTP,發(fā)現(xiàn)無(wú)法登陸胚吁,后來(lái)在/var/log/auth.log中發(fā)現(xiàn)了日志:fatal: bad ownership or modes for chroot directory component “/ftpdata/ftp/”牙躺;
于是查看了一下/ftpdata/ftp/的權(quán)限,發(fā)現(xiàn)該目錄的屬主是ftp腕扶。于是立即將屬主修改為root孽拷,再次登陸就沒(méi)問(wèn)題了
請(qǐng)注意,在Ubuntu系統(tǒng)下半抱,“Match Group sftp”及以后的配置項(xiàng)要寫在“UsePAM yes”之后脓恕,否則同樣無(wú)法登陸
===========================================
2015.02.03補(bǔ)充
在Ubuntu 12.04 64bit系統(tǒng)部按如上方法部署好了SFTP,發(fā)現(xiàn)無(wú)法登陸窿侈,F(xiàn)ileZilla提示:Received unexpected end-of-file from SFTP server炼幔;執(zhí)行/etc/init.d/ssh restart也不行;
經(jīng)過(guò)百度史简,發(fā)現(xiàn)執(zhí)行一下initctl restart ssh就OK了