使用者只能 SFTP 登入自己的家目錄
老師的電腦動畫課堂的期末作品,是開放讓學生透過 FTP 上傳自己的作品及網頁至實驗室的伺服器,由於 FTP 是明碼的封包傳輸於最近升級系統後,便考慮改用 SFTP(SSH File Transfer Protocol)來提供上傳的服務。
提供 SFTP 上傳的同時,希望使用者和以前一樣只能使用 SFTP 無法使用 SSH 登入伺服器。SFTP 為 SSH 的檔案傳輸服務,預設建立帳號的時候使用者同時可以使用這兩種服務。透過 SFTP only + Chroot 設定我們能限制使用者僅能 SFTP 並且無法離開自己的家目錄去到處閒晃。
安裝 OpenSSH
如果安裝的是 Ubuntu Server 應該在安裝過程會安裝 openssh-server 套件,沒有的話可以利用下面的指令安裝。$ sudo apt-get install openssh-server
新增一個給 SFTP 使用的群組 sftpaccess
$ sudo groupadd sftpaccess
修改 OpenSSH 設定檔
編輯/etc/ssh/sshd_config
設定檔,在約 77 行的地方找到Subsystem sftp /usr/lib/openssh/sftp-server
註解此行並修改為Subsystem sftp internal-sftp
。$ sudo vim /etc/ssh/sshd_config #Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp
在檔案的尾端加上下面的片段
Match group sftpaccess ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
建立新的使用者並加入 sftpaccess 群組
在設定檔中,我們設置了 sftpaccess 這個群組套用要做ChrootDirectory
的設定,所以我們將要限制的使用者,加入這個群組中。$ sudo useradd -G sftpaccess -m <<username>> -s /sbin/nologin
更改使用者家目錄權限
由於Chroot
的關係,這個要ChrootDirectory
的目錄要將擁有者設定為 root,並且目錄的權限需要為 755。$ sudo chown root:root /home/<<username>> $ sudo chmod 755 /home/<<username>>
建立上傳目錄及修改權限
要讓使用者能上傳網頁到某個目錄,即能透過對應的網址看到內容,需要開啟上傳檔案的目錄,並於稍後的步驟中設定 Apache 的userdir
。Apache 預設的目錄名稱為public_html
位置在使用者家目錄。
使用者的家目錄在前一個步驟已經將擁有者設定為 root,使用者在登入後一定無法使用這個目錄,我們必須建立一個上傳目錄(public_html
)並且將權限賦予使用者帳號。$ sudo mkdir /home/<<username>>/public_html $ sudo chown <<username>>:<<username>> /home/<<username>>/public_html $ sudo chmod 755 /home/<<username>>/public_html
安裝 Apache2
$ sudo apt-get install apache2
開啟 userdir module
使用 a2enmod 開啟 userdir,並重新啟動 Apache。$ sudo a2enmod userdir $ sudo systemctl restart apache2
經過上述的步驟,使用者便僅能透過 SFTP 的方式將網站資料上傳至伺服器,由瀏覽器直接看到網頁內容了。
留言