Amazon Lightsail 인스턴스에 SFTP 사용자를 생성하고 싶습니다.
해결 방법
**참고:**다음은 SSH 액세스 권한 없이 chroot 환경(chroot jail)에 액세스할 수 있는 SFTP 사용자를 생성하는 단계입니다. SFTP 사용자는 chroot 환경 또는 디렉터리 외부의 디렉터리에 액세스할 수 없습니다. 이 사용자의 경우 chroot 디렉터리가 루트 디렉터리입니다.
SFTP 그룹 및 사용자 설정
-
다음 명령을 사용해 SFTP 사용자 그룹을 생성합니다.
sudo groupadd sftp_group
참고:****sftp_group을 내 그룹 이름으로 바꾸세요.
-
SSH 로그인 셸에 액세스할 수 없고 홈 디렉터리가 있는 인스턴스에 사용자를 생성하세요. 이 작업을 실행하려면 다음 명령을 실행하세요.
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
-
사용하려는 SSH 공개 키를 ** /home/sftp_user/.ssh/authorized_keys** 파일에 추가하세요. 자세한 내용은 ](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/lightsail-how-to-set-up-ssh)Lightsail용 SSH 키[ 설정을 참고하세요.
-
사용자의 홈 디렉터리 소유권과 권한을 변경하려면 다음 명령을 실행합니다.
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 파일을 편집합니다.
-
하위 시스템 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은 /home/%u 경로를 루트 디렉터리로 사용하는 sftp_group의 사용자를 식별합니다. 문자 %u는 사용자를 나타냅니다. ForceCommand internal-sftp는 SFTP 서버를 강제로 사용합니다.
-
암호 인증을 사용하는 경우 /etc/ssh/sshd_config 파일의 PasswordAuthentication을 yes로 설정하세요.
사용자용 chroot 디렉터리 생성
- chroot 디렉터리를 생성하려면 다음을 실행하세요.
sudo mkdir /home/sftp_user/uploads
참고: 디렉터리 이름, sftp_user, 업로드를 디렉터리 이름으로 바꾸세요.
- 파일 소유권 수정:
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
참고: 디렉터리 이름, sftp_user, 업로드를 디렉터리 이름으로 바꾸세요.
변경 사항을 확인하고 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
SSH를 사용해 인스턴스에 연결
비밀번호 인증
다음을 실행합니다.
# sftp sftp_user@example.com's password:
SSH 키 기반 인증
다음을 실행합니다.
# sftp -i key.pem sftp_user@example.com