现在的客户还真聪明,知道FTP不安全,非要配置个SFTP,于是便有了本文。其实俺特别想说,身在天朝,还谈啥安全?
由于SFTP是SSH的一部分(与传统的FTP没有任何关系),因此,配置SFTP不需要传统的FTP服务器软件。仅需要OpenSSH服务器即可。
$ 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-sftpMatch Group sftp ChrootDirectory /data/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
解释一下每一行的意思
Subsystem sftp internal-sftp 这行指定使用sftp服务使用系统自带的internal-sftpMatch Group sftp 匹配sftp组的用户,如果有多个组用逗号分割也可以使用“Match User mysftp”匹配用户,多个用户之间也是用逗号分割ChrootDirectory /data/ftp/%u 用chroot将用户的根目录指定到/data/ftp/%u,%u代表用户名chroot可以参考:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/ForceCommand internal-sftp 指定sftp命令AllowTcpForwarding no X11Forwarding no 禁止用户使用端口转发
建立用户和组
$ mkdir -p /data/sftp/$ chown -R root:sftp /data/sftp/$ groupadd sftp$ useradd -m -d /data/sftp/user1 -g sftp -s /sbin/nologin user1注意通过上面这条命令建立的用户,其家目录权限是700,需要改成755才可以正常登陆$ chmod -R 755 /data/sftp/
错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX”的内容
目录的权限设定有两个要点:1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(755即可)
因为用了chroot,所以/data/sftp/属主一定要是root,并且所属组不能有写入权限,如果上传需要写入在/data/sftp/下建立可写属主的文件夹供上传使用。
$ mkdir /data/sftp/user1/upload$ chown -R user1:sftp /data/sftp/user1/upload
===========================================2015.01.12补充在Ubuntu 12.04 64bit系统部按如上方法部署好了SFTP,发现无法登陆,后来在/var/log/auth.log中发现了日志:fatal: bad ownership or modes for chroot directory component “/ftpdata/ftp/”;于是查看了一下/ftpdata/ftp/的权限,发现该目录的属主是ftp。于是立即将属主修改为root,再次登陆就没问题了请注意,在Ubuntu系统下,“Match Group sftp”及以后的配置项要写在“UsePAM yes”之后,否则同样无法登陆