如何在 Ubuntu 16.04 上配置和保護 SFTP 而不提供 Shell 訪問許可權


在本文中,我們將學習如何在 Ubuntu 14.04 上配置 SFTP 而不啟用 Shell 訪問許可權。SSH 檔案傳輸協議 (SFTP) 是一種安全的方式,用於在各種伺服器之間傳輸檔案,或從伺服器到伺服器,使用 SSH 加密連線。這與檔案傳輸協議 (FTP) 不同,FTP 受所有 FTP 客戶端支援。

協議 (SFTP) 是一種安全的方式,用於在各種伺服器之間傳輸檔案,或從伺服器到伺服器,使用 SSH 加密連線。這與檔案傳輸協議 (FTP) 不同,FTP 受所有 FTP 客戶端支援。

SFTP 可以透過使用所有啟用了 SSH 訪問許可權的伺服器上的預設配置來配置。SFTP 是一種安全且易於使用的傳輸方式,但在標準配置中存在一個缺點,即允許所有伺服器上的 SFTP 使用者訪問終端 Shell。

在一些組織中,我們希望只允許檔案傳輸,而不允許訪問 SSH。

先決條件

  • 機器上安裝了 Ubuntu 14.04。
  • 機器上擁有 sudo 許可權的普通使用者。

為 SFTP 建立使用者

我們需要建立一個新使用者,我們只需要授予該使用者伺服器上的 FTP 訪問許可權,併為該使用者設定密碼。

$ sudo adduser ftpuser

$ sudo passwd ftpuser

Changing password for user ftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

建立 FTP 訪問資料夾

我們需要在機器上建立一個資料夾,該資料夾需要 SSH 伺服器的許可權要求,這一點非常重要,尤其是在機器上的資料夾本身和所有子資料夾中,所有上述資料夾都屬於 root 擁有,任何人都不得訪問這些資料夾。

我們可以在 /var/sftp/files 中建立資料夾,/var/sftp 屬於 root 使用者擁有,/var/sftp/files 屬於 ftpuser 擁有。

現在我們將建立所需的資料夾並設定 SFTP 設定所需的許可權。

$ sudo mkdir -p /var/sftp/files
$ sudo chown root:root /var/sftp$ sudo chmod 755 /var/sftp

現在,我們將為新建立的使用者“ftpuser”授予 /var/sftp/files 資料夾的許可權。

$ sudo chown ftpuser:ftpuser /var/sftp/files

限制對資料夾的訪問

在這裡,我們將更改 SSH 伺服器中的配置檔案,以限制新建立的使用者 ftpuser 的 SSH 終端訪問許可權,但允許 FTP 檔案傳輸。

讓我們使用 nano 編輯 SSH 配置,並在檔案末尾新增以下所有配置。

$ sudo nano /etc/ssh/sshd_config
Output:
….
….
# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server
Match User ftpuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

為了確保配置,我們需要使用以下命令重新啟動 sshd 守護程式。

$ sudo systemctl restart sshd

上述配置中使用的指令是

  • Match User - 此配置應用於此指令中指定的使用者,我們指定了 ftpuser。

  • ForceCommand internal-sftp - 這將限制使用者以 SSH 使用者身份登入終端,並在使用者登入後允許 SFTP。

  • PasswordAuthentication yes - 這將允許對指定的使用者進行密碼身份驗證。

  • ChrootDirectory /var/sftp/ - 將不允許使用者超出 /var/sftp 目錄。

  • AllowAgentForwarding no - 將不允許對我們指定的使用者的隧道連線。

  • AllowTcpForwarding no - 將不允許對我們指定的使用者的埠轉發。

  • X11Forwarding no - 將不允許對我們指定的使用者的 X11 轉發。

驗證配置

要驗證配置,我們需要檢查來自本地機器的 SSH 登入。

$ ssh ftpuser@localhost
output:
ftpuser@localhost's password:
Could not chdir to home directory /home/ftpuser: No such file or directory
This service allows sftp connections only.
Connection to localhost closed.

您可以看到,不允許使用 SSH 登入 ftpuser。

現在,我們將為 SFTP 訪問驗證相同內容。

$ sftp ftpuser@localhost
Output:
ftpuser@localhost's password:
Connected to localhost.
sftp>

您可以看到,我們允許執行 SFTP 登入,現在您可以使用 ls 命令檢視資料夾列表。

ftp> ls
files
sftp> ls -l
drwxr-xr-x    2 1000    1000       6 Jun 19 13:31 files
sftp>

在本文中,我們學習瞭如何在 Ubuntu 16.04 上配置和保護 SFTP 使用者,使其只能透過 SFTP 登入到單個資料夾,並限制 SSH 終端登入。其中,SSH 具有更復雜的配置和方案,我們可以限制單個使用者或組,或限制對 IP 地址的訪問。

更新於: 2020-01-23

240 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告