CentOS下實現SFTP CHROOT的幾種方法

有些應用場景下須要限制用戶只能使用SFTP,但不容許登錄系統SHELL。這裏介紹幾種方法來實現這樣的需求。php

1、經過MySecureShell實現

什麼是MySecureShell

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

安裝MySecureShell

  • 配置三方軟件源vim

Centos 5
$ 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
Centos 6
$ 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

配置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

修改用戶Shell爲MySecureShell
$ chsh -s /bin/MySecureShell mike

2、經過OpenSSH的internal-sftp實現

若是要啓用OpenSSH自帶的的Chroot功能,OpenSSH版本必需在在4.8p1以上。ssh

檢查OpenSSH版本

$ 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

建立用於SFTP的用戶

$ useradd  -d /home/TempUpload/ -M test2

配置sshd_config

$ 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

設定Chroo目錄權限

$ chown root:root /home/TempUpload
$ chmod 755 /home/TempUpload

錯誤的目錄權限設定會致使在log中出現」fatal: bad ownership or modes for chroot directory XXXXXX」 的訊息。
目錄的權限設定有兩個要點:
一、由ChrootDirectory指定的目錄開始一直往上到系統根目錄爲止的目錄擁有者都只能是root
二、由ChrootDirectory指定的目錄開始一直往上到系統根目錄爲止都不能夠具備羣組寫入權限

創建SFTP用戶登入後可寫入的目錄

$ mkdir /home/TempUpload/Upload
$ chown test2:test2 /home/TempUpload/Upload

檢查sshd_config內容是否正確

$ sshd -T

從新啓動sshd

$ service sshd restart

3、其它方法

  還可經過scponly和rssh實現,這兩個的原理和MySecureShell差很少,不過這兩個必須先作得作一個CHROOT環境,相對比較麻煩些。

相關文章
相關標籤/搜索