我想在我的 Amazon Lightsail 執行個體上建立 SFTP 使用者。
解決方法
**注意事項:**下列步驟會建立 SFTP 使用者,可存取無 SSH 存取權的 chroot 環境 (chroot 監獄)。SFTP 使用者無法存取 chroot 環境或目錄外的目錄。對這類使用者來說,chroot 目錄就是根目錄。
設定 SFTP 群組和使用者
-
使用下列命令為 SFTP 使用者建立群組:
sudo groupadd sftp_group
**注意事項:**以您的群組名稱取代 sftp_group。
-
在主目錄無法存取 SSH 登入 Shell 的執行個體上,建立使用者。若要這麼做,請執行下列命令:
sudo useradd -g sftp_group -m -d /home/sftp_user -s /sbin/nologin sftp_user
**注意事項:**以您的使用者名稱取代 sftp_user。
使用密碼驗證或 SSH 金鑰型驗證設定使用者驗證
密碼驗證
使用下列命令建立密碼:
sudo passwd sftp_user
SSH 金鑰型驗證
-
若要要求 SSH 金鑰型驗證,請在使用者的主目錄中建立 .ssh 資料夾。接著建立 authorized_keys 檔案:
sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys
-
在 /home/sftp_user/.ssh/authorized_keys 檔案中新增要使用的 SSH 公開金鑰。如需詳細資訊,請參閱 Set up SSH keys for Lightsail。
-
若要變更使用者主目錄的所有權和許可,請執行下列命令:
sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -Rsudo 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 目錄。
編輯 /etc/ssh/sshd_config 檔案
-
在 Subsystem sftp 行中,將 Subsystem sftp /usr/libexec/openssh/sftp-server 行變成註解:
# Subsystem sftp /usr/libexec/openssh/sftp-server
-
以下列文字取代上一行:
Subsystem sftp internal-sftp
-
若要限制 SFTP 使用者存取權,請在檔案結尾新增下列文字:
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
在上方範例中,ChrootDirectory 指定 SFTP 使用者的根目錄。**MatchGroup ** 識別 sftp_group 中將路徑 /home/%u 當作其根目錄的使用者。字元 %u 代表使用者。ForceCommand internal-sftp 強制使用執行中的 SFTP 伺服器。
-
如果您使用密碼驗證,請將 /etc/ssh/sshd_config 檔案中的 PasswordAuthentication 設為 yes。
為使用者建立 chroot 目錄
- 若要建立 chroot 目錄,請執行下列命令:
sudo mkdir /home/sftp_user/uploads
**注意事項:**以您的目錄名稱取代目錄名稱 sftp_user 和 uploads。
- 修改檔案的所有權:
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
**注意事項:**以您的目錄名稱取代目錄名稱 sftp_user 和 uploads。
確認您的變更並重新啟動 SSHD 服務
-
確認目錄許可是否類似以下範例:
ls -ld /homedrwxr-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/
-
重新啟動 SSHD 服務:
sudo systemctl restart sshd
使用 SFTP 連線至執行個體
密碼驗證
執行下列命令:
# sftp sftp_user@example.com's password:
SSH 金鑰型驗證
執行下列命令:
# sftp -i key.pem sftp_user@example.com