SFTP+OpenSSH+ChrootDirectory設置

賬戶設置

SFTP的賬戶直接使用Linux操作系統賬戶,我們可以用useradd命令來創建賬戶。

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

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

創建sftp組和www、blog、pay賬號,這3個賬號都屬於sftp組:

 
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

至此賬戶設置完畢。

SSH設置

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

 

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

 
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:

 
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點:

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

如果不能遵循以上2點,即使是該目錄僅屬於某個用戶,也可能會影響到所有的SFTP用戶。

 
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

至此,我們已經實現了所有需要的功能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章