无法读取 System Overview 日志或警报配置的 Log File Folder 数值。 将使用默认数值
2009-12-30 10:03
603 查看
由于采用明文传输用户名和密码,FTP协议是不安全的。在同一机房中只要有一台服务器被攻击者控制,它就可能获取到其它服务器上的FTP密码,从而控制其它的服务器。当然,很多优秀的FTP服务器都已经支持加密。但如果服务器上已经开了SSH服务,我们完全可以使用SFTP来传输数据,何必要多开一个进程和端口呢?下面,我就从账户设置、SSH设置、权限设置这三个方面来讲讲如何使用SFTP完全替代FTP。本教程基于CentOS5.4。
blog
pay
权限配置如下:账户www,可以管理所有的3个目录;
账户blog,只能管理blog目录;
账户pay,只能管理pay目录。
web服务器需求:账户blog管理的目录是一个博客网站,使用apache服务器。apache服务器的启动账户是apache账户,组为apache组。
账户blog属于apache组,它上传的文件能够被apache服务器删除。同样的,它也能删除在博客中上传的文件(就是属于apache账户的文件)。
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
如果不能遵循以上2点,即使是该目录仅属于某个用户,也可能会影响到所有的SFTP用户。
本文出自 “梦想照进现实” 博客,请务必保留此出处http://lookingdream.blog.51cto.com/5177800/1769233
范例
本文要实现以下功能:SFTP要管理3个目录:homepageblog
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点:ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;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至此,我们已经实现了所有需要的功能。
本文出自 “梦想照进现实” 博客,请务必保留此出处http://lookingdream.blog.51cto.com/5177800/1769233
相关文章推荐
- 无法读取System Overview 日志或警报解决方法
- Spring ClassPathXmlApplicationContext和FileSystemXmlApplicationContext读取配置文件的方法
- C# System.IO.FileStream 文件正由另一进程使用,因此该进程无法访问该文件
- VBA使用FileSystemObject将读取或写入文本文件(一)
- Eclipse中通过FileSystemXmlApplicationContext读取不到配置文件问题
- Symfony2 配置自己的log日志、使用配置文件定义全局常量
- 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具
- VBA使用FileSystemObject将读取或写入文本文件
- php error_log记录日志的使用方法和配置 (日志目录一定要手动创建)
- golang基础-beego读取配置_输出log日志、tailf组件读取log、配置zookeeper_kafka、发送log至kafka
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- 系统架构学习日志2-Log structured vs Journaling File System
- 无法读取配置节"system.web.extensions",因为它缺少节声明
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- 在sql server 2008中使用xp_ReadErrorLog读取错误日志
- IIS 无法读取配置节"system.web.extensions",因为它缺少节声明
- 使用RandomAccessFile 对日志文件读取,以及读取追加的文件内容。
- 无法读取配置节“system.web.extensions”,因为它缺少节声明
- java中读取配置文件的方法fileSystemXmlapplicationContext与classPathXmlApplicationContext