SFTP+OpenSSH+ChrootDirectory設置

帳戶設置

SFTP的帳戶直接使用Linux操做系統帳戶,咱們能夠用useradd命令來建立帳戶。web

首先創建3個要管理的目錄:apache

 
1
2
3
mkdir /home/sftp/homepage
mkdir /home/sftp/blog
mkdir /home/sftp/pay

建立sftp組和www、blog、pay帳號,這3個帳號都屬於sftp組:vim

 
1
2
3
4
5
6
7
8
9
10
11
12
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

至此帳戶設置完畢。bash

SSH設置

首先要升級OpenSSH的版本。只有4.8p1及以上版本才支持Chroot。服務器

 

設置sshd_config。經過Chroot限制用戶的根目錄。ssh

 
1
2
3
4
5
6
7
8
9
10
11
12
13
vim /etc/ssh/sshd_config
#註釋原來的Subsystem設置
Subsystem   sftp    /usr/libexec/openssh/sftp-server
#啓用internal-sftp
Subsystem       sftp    internal-sftp
#限制www用戶的根目錄
Match User www
    ChrootDirectory /home/sftp
    ForceCommand    internal-sftp
#限制blog和pay用戶的根目錄
Match Group sftp
    ChrootDirectory %h
    ForceCommand    internal-sftp

完成這一步以後,嘗試登陸SFTP:spa

 
1
2
3
4
5
6
sftp www@abc.com
#或者
ssh www@abc.com
#若是出現下面的錯誤信息,則多是目錄權限設置錯誤,繼續看下一步
#Connection to abc.com closed by remote host.
#Connection closed

權限設置

要實現Chroot功能,目錄權限的設置很是重要。不然沒法登陸,給出的錯誤提示也讓人摸不着頭腦,無從查起。我在這上面浪費了不少時間。操作系統

目錄權限設置上要遵循2點:code

  1. ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,屬主和屬組必須是root;
  2. ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,只有屬主能擁有寫權限,也就是說權限最大設置只能是755。

若是不能遵循以上2點,即便是該目錄僅屬於某個用戶,也可能會影響到全部的SFTP用戶。server

 
1
2
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目錄爲例:

 
1
2
3
mkdir /home/sftp/homepage/web
chown www.sftp /home/sftp/homepage/web
chmod 775 /home/sftp/homepage/web

要實現web服務器與blog帳戶互刪文件的權限需求,須要設置umask,讓默認建立的文件和目錄權限爲775便可。將下面的內容寫入.bashrc中:

 
1
umask 0002

至此,咱們已經實現了全部須要的功能。

相關文章
相關標籤/搜索