有些应用场景下须要限制用户只能使用SFTP,但不容许登录系统SHELL。这里介绍几种方法来实现这样的需求。php
MySecureShell is a sftp-server developing tool which help to make a ftp server like proftpd but very securised with SSH encryption. This software is highly configurable and very easy to install and use.shell
配置三方软件源vim
$ vim /etc/yum.repos.d/mysecureshell.repo [mysecureshell] name=MySecureShell baseurl=http://mysecureshell.free.fr/repository/index.php/centos/5.5/ enabled=1 gpgcheck=0
$ vim /etc/yum.repos.d/mysecureshell.repo [mysecureshell] name=MySecureShell baseurl=http://mysecureshell.free.fr/repository/index.php/centos/6.4/ enabled=1 gpgcheck=0
安装MySecureShellcentos
$ yum --disablerepo=\* --enablerepo=mysecureshell install mysecureshell
$ vi /etc/ssh/sftp_config 主要修改如下几项 LimitConnection 10 #max connection for the server sftp LimitConnectionByUser 1 #max connection for the account LimitConnectionByIP 2 #max connection by ip for the account Home /home/$USER #overrite home of the user but if you want you can use #environment variable (ie: Home /home/$USER)
LimitConnectionByUser、LimitConnectionByIP、LimitConnection根据须要可适当调大点,否则可能会现链接不上的现像。Home这项若是建用户时指定了主目录且不在缺省的/home下,能够把这项注释掉或修改成用户主目录所在位置。若是用户主目录在/home下可保持不变。app
$ chsh -s /bin/MySecureShell mike
若是要启用OpenSSH自带的的Chroot功能,OpenSSH版本必需在在4.8p1以上。ssh
$ rpm -qa|grep openssh openssh-4.3p2-26.el5 openssh-server-4.3p2-26.el5 openssh-askpass-4.3p2-26.el5 openssh-clients-4.3p2-26.el5
因为CentOS5.X自带的OpenSSH版本太低不支持SFTP CHROOT,因此须要先把SSH升级到4.8P1以上。升级可参考:CentOS下安装OpenSSH 5.8的三种方法ide
$ useradd -d /home/TempUpload/ -M test2
$ vi /etc/ssh/sshd_config #注释本来的Subsystem设置 Subsystem sftp /usr/libexec/openssh/sftp-server #启用internal-sftp Subsystem sftp internal-sftp Match User test2 ChrootDirectory /home/TempUpload ForceCommand internal-sftp
Match user设定要被chroot的用户,若要设定多个账号, 账号间以逗号隔开。例如:Match user userA,userBurl
若是是群组的则将User改成Group后,再接群组名称。例如:Match Group rootedSFTPspa
ChrootDirectory设定要chroot的位置,能够加上PATTERNS作区隔。如/home/%u,%u表示用户变量,%h为限制到用户的主目录。更多可见:man sshd_configrest
$ chown root:root /home/TempUpload $ chmod 755 /home/TempUpload
错误的目录权限设定会致使在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX” 的讯息。
目录的权限设定有两个要点:
一、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
二、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不能够具备群组写入权限
$ mkdir /home/TempUpload/Upload $ chown test2:test2 /home/TempUpload/Upload
$ sshd -T
$ service sshd restart
还可经过scponly和rssh实现,这两个的原理和MySecureShell差很少,不过这两个必须先作得作一个CHROOT环境,相对比较麻烦些。