CentOS 下使用SFTP实现网站自动生成FTP账号,实现Chroot功能
2014-09-26 00:00
671 查看
摘要: Linux自带的sftp功能,稍加利用,可以替代vsftpd等工具,而且由于数据传输过程中会加密,所以比一般的ftp工具更安全。正因为如此,在目录权限上有一些限制,如何设置见文章详情。
背景
手上有一个这样的系统:后台可以直接新建项目(网站),只需输入项目名称、访问域名(二级)以及其他一些额外信息,就可自动生成一个模板网站。大致原理是:提交这些信息的时候,后台会给项目新建一个目录,并把一些必须的文件拷贝过去,然后会有一个二级域名映射文件实现二级域名访问。当然,一级域名可实现访问,前提是要完成备案。
之前对于单个项目都是通过一个统一sftp账号管理的,随着项目的增多,发现要找到相应目录会比较困难,所以现在希望在新建项目的时候能够自动生成对应的sftp账号,实现一对一管理。
过程
vsftpd是首选,我也尝试过这种实现。由于内部服务器架构的问题,IP地址是个限制,无法实现vsftpd的访问,询问过相关人员给出的答案也是如此,所以作罢。
经过一番了解,发现sftp是剩下的唯一一条路,接着熟悉、实践,最终解决上级需求。
由于不需要安装其他第三方软件,只需要CentOS系统账户以及一些目录权限的设置,整个实现过程不是太复杂,但权限的问题绝不是那么容易就可以搞定的,有一些 规则不能违背,否则失败。
假设目录结构是这样的:
/var/www/site1
/var/www/site2
相应的系统账号分别是 site1 和 site2 ,使用passwd设置相应密码,site1 和 site2 的家目录分别是/var/www/site1和 /var/www/site2
此处有两个限制:
从site1和site2开始设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
从site1和site2开始设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
如果我们把网站文件就放在site1和site2下面的话,是没有权限求改的,这由sftp的内在实现决定,我们只能遵守。所以,解决方案是,我们在site1和site2下面再分别新建一个 web 目录,权限是 775,属主分别是 site1 和 site2,属组 仍然还是 root 。为实现apache的解析正常,apache服务的运行组需要设置成 root 。
权限设置完成后,修改 sshd_config 设置:
除此之外,web 目录下生成的其他目录的权限也必须是 775 。可通过修改 umask 为 0002 来实现。
最后,一个完整的sftp 方案诞生。
ps:
升级OpenSSH的版本。只有4.8p1及以上版本才支持Chroot。
CentOS 5.4的源中的最新版本是4.3,因此需要升级OpenSSH。
可通过ssh -V命令查看是否需要升级,升级方法自行搜索。
背景
手上有一个这样的系统:后台可以直接新建项目(网站),只需输入项目名称、访问域名(二级)以及其他一些额外信息,就可自动生成一个模板网站。大致原理是:提交这些信息的时候,后台会给项目新建一个目录,并把一些必须的文件拷贝过去,然后会有一个二级域名映射文件实现二级域名访问。当然,一级域名可实现访问,前提是要完成备案。
之前对于单个项目都是通过一个统一sftp账号管理的,随着项目的增多,发现要找到相应目录会比较困难,所以现在希望在新建项目的时候能够自动生成对应的sftp账号,实现一对一管理。
过程
vsftpd是首选,我也尝试过这种实现。由于内部服务器架构的问题,IP地址是个限制,无法实现vsftpd的访问,询问过相关人员给出的答案也是如此,所以作罢。
经过一番了解,发现sftp是剩下的唯一一条路,接着熟悉、实践,最终解决上级需求。
由于不需要安装其他第三方软件,只需要CentOS系统账户以及一些目录权限的设置,整个实现过程不是太复杂,但权限的问题绝不是那么容易就可以搞定的,有一些 规则不能违背,否则失败。
假设目录结构是这样的:
/var/www/site1
/var/www/site2
相应的系统账号分别是 site1 和 site2 ,使用passwd设置相应密码,site1 和 site2 的家目录分别是/var/www/site1和 /var/www/site2
此处有两个限制:
从site1和site2开始设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
从site1和site2开始设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
如果我们把网站文件就放在site1和site2下面的话,是没有权限求改的,这由sftp的内在实现决定,我们只能遵守。所以,解决方案是,我们在site1和site2下面再分别新建一个 web 目录,权限是 775,属主分别是 site1 和 site2,属组 仍然还是 root 。为实现apache的解析正常,apache服务的运行组需要设置成 root 。
权限设置完成后,修改 sshd_config 设置:
vim /etc/ssh/sshd_config #注释原来的Subsystem设置 Subsystem sftp /usr/libexec/openssh/sftp-server #启用internal-sftp Subsystem sftp internal-sftp #限制www用户的根目录 Match User apache ChrootDirectory /var/www ForceCommand internal-sftp #限制blog和pay用户的根目录 Match Group root ChrootDirectory %h ForceCommand internal-sftp
除此之外,web 目录下生成的其他目录的权限也必须是 775 。可通过修改 umask 为 0002 来实现。
最后,一个完整的sftp 方案诞生。
ps:
升级OpenSSH的版本。只有4.8p1及以上版本才支持Chroot。
CentOS 5.4的源中的最新版本是4.3,因此需要升级OpenSSH。
可通过ssh -V命令查看是否需要升级,升级方法自行搜索。
相关文章推荐
- CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中
- CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中
- CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中(转)
- 网站记住账号和自动登录功能实现
- Qt5---ftp上传功能(使用组合的办法实现功能,QNetworkAccessManager自动管理分片上传,用QLoggingCategory屏蔽SSL警告)
- Qt5---ftp上传功能(使用组合的办法实现功能,QNetworkAccessManager自动管理分片上传,用QLoggingCategory屏蔽SSL警告)
- 使用脚本实现自动FTP
- 自动生成seam框架下的增查删改功能-jise使用指南之一
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- 使用NVelocity0.5实现服务器端页面自动生成
- 使用NVelocity0.5实现服务器端页面自动生成
- 如何实现自动ftp上传功能:expect
- Atlas学习手记(4):使用AutoComplete Extender实现自动完成功能
- 使用winrar与FTP结合,实现异地自动备份
- 使用AutoComplete Extender实现自动完成功能
- 使用Shell脚本来实现FTP的自动上传下载
- ant 的ftp任务使用,实现自动备份等,解决中文问题
- 使用蜘蛛程序来实现电影资料库中的自动填写功能
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- 使用C#自动生成Word2003文档(通过操作COM组件实现) [转]