我想在 Amazon Lightsail 執行個體上建立一個 SFTP 使用者。該如何進行?
解決方案
**注意:**下列步驟將建立一個 SFTP 使用者,該使用者可以存取 chroot 環境 (chroot jail),但不能存取 SSH。該 SFTP 使用者無法存取 chroot 環境或目錄之外的目錄。因此,chroot 目錄成為該使用者的根目錄。
1. 為 SFTP 使用者建立一個群組。該群組有助於管理許多不同的 SFTP 使用者。在此範例中,群組名稱為 sftp_group。您可以根據需要變更群組名稱。
sudo groupadd sftp_group
2. 在執行個體上建立具有主目錄的使用者。此使用者僅執行 SFTP 任務,沒有 SSH 登入 shell。在以下範例中,將 sftp_user 替換為您選擇的使用者名稱。
sudo useradd -g sftp_group -m -d /home/sftp_user -s /sbin/nologin sftp_user
3. 透過 SFTP 連線至伺服器時,使用者可以使用不同的方式進行身分驗證。以下範例使用密碼和以 SSH 金鑰為基礎的身分驗證。
密碼身分認證
若要使用密碼身分驗證,請使用以下命令建立密碼:
sudo passwd sftp_user
以 SSH 金鑰為基礎的身分驗證
如果您使用以 SSH 金鑰為基礎的身分驗證,則需要為使用者建立 SSH 檔案,然後將公有金鑰新增到檔案中。為此:
在使用者的主目錄中,建立一個 .ssh 資料夾和一個 authorized_keys 檔案:
sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys
將您要使用的 SSH 公有金鑰新增到 /home/sftp_user/.ssh/authorized_keys 檔案中。如需詳細資訊,請參閱為以 Linux/Unix 為基礎的 Lightsail 執行個體設定 SSH。
執行以下命令變更使用者主目錄的擁有權和許可:
sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -R
sudo chown root:sftp_group /home/sftp_user/
sudo chmod 755 /home/sftp_user/
sudo chmod 700 /home/sftp_user/.ssh/
sudo chmod 600 /home/sftp_user/.ssh/authorized_keys
前面的範例對目錄 /home/sftp_user 套用許可 755 並將擁有權變更為根使用者。這是因為該目錄將用作 chroot 目錄。請記住,該路徑名稱的所有組成部分都必須是任何其他使用者或群組均不可寫入的根使用者擁有之目錄。
4. 按照如下方式編輯 /etc/ssh/sshd_config 檔案:
透過註釋掉 Subsystem sftp /usr/libexec/openssh/sftp-server 行來修改 Subsystem sftp 行:
# Subsystem sftp /usr/libexec/openssh/sftp-server
將前一行替換為:
Subsystem sftp internal-sftp
新增指令以限制 SFTP 使用者存取。這些指令必須新增到檔案的底部:
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
在前面的範例中,ChrootDirectory 指令用於指定該 SFTP 使用者的根目錄 (chroot jail)。Match 區塊指示屬於 sftp_group 的使用者使用路徑 /home/%u 作為其根目錄。字元 %u 代表使用者。您可以變更使用者的根目錄。
ForceCommand internal-sftp 指令強制使用同處理序 SFTP 伺服器。
如果您使用密碼身分驗證,請在 /etc/ssh/sshd_config 檔案中找到指令 PasswordAuthentication,並確保將其設定為 yes。
5. 建立使用者要使用的 chroot 目錄。將目錄名稱 sftp_user 和 uploads 替換為您想要的名稱。
sudo mkdir /home/sftp_user/uploads
修改檔案的擁有權:
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
6. 驗證目錄許可是否如以下範例所示:
ls -ld /home
drwxr-xr-x 3 root root 23 Oct 6 15:17 /home
ls -ld /home/sftp_user
drwxr-xr-x 3 root sftp_group 21 Oct 6 15:17 /home/sftp_user
ls -ld /home/sftp_user/uploads/
drwxr-xr-x 2 sftp_user sftp_group 6 Oct 6 15:17 /home/sftp_user/uploads/
7. 重新啟動 sshd 服務:
sudo systemctl restart sshd
8. 使用 sftp 連線至執行個體:
密碼身分認證
# sftp sftp_user@example.com
sftp_user@example.com's password:
以 SSH 金鑰為基礎的身分驗證
# sftp -i key.pem sftp_user@example.com