웹사이트 검색

Ubuntu 16.04에서 셸 액세스 없이 SFTP를 활성화하는 방법


소개

FTP(파일 전송 프로토콜), 최신 FTP 클라이언트에서 널리 지원됩니다.

SFTP는 SSH 액세스가 활성화된 모든 서버에서 추가 구성 없이 기본적으로 사용할 수 있습니다. 안전하고 사용하기 쉽지만 단점이 있습니다. 표준 구성에서 SSH 서버는 시스템에 계정이 있는 모든 사용자에게 파일 전송 액세스 및 터미널 셸 액세스 권한을 부여합니다.

경우에 따라 특정 사용자에게만 파일 전송을 허용하고 SSH 액세스는 허용하지 않을 수 있습니다. 이 자습서에서는 SSH 데몬을 설정하여 사용자별로 SSH 액세스가 허용되지 않는 SFTP 액세스를 하나의 디렉터리로 제한합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자 및 방화벽을 포함하여 이 초기 서버 설정 자습서로 설정된 Ubuntu 16.04 서버 1대

1단계 - 새 사용자 만들기

먼저 서버에 대한 파일 전송 액세스 권한만 부여할 새 사용자를 만듭니다. 여기에서는 사용자 이름 sammyfiles를 사용하고 있지만 원하는 사용자 이름을 사용할 수 있습니다.

  1. sudo adduser sammyfiles

계정의 비밀번호를 생성하라는 메시지가 표시되고 사용자에 대한 정보가 표시됩니다. 사용자 정보는 선택 사항이므로 ENTER를 눌러 해당 필드를 비워 둘 수 있습니다.

이제 제한된 디렉터리에 대한 액세스 권한이 부여될 새 사용자를 만들었습니다. 다음 단계에서는 파일 전송을 위한 디렉터리를 생성하고 필요한 권한을 설정합니다.

2단계 - 파일 전송을 위한 디렉토리 생성

SFTP 액세스를 하나의 디렉터리로 제한하려면 먼저 디렉터리가 매우 특정한 SSH 서버의 권한 요구 사항을 준수하는지 확인해야 합니다.

특히 파일 시스템 트리에서 디렉토리 자체와 그 위에 있는 모든 디렉토리는 루트가 소유해야 하며 다른 사람이 쓸 수 없어야 합니다. 결과적으로 홈 디렉토리는 루트가 아닌 사용자가 소유하기 때문에 단순히 사용자의 홈 디렉토리에 대한 제한된 액세스 권한을 부여하는 것은 불가능합니다.

참고: OpenSSH의 일부 버전에는 디렉토리 구조 및 소유권에 대한 엄격한 요구 사항이 없지만 대부분의 최신 Linux 배포판(Ubuntu 16.04 포함)에는 있습니다.

이 소유권 문제를 해결하는 방법에는 여러 가지가 있습니다. 이 자습서에서는 대상 업로드 디렉터리로 /var/sftp/uploads를 만들고 사용합니다. /var/sftp는 루트가 소유하며 다른 사용자가 쓸 수 없습니다. 하위 디렉토리 /var/sftp/uploads는 sammyfiles가 소유하므로 사용자가 여기에 파일을 업로드할 수 있습니다.

먼저 디렉토리를 생성합니다.

  1. sudo mkdir -p /var/sftp/uploads

/var/sftp의 소유자를 루트로 설정합니다.

  1. sudo chown root:root /var/sftp

동일한 디렉토리에 루트 쓰기 권한을 부여하고 다른 사용자에게는 읽기 및 실행 권한만 부여하십시오.

  1. sudo chmod 755 /var/sftp

uploads 디렉토리의 소유권을 sammyfiles로 변경합니다.

  1. sudo chown sammyfiles:sammyfiles /var/sftp/uploads

이제 디렉토리 구조가 준비되었으므로 SSH 서버 자체를 구성할 수 있습니다.

3단계 - 하나의 디렉토리에 대한 액세스 제한

이 단계에서는 SSH 서버 구성을 수정하여 sammyfiles에 대한 터미널 액세스는 허용하지 않지만 파일 전송 액세스는 허용합니다.

nano 또는 원하는 텍스트 편집기를 사용하여 SSH 서버 구성 파일을 엽니다.

  1. sudo nano /etc/ssh/sshd_config

파일 맨 아래로 스크롤하고 다음 구성 스니펫을 추가합니다.

. . .

Match User sammyfiles
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

그런 다음 파일을 저장하고 닫습니다.

각 지시문이 수행하는 작업은 다음과 같습니다.

  • Match User는 지정된 사용자에게만 다음 명령을 적용하도록 SSH 서버에 지시합니다. 여기에서 sammyfiles를 지정합니다.
  • ForceCommand internal-sftp는 SSH 서버가 로그인 시 SFTP 서버를 실행하도록 강제하여 셸 액세스를 허용하지 않습니다.
  • PasswordAuthentication yes는 이 사용자에 대한 암호 인증을 허용합니다.
  • ChrootDirectory /var/sftp/는 사용자가 /var/sftp 디렉토리 이외의 항목에 액세스할 수 없도록 합니다. 이 chroot 자습서에서 chroot에 대해 자세히 알아볼 수 있습니다.
  • AllowAgentForwarding 아니요, AllowTcpForwarding 아니요. X11Forwarding no는 이 사용자에 대한 포트 전달, 터널링 및 X11 전달을 비활성화합니다.

사용자 일치로 시작하는 이 명령 세트는 다른 사용자에 대해서도 복사하고 반복할 수 있습니다. 사용자 일치 행에서 사용자 이름을 적절하게 수정해야 합니다.

참고: 보안 강화를 위해 PasswordAuthentication yes 줄을 생략하고 대신 SSH 키 액세스를 설정할 수 있습니다. SSH Essentials: SSH 서버, 클라이언트 및 키 사용 자습서의 공개 SSH 키 복사 섹션을 따르십시오. 사용자의 셸 액세스를 비활성화하기 전에 이 작업을 수행해야 합니다.

다음 단계에서는 암호 액세스를 사용하여 로컬에서 SSH로 구성을 테스트하지만 SSH 키를 설정하는 경우 대신 사용자의 키 쌍을 사용하여 컴퓨터에 액세스해야 합니다.

구성 변경 사항을 적용하려면 서비스를 다시 시작하십시오.

  1. sudo systemctl restart sshd

이제 sammyfiles에 대해서만 파일 전송에 대한 액세스를 제한하도록 SSH 서버를 구성했습니다. 마지막 단계는 구성을 테스트하여 의도한 대로 작동하는지 확인하는 것입니다.

4단계 - 구성 확인

새 sammyfiles 사용자가 파일만 전송할 수 있도록 합시다.

일반 셸 액세스를 사용하여 sammyfiles로 서버에 로그인하는 것은 더 이상 가능하지 않습니다. 해 보자:

  1. ssh sammyfiles@localhost

원래 프롬프트로 돌아가기 전에 다음 메시지가 표시됩니다.

Error message
This service allows sftp connections only. Connection to localhost closed.

즉, sammyfiles는 더 이상 SSH를 사용하여 서버 셸에 액세스할 수 없습니다.

다음으로 사용자가 파일 전송을 위해 SFTP에 성공적으로 액세스할 수 있는지 확인하겠습니다.

  1. sftp sammyfiles@localhost

오류 메시지 대신 이 명령은 대화형 프롬프트와 함께 성공적인 로그인 메시지를 표시합니다.

SFTP prompt
Connected to localhost. sftp>

프롬프트에서 ls를 사용하여 디렉토리 내용을 나열할 수 있습니다.

  1. ls

그러면 이전 단계에서 생성된 uploads 디렉터리가 표시되고 sftp> 프롬프트로 돌아갑니다.

SFTP file list output
uploads

사용자가 실제로 이 디렉터리로 제한되고 그 위의 디렉터리에 액세스할 수 없는지 확인하려면 디렉터리를 그 위의 디렉터리로 변경해 볼 수 있습니다.

  1. cd ..

이 명령은 오류를 표시하지 않지만 이전과 같이 디렉토리 내용을 나열하면 변경 사항이 표시되지 않아 사용자가 상위 디렉토리로 전환할 수 없음을 증명합니다.

이제 제한된 구성이 의도한 대로 작동하는지 확인했습니다. 새로 생성된 sammyfiles 사용자는 파일 전송을 위해 SFTP 프로토콜만 사용하여 서버에 액세스할 수 있으며 전체 셸에 액세스할 수 없습니다.

결론

전체 셸 액세스 없이 서버의 단일 디렉터리에 대한 SFTP 전용 액세스로 사용자를 제한했습니다. 이 자습서에서는 간결성을 위해 하나의 디렉터리와 하나의 사용자만 사용하지만 이 예제를 여러 사용자와 여러 디렉터리로 확장할 수 있습니다.

SSH 서버는 그룹 또는 여러 사용자에 대한 액세스를 한 번에 제한하거나 특정 IP 주소에 대한 액세스를 제한하는 등 보다 복잡한 구성 체계를 허용합니다. SSH 문제 해결 시리즈에서 추가 구성 옵션의 예와 가능한 지시문에 대한 설명을 찾을 수 있습니다.