配置sftp服务用户的访问权限Sftp服务要想限制用户的访问权限(即sftp服务用户只能访问特定的文件目录),那么系统的OpenSSH服务软件的版本必须是4.8p1及以上版本才支持,如果低于该版本,就要首先升级OpenSSH版本。准备工作如下:1.查看OpenSSH版本[root@class~]#rpm-qa|grepsshopenssh-4.3p2-36.el5openssh-clients-4.3p2-36.el5openssh-server-4.3p2-36.el5openssh-askpass-4.3p2-36.el5或者:[root@class~]#ssh-VOpenSSH_4.3p2,OpenSSL0.9.8e-fips-rhel501Jul2008发现操作系统的OpenSSH软件是4.3p2,低于4.8p1版本,所以需要做升级。2.下载最新的OpenSSH软件OpenSSH是免费的,可以到官网上进行下载。当前最高版本是OpenSSH6.0,我们就可以下载该版本:openssh-6.0p1.tar.gz下载的时候,我们需要看一看官方安装指导文档Installationinstructions,里面有安装该版本的注意事项和安装步骤说明,最好仔细阅读一下。3.确认OpenSSH软件安装条件在官方安装指导文档中提到,安装OpenSSH6.0需要具备两个条件:YouwillneedworkinginstallationsofZlibandOpenSSL.Zlib1.1.4or1.2.1.2orgreater(ealier1.2.xversionshaveproblems):OpenSSL0.9.6orgreater:上面指出了,OpenSSH6.0安装所依赖的两款软件Zlib和OpenSSL的最低版本,如果服务器的软件版本不符合要求,就要先升级该两款软件。首先我们需要确认服务器上Zlib和OpenSSL软件的版本:[root@class~]#rpm-qa|grep-izlibzlib-devel-1.2.3-3perl-Compress-Zlib-1.42-1.fc6zlib-1.2.3-3perl-IO-Zlib-1.04-4.2.1[root@class~]#rpm-qa|grep-iopensslpyOpenSSL-0.6-1.p24.7.2.2openssl-devel-0.9.8e-12.el5openssl-0.9.8e-12.el5可以看到,Zlib的版本是1.42,OpenSSL的版本是0.9.8,满足OpenSSH6.0安装的要求。1.升级OpenSSH软件如果需要升级,那么升级之前先卸载旧版本,卸载前先进行sshd备份。1.1备份sshd[root@class~]#servicesshdstop停止sshd:[确定][root@class~]#cp/etc/init.d/sshd/root/sshd1.2卸载旧版本[root@class~]#rpm-eopenssh-server-4.3p2-41.el5warning:/etc/ssh/sshd_configsavedas/etc/ssh/sshd_config.rpmsave[root@class~]#rpm-eopenssh-clients-4.3p2-41.el5[root@class~]#rpm-eopenssh-askpass-4.3p2-41.el5[root@class~]#rpm-eopenssh-4.3p2-41.el5删除/etc/ssh/目录下的ssh文件[root@class~]#rm-rf/etc/ssh/*1.3升级版本解压下载的软件包openssh-6.0p1.tar.gz,解压之后进入openssh-6.0p1目录[root@class~]#tar-zxvfopenssh-6.0p1.tar.gz[root@class~]#cdopenssh-6.0p1[root@classopenssh-6.0p1]#./configure--prefix=/usr--sysconfdir=/etc/ssh--with-pam--with-md5-passwords--mandir=/usr/share/man[root@classopenssh-6.0p1]#make[root@classopenssh-6.0p1]#makeinstall1.4验证是否升级成功[root@classopenssh-6.0p1]#ssh-VOpenSSH_6.0p1,OpenSSL0.9.8e-fips-rhel501Jul2008[root@classopenssh-6.0p1]#cp/root/sshd/etc/init.d/sshd[root@classopenssh-6.0p1]#servicesshdrestart停止sshd:[确定]启动sshd:[确定]1.5设置sshd服务在开机时自动启动[root@classopenssh-6.0p1]#chkconfig--addsshd[root@classopenssh-6.0p1]#chkconfig--level123456sshdon[root@classopenssh-6.0p1]#chkconfig--list|grepsshdsshd0:关闭1:启用2:启用3:启用4:启用5:启用6:启用2.配置sftp服务用户的访问权限2.1创建sftp用户的主根目录[root@class~]#mkdir-p/home/sftp[root@class~]#chmod-R755/home/sftp2.2创建sftp用户组和一个sftp用户[root@class~]#groupaddsftp[root@class~]#useradd-gsftp-d/home/sftp/blogblog[root@class~]#passwdblogChangingpasswordforuserblog.NewUNIXpassword:BADPASSWORD:itistoosimplistic/systematicRetypenewUNIXpassword:passwd:allauthenticationtokensupdatedsuccessfully.[root@class~]#2.3权限设置设置/etc/ssh/sshd_config配置文件,通过Chroot限制用户的根目录[root@class~]#vi/etc/ssh/sshd_config#overridedefaultofnosubsystems#Subsystemsftp/usr/libexec/sftp-server#启用internal-sftpSubsystemsftpinternal-sftp#Exampleofoverridingsettingsonaper-userbasis#MatchUseranoncvs#X11Forwardingno#AllowTcpForwardingno#ForceCommandcvsserver#限制blog用户的根目录MatchUserblogChrootDirectory/home/sftp/blog/X11ForwardingnoAllowTcpForwardingnoForceCommandinternal-sftp2.4设置目录的属主和权限要使用Chroot功能实现用户根目录的控制,目录权限的设置非常重要,否则将会无法登陆。目录权限设置上要遵循2点:ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。如果不能遵循以上2点,即使是该目录仅属于某个用户,也可能会影响到所有的SFTP用户。[root@class~]#chownroot:root/home/sftp/home/sftp/blog[root@class~]#chmod755/home/sftp/home/sftp/blog由于上面设置了目录的权限是755,因此所有非root用户都无法在目录中写入文件。我们需要在ChrootDirectory指定的目录下建立子目录,重新设置属主和权限。以blog目录为例:[root@class~]#mkdir/home/sftp/blog/web[root@class~]#chownblog:sftp/home/sftp/blog/web[root@class~]#chmod775/home/sftp/blog/web3.blog用户登录测试用blog用户访问被控制了的根目录/home/sftp/blog/[root@test~]#sftpblog@192.168.253.129Connectingto192.168.253.129...blog@192.168.253.129'spassword:sftplswebsftpcd/sftplswebsftppwdRemoteworkingdirectory:/sftpcd..sftplswebsftp补充:我们可以通过下面的配置,来设置某一个sftp组的用户访问权限:MatchgroupsftpChrootDirectory/home/sftp/X11ForwardingnoAllowTcpForwardingnoForceCommandinternal-sftp