SW/리눅스

Linux : SFTP Chroot Jail 설정 방법, 예제, 명령어

얇은생각 2021. 7. 26. 07:30
반응형

Linux 서버를 관리하는 시스템 관리자일 경우 일부 사용자에게 SFTP 액세스 권한을 부여하여 홈 디렉토리에 파일을 업로드해야 할 수 있습니다. 기본적으로 SSH, SFTP 및 SCP를 통해 시스템에 로그인할 수 있는 사용자는 다른 사용자의 디렉토리를 포함하여 전체 파일 시스템을 찾아볼 수 있습니다. 이러한 사용자를 신뢰할 수 있는 경우 문제가 되지 않을 수 있지만 로그인한 사용자가 시스템을 탐색하지 않도록 하려면 홈 디렉토리에 대한 사용자 액세스를 제한해야 합니다. 이렇게 하면 특히 사용자가 여러 명인 시스템에서 추가 보안 계층이 추가됩니다.

이 튜토리얼에서는 사용자를 홈 디렉토리로 제한하는 SFTP Chroot Jil 환경을 설정하는 방법에 대해 설명합니다. 사용자는 SFTP 액세스만 가질 수 있으며 SSH 액세스는 사용할 수 없습니다. 이 지침은 Ubuntu, CentOS, Debian 및 Fedora를 비롯한 모든 최신 Linux 배포에 적용됩니다.

 

 

Linux : SFTP Chroot Jail 설정 방법, 예제, 명령어

 

 

SFTP 그룹 생성

각 사용자에 대해 개별적으로 OpenSSH 서버를 구성하는 대신 새 그룹을 생성하고 모든 루트 사용자를 이 그룹에 추가합니다.

다음 groupadd 명령을 실행하여 sftp 전용 사용자 그룹을 생성합니다.

sudo groupadd sftponly

 

 

그룹 이름을 원하는 대로 지정할 수 있습니다.

 

 

 

SFTP 그룹에 사용자를 추가

다음 단계는 제한하려는 사용자를 sftp 전용 그룹에 추가하는 것입니다.

이 설정이 새 설정이고 사용자가 없는 경우 다음을 입력하여 새 사용자 계정을 만들 수 있습니다.

sudo useradd -g sftponly -s /bin/false -m -d /home/username username

 

 

-g sftponly  옵션은 사용자를 sftp 전용 그룹에 추가합니다.

-s /bin/false 옵션은 사용자의 로그인 셸을 설정합니다. 로그인 셸을 /bin/false로 설정하면 SSH를 통해 서버에 로그인할 수 없습니다.

-m-d /home/username 옵션은 사용자 홈 디렉토리를 생성하도록 사용자에게 알려줍니다.

 

새로 만든 사용자에 대한 강력한 암호를 설정합니다.

sudo passwd username

 

 

그렇지 않으면 제한하려는 사용자가 이미 있는 경우 사용자를 sftp 전용 그룹에 추가하고 사용자의 셸을 변경합니다.

sudo usermod -G sftponly -s /bin/false username2

 

 

사용자 홈 디렉터리는 루트 소유이며 다음과 같은 755의 사용 권한이 있어야 합니다.

sudo chown root: /home/username
sudo chmod 755 /home/username

 

 

사용자 홈 디렉터리는 루트 사용자가 소유하므로 이러한 사용자는 홈 디렉터리에 파일 및 디렉터리를 만들 수 없습니다. 사용자 집에 디렉토리가 없는 경우, 사용자가 전체 액세스 권한을 가질 새 디렉토리를 작성해야 합니다. 예를 들어 다음과 같은 디렉터리를 생성할 수 있습니다.

sudo mkdir /home/username/{public_html,uploads}
sudo chmod 755 /home/username/{public_html,uploads}
sudo chown username:sftponly /home/username/{public_html,uploads}

 

 

웹 응용 프로그램에서 사용자의 public_html 디렉토리를 문서 루트로 사용하는 경우 이러한 변경으로 인해 사용 권한 문제가 발생할 수 있습니다. 예를 들어 WordPress를 실행하는 경우 파일을 소유하는 사용자로 실행되는 PHP 풀을 생성하고 웹 서버를 sftp 전용 그룹에 추가해야 합니다.

 

 

 

SSH를 구성

SFTP는 SSH의 하위 시스템이며 모든 SSH 인증 메커니즘을 지원합니다.

텍스트 편집기로 SSH 구성 파일 /etc/ssh/sshd_config를 엽니다.

# /etc/ssh/sshd_config

Subsystem sftp internal-sftp

 

 

일반적으로 파일 끝에 있는 서브시스템 sftp로 시작하는 줄을 검색합니다. 행이 해시 #로 시작하는 경우 해시 #를 제거하고 다음과 같이 수정하십시오.

파일이 끝날 무렵 다음과 같은 설정 블록이 표시됩니다.

# /etc/ssh/sshd_config

Match Group sftponly
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

 

 

ChrootDirectory 명령은 chroot 디렉토리에 대한 경로를 지정합니다. %h은 사용자 홈 디렉토리를 의미합니다. 이 디렉터리는 루트 사용자가 소유하고 다른 사용자나 그룹이 쓸 수 없어야 합니다.

SSH 구성 파일을 수정할 때는 각별히 주의하십시오. 잘못된 구성으로 인해 SSH 서비스가 시작되지 않을 수 있습니다.

작업이 완료되면 파일을 저장하고 SSH 서비스를 다시 시작하여 변경 내용을 적용합니다.

sudo systemctl restart ssh

 

 

 

CentOS 및 Fedora에서는 ssh 서비스의 이름이 sshd입니다.

sudo systemctl restart sshd

 

 

 

구성을 테스트

SFTP chroot를 구성했으므로 이제 루트된 사용자의 자격 증명을 사용하여 SFTP를 통해 원격 시스템에 로그인할 수 있습니다. 대부분의 경우 FileZilla와 같은 데스크톱 SFTP 클라이언트를 사용하지만 이 예에서는 sftp 명령을 사용합니다.

sftp 명령을 사용하여 SFTP 연결을 연 다음 원격 서버 사용자 이름과 서버 IP 주소 또는 도메인 이름을 엽니다.

사용자 암호를 입력하라는 메시지가 표시됩니다. 연결되면 원격 서버에 확인 메시지와 sftp> 프롬프트가 표시됩니다.

sftp username@192.168.121.30

# username@192.168.121.30's password:
# sftp>

 

 

아래와 같이 pwd 명령을 실행하여 모든 작업이 예상대로 작동 중인 경우 명령어는 /를 반환해야 합니다.

sftp> pwd
Remote working directory: /

 

 

ls 명령을 사용하여 원격 파일 및 디렉터리를 나열할 수도 있으며 이전에 생성한 디렉터리를 확인해야 합니다.

sftp> ls
public_html  uploads  

 

 

Linux 서버에 SFTP Chroot Jail 환경을 설정하고 홈 디렉토리에 대한 사용자 액세스를 제한하는 방법에 대해 배웠습니다.

기본적으로 SSH는 포트 22에서 수신 대기합니다. 기본 SSH 포트를 변경하면 자동 공격의 위험을 줄여 서버에 추가 보안 계층이 추가됩니다. 또한 SSH 키 기반 인증을 설정하고 암호를 입력하지 않고 서버에 연결할 수도 있습니다.

반응형