Lightsail 인스턴스에서 SFTP 사용자를 생성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 10월 14일

Amazon Lightsail 인스턴스에서 SFTP 사용자를 생성하고 싶습니다. 어떻게 해야 합니까?

해결 방법

참고: 다음 단계에서는 SSH 액세스 권한이 없는 chroot 환경(chroot 감옥)에 액세스할 수 있는 SFTP 사용자를 생성합니다. SFTP 사용자는 chroot 환경이나 디렉터리 외부의 디렉터리에 액세스할 수 없습니다. 따라서 chroot 디렉터리는 사용자의 루트 디렉터리가 됩니다.

1.    SFTP 사용자에 대한 그룹을 생성합니다. 이 그룹은 다양한 SFTP 사용자를 관리하는 데 도움이 됩니다. 이 예제에서 그룹 이름은 sftp_group입니다. 이름을 원하는 그룹 이름으로 변경할 수 있습니다.

sudo groupadd sftp_group

2.    인스턴스에서 홈 디렉터리를 사용하여 사용자를 생성합니다. 이 사용자는 SFTP 태스크만 수행하며 SSH 로그인 셸이 없습니다. 다음 예제에서 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 감옥)의 루트 디렉터리를 지정하는 데 사용됩니다. 일치 블록은 sftp_group에 속한 사용자가 루트 디렉터리로/home/%u 경로를 사용합니다. 문자 %u는 사용자를 나타냅니다. 사용자의 루트 디렉터리를 변경할 수 있습니다.

ForceCommand internal-sftp 지시어는 처리 중인 SFTP 서버를 강제로 사용합니다.

암호 인증을 사용하는 경우 /etc/ssh/sshd_config 파일에서 지시어 PasswordAuthentication을 찾아 yes로 설정되어 있는지 확인합니다.

5.    사용자가 사용할 chroot 디렉터리를 생성합니다. 디렉터리 이름 sftp_useruploads를 원하는 이름으로 바꿉니다.

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?