通常我们需要更安全的ftp传输,我们有两种方式来确保ftp的安全传输,一个是ssl(tls)方式,一个是sftp方式。他们的主要区别就是ssl是对传输的数据进行安全打包,sftp是为数据建立一个安全的通道进行传输。
一、配置vsftpd的ssl
配置ssl方式的ftp比较简单,前提是我们已经配置好普通的ftp环境,这里拿vsftpd来进行说明。
首先,
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/ssl/vsftpd.pem -out /etc/vsftpd/ssl/vsftpd.pem
输入证书信息生成证书
开启ssl,配置/etc/vsftpd/vsftpd.conf,加入如下信息
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
#以上两项若设置为YES,普通的ftp将被禁止,只能通过ssl进行
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.pem
ssl_tlsv1=YES
ssl_sslv2=YES
重启vsftpd即完成配置,然后以TLS/SSL方式登录ftp就可以了。
二、配置sftp
若不需要对权限进行配置,默认ssh已开启sftp,所以我们以root用户登录sftp就可以满足所需了。但若是对外提供sftp接口,那么就有必要对登录权限等做一下配置了。由于系统openssh是4.3版本的,openssh 4.8才开始提供ChrootDirectory的配置,所以我先对openssh 进行升级。虽然可以用rssh,Jailkit等来代替,但是弄了很久没成功就放弃了。建议还是升级openssh。
由于重装openssh可能导致一些现有应用出现问题,于是做如下无痛升级,适用于RHEL 4.x / 5.x 以及 CentOS 4.x / 5.x.
wget http://openbsd.md5.com.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.4p1.tar.gz
tar zvxf openssh-5.4p1.tar.gz
cd openssh-5.4p1
执行openssl version -a ,获取到openssl的路径OPENSSLDIR,我这里为"/etc/pki/tls",赋值给下行命令的--with-ssl-dir
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/etc/pki/tls --with-zlib --with-pam --with-md5-passwords --with-kerberos5
make
make install
ssh -V 查看是否是最新的OpenSSH_5.4p1
/etc/init.d/sshd restart
我们再配置/etc/ssh/sshd_config文件
末尾部分改成:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match group sftp
X11Forwarding no
ChrootDirectory /var/ftp/user001
AllowTcpForwarding no
ForceCommand internal-sftp
其中Match group sftp指定用户组。
然后执行如下命令,
groupadd sftp
useradd -g sftp -s /sbin/nologin -d / vsftpuser
passwd vsftpuser
<--输入密码-->
service sshd restart
上面的-d / 为指定相对目录,这里直接指定为Chroot的根目录
值得注意的是ChrootDirectory为进入的根目录且其属主必须是root账户
chown root.root /var/ftp/user001
ll /var/ftp
drwxr-xr-x 6 root root 4096 Mar 17 17:40 user001
目录权限为drwxr-xr-x(不能给同组其他用户分配权限即drwxrwxr-x,否则将会失败)
由于/var/ftp/user001是root所拥有,vsftpuser对该目录的操作将受到限制,比较傻瓜化的解决方法可以在/var/ftp/user001目录里面建立新的目录分配权限给vsftpuser(望高人指点)
mkdir /var/ftp/user001/home
chown vsftpuser.sftp /var/ftp/user001/home
这样我们就可用加了限制的sftp登录了
sftp vsftpuser@serverip