賬戶設置
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點:
- ChrootDirectory設置的目錄權限及其所有的上級文件夾權限,屬主和屬組必須是root;
- 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
|
至此,我們已經實現了所有需要的功能。