天天看点

完全使用 SFTP 替代 FTP :SFTP+OpenSSH+ChrootDirectory 设置详解范例账户设置SSH设置权限设置

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

下面,我就从账户设置、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操作系统账户,我们可以用<code>useradd</code>命令来创建账户。

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

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

至此账户设置完毕。

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

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

指定新的源:

执行升级:

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

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

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

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

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。

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

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

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

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

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