完全使用 SFTP 替代 FTP :SFTP+OpenSSH+ChrootDirectory 设置详解

转载 2016年08月30日 11:19:25
  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:完全使用 SFTP 替代 FTP :SFTP+OpenSSH+ChrootDirectory 设置详解
  • 本文链接:http://zengrong.net/post/1616.htm

完全使用SFTP替代FTP:SFTP+OpenSSH+ChrootDirectory设置详解

2012-09-28更新:加入web服务器需求的内容。


由于采用明文传输用户名和密码,FTP协议是不安全的。在同一机房中只要有一台服务器被攻击者控制,它就可能获取到其它服务器上的FTP密码,从而控制其它的服务器。

当然,很多优秀的FTP服务器都已经支持加密。但如果服务器上已经开了SSH服务,我们完全可以使用SFTP来传输数据,何必要多开一个进程和端口呢?

下面,我就从账户设置、SSH设置、权限设置这三个方面来讲讲如何使用SFTP完全替代FTP。本教程基于CentOS5.4。

范例

本文要实现以下功能:

SFTP要管理3个目录:

  • homepage
  • blog
  • pay

权限配置如下:

  • 账户www,可以管理所有的3个目录;
  • 账户blog,只能管理blog目录;
  • 账户pay,只能管理pay目录。

web服务器需求:

  • 账户blog管理的目录是一个博客网站,使用apache服务器。apache服务器的启动账户是apache账户,组为apache组。
  • 账户blog属于apache组,它上传的文件能够被apache服务器删除。同样的,它也能删除在博客中上传的文件(就是属于apache账户的文件)。

账户设置

SFTP的账户直接使用Linux操作系统账户,我们可以用useradd命令来创建账户。

首先建立3个要管理的目录:

mkdir /home/sftp/homepage
mkdir /home/sftp/blog
mkdir /home/sftp/pay

创建sftp组和www、blog、pay账号,这3个账号都属于sftp组:

groupadd sftp 
useradd -M -d /home/sftp -G sftp www
useradd -M -d /home/sftp/blog -G sftp blog
useradd -M -d /home/sftp/pay -G sftp pay

# 将blog账户也加到apache组
useradd -M -d /home/sftp/blog -G apache blog

#设置3个账户的密码密码
passwd www
passwd blog
passwd pay

至此账户设置完毕。

SSH设置

首先要升级OpenSSH的版本。只有4.8p1及以上版本才支持Chroot。

CentOS 5.4的源中的最新版本是4.3,因此需要升级OpenSSH。

指定新的源:

vim /etc/yum.repos.d/test.repo
#输入如下内容
[centalt]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=0
gpgcheck=0
# wq保存

执行升级:

yum --enablerepo=centalt update -y openssh* openssl*
# 重启服务
service sshd restart
# 重看版本
ssh -V
# OpenSSH_5.8p1, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

升级成功后,设置sshd_config。通过Chroot限制用户的根目录。

vim /etc/ssh/sshd_config
#注释原来的Subsystem设置
Subsystem   sftp    /usr/libexec/openssh/sftp-server
#启用internal-sftp
Subsystem       sftp    internal-sftp
#限制www用户的根目录
Match User www
    ChrootDirectory /home/sftp
    ForceCommand    internal-sftp
#限制blog和pay用户的根目录
Match Group sftp
    ChrootDirectory %h
    ForceCommand    internal-sftp

完成这一步之后,尝试登录SFTP:

sftp www@abc.com
#或者
ssh www@abc.com
#如果出现下面的错误信息,则可能是目录权限设置错误,继续看下一步
#Connection to abc.com closed by remote host.
#Connection closed

权限设置

要实现Chroot功能,目录权限的设置非常重要。否则无法登录,给出的错误提示也让人摸不着头脑,无从查起。我在这上面浪费了很多时间。

目录权限设置上要遵循2点:

  1. ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
  2. ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。

如果不能遵循以上2点,即使是该目录仅属于某个用户,也可能会影响到所有的SFTP用户。

chown root.root /home/sftp /home/sftp/homepage /home/sftp/blog /home/sftp/pay
chmod 755 /home/sftp /home/sftp/homepage /home/sftp/blog /home/sftp/pay

由于上面设置了目录的权限是755,因此所有非root用户都无法在目录中写入文件。我们需要在ChrootDirectory指定的目录下建立子目录,重新设置属主和权限。以homepage目录为例:

mkdir /home/sftp/homepage/web
chown www.sftp /home/sftp/homepage/web
chmod 775 /home/sftp/homepage/web

要实现web服务器与blog账户互删文件的权限需求,需要设置umask,让默认创建的文件和目录权限为775即可。将下面的内容写入.bashrc中:

umask 0002

至此,我们已经实现了所有需要的功能。

完全使用SFTP替代FTP:SFTP+OpenSSH+ChrootDirectory设置详解

原文地址: 由于采用明文传输用户名和密码,FTP协议是不安全的。在同一机房中只要有一台服务器被攻击者控制,它就可能获取到其它服务器上的FTP密码,从而控制其它的服务器。 当然,很多优秀的FTP服务器都...
  • gong_xucheng
  • gong_xucheng
  • 2014年09月16日 17:12
  • 1575

WINDOWS下的SFTP服务器安装搭建(OpenSSH;Core FTP Mini-Sftp Server;Core FTP Server;Sysax Multi Server;Cygwin;fre

WINDOWS下的SFTP服务器安装搭建(OpenSSH;Core FTP Mini-Sftp Server;Core FTP Server;Sysax Multi Server;Cygwin;fre...
  • lehear
  • lehear
  • 2012年07月25日 11:36
  • 2484

java 中 FTP 和 SFTP 的简单使用

FTP和SFTP的区别和工作原理: 很详细:http://blog.csdn.net/cuker919/article/details/6403925 可以根据自己的实际情况选择使用FTP或者...
  • qq_31482599
  • qq_31482599
  • 2018年01月14日 21:57
  • 137

ftp与sftp连接实例

1.ftp连接方式 import java.io.IOException; import org.apache.commons.net.ftp.FTPClient; public class T...
  • u010009900
  • u010009900
  • 2015年10月09日 22:29
  • 4820

FTP/SFTP简单使用

SCP、SFTP命令基本使用
  • lupeng0527
  • lupeng0527
  • 2017年06月10日 10:45
  • 220

Java实现FTP与SFTP文件上传

SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式。SF...
  • G5628907
  • G5628907
  • 2017年10月19日 10:46
  • 1390

xftp无法连上ftp但能连上sftp

sftp是安全文件传送协议。为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部份,可是这种传输方式使用了加密/解密技术,所以传输效率比普通的F...
  • luman1991
  • luman1991
  • 2016年10月26日 21:16
  • 3876

FTP,SFTP命令

SFTP命令汇总                   cd 路径                        更改到远程目录的路径                   lcd 路径        ...
  • yonghutwo
  • yonghutwo
  • 2014年12月14日 18:27
  • 2386

临时替代Samba 完后直接操作服务器项目的工具sftpnetdrive

下载地址   设置密码  邮箱即可  简单实用
  • cominglately
  • cominglately
  • 2017年05月16日 15:14
  • 535

FTP和SFTP的区别

文件传送协议FTP(File Transfer Protocol)是TCP/IP协议簇中的一个成员,也是现在因特网上最广泛的文件传送协议。FTP协议包括两个部分,一个是FTP客户端,另一个是FTP服务...
  • gcw1024
  • gcw1024
  • 2016年03月28日 23:20
  • 3990
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:完全使用 SFTP 替代 FTP :SFTP+OpenSSH+ChrootDirectory 设置详解
举报原因:
原因补充:

(最多只允许输入30个字)