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

简介:

由于采用明文传输用户名和密码,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 - $basearchbaseurl=http://centos.alt.ru/repository/centos/5/$basearch/enabled=0gpgcheck=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-sftpSubsystem       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

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





     本文转自yzy121403725 51CTO博客,原文链接:http://blog.51cto.com/lookingdream/1769233,如需转载请自行联系原作者


相关文章
|
安全 Unix Linux
Xftp 7(FTP/SFTP客户端) V7.0.0107 官方中文免费正式版(附文件+安装教程)
Xftp 7(FTP/SFTP客户端) V7.0.0107 官方中文免费正式版(附文件+安装教程)
9302 0
Xftp 7(FTP/SFTP客户端) V7.0.0107 官方中文免费正式版(附文件+安装教程)
WGCLOUD v3.4.3从入门到精通(zabbix使用详解) 监测FTP和SFTP教程
我们在左侧菜单点击【FTP/SFTP监测】,可以看到如下列表
WGCLOUD v3.4.3从入门到精通(zabbix使用详解) 监测FTP和SFTP教程
|
大数据 开发工具 数据安全/隐私保护
大数据基本开发工具的FTP/SFTP工具的Transmit
在大数据开发中,FTP和SFTP工具是必不可少的。其中Transmit是一款功能强大的FTP/SFTP客户端,可以帮助开发者高效管理传输文件。本文将介绍Transmit的特点,安装和使用方法。
445 0
|
算法 大数据 Linux
大数据基本开发工具的FTP/SFTP工具的FileZilla
大数据是当今的热门话题,而在大数据的开发过程中,FTP/SFTP工具是非常重要的一个环节。本文将介绍一款优秀的FTP/SFTP工具——FileZilla。
282 0
|
存储 大数据 网络安全
大数据基本开发工具的FTP/SFTP工具的WinSCP
在大数据开发中,FTP/SFTP工具是必不可少的工具之一。WinSCP是一个功能丰富的FTP/SFTP客户端,它可以让您方便地上传和下载大量数据,支持多种协议和加密算法。本文将会介绍如何在WinSCP中使用FTP/SFTP工具进行大数据开发。
368 0
|
搜索推荐 网络安全 C#
一个Windows远程工具,小巧但实用,支持RDP、SSH、SFTP、FTP等多种协议
这是一个C#开发的Windows远程桌面开源项目,它支持RDP、SSH、VNC、Telnet、(S)FTP、RemoteApp、NoMachine和其他应用。
948 0
一个Windows远程工具,小巧但实用,支持RDP、SSH、SFTP、FTP等多种协议
|
安全 Linux 数据安全/隐私保护
FTP/SFTP 文件传输协议
1.FTP ftp,File Transfer Protocol,默认端口21。 2.SFTP sftp,Secure File Transfer Protocol,默认端口22。 可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。 3.客户端软件 FileZilla。一款GUI软件,可方便的代替linux下的 sz、rz命令实现文件的上传下
2216 0
|
Shell 数据安全/隐私保护 网络安全
shell使用lftp连接ftp和sftp,并可以指定私钥
lftp连接ftp在脚本中可以 lftp -c "open username:password@host:port; ls /Friso/20180822/click/mobile/SUCCESS | wc -l" lftp usename:password@host:port -e "ls /Fr...
4118 0
|
数据安全/隐私保护 Python