• 일반적으로 FTP 서버를 이용한 파일 전송은 보안 기능이 적용 X
  • 안전한 파일 전송을 위해 사용하는 가장 일반적인 방법 → SFTP와 FTPS를 사용

SFTP

  • SFTP는 암호화된 SSH 연결을 이용
  • SFTP는 서버 접속, 파일 전송, 그리고 파일 관리를 지원하기 위해 IETF(Internet Engineering Task Force)에서 개발한 네트워크 프로토콜
  • SFTP를 사용하기 위해선 SSH2 프로그램을 설치한 후에 활성화 필요

SFTP의 특징

  1. 안전한 파일 전송
    • SFTP는 안전한 파일 전송을 위해 SSH로 연결을 암호화
  1. 안전한 FTP 서버 접속
    • 안전한 서버 접속을 위해 인증 방법으로서 패스워드 뿐만 아니라 공개키(Public Key)를 이용한 접속을 지원
  1. 대부분의 플랫폼에서 사용 가능
    • SFTP는 Windows, Unix, linux 등 대부분의 플랫폼에서 지원
  1. SSH 서버가 제공하는 프로그램 (VSFTP 서버와 별개)
    • VSFTP 서버와 별개의 프로그램이지만, 안전한 파일 전송을 지원한다는 점에서 FTP와 동일한 역할

SFTP 서버 설정

1. OpenSSH 패키지 다운

  • sftp 명령어를 사용하려면 SSH 패키지가 필요
  • OpenSSH 패키지를 설치하면 SSH 패키지를 설치 가능
    $ yum install openssh-server openssh -y

2. SSH 서버의 설정 파일 변경

  • /etc/ssh/sshd_confg 파일을 수정

  • 기존에 있던 설정을 internal-sftp로 변경 (아래에 설명)

    $ vi /etc/ssh/sshd_config
    
    # 기존에 있던 Subsystem을 주석처리하고 새로운 Subsystem을 추가
    # override default of no subsystems
    # Subsystem     sftp    /usr/libexec/openssh/sftp-server
    Subsystem       sftp    internal-sftp
    
    # Example of overriding settings on a per-user basis
    Match User sftp-users
        X11Forwarding no
        AllowTcpForwarding no
    #  ChrootDirectory /home/%u
        ForceCommand internal-sftp

3. /etc/ssh/sshd_config 파일 내 적용 요소 설명

  1. #Subsystem sftp /usr/libexec/openssh/sftp-server
    • 서브시스템으로 사용되던 기존 sftp 프로그램을 사용 X → 앞에 주석 추가
  1. Subsystem sftp internal-sftp
    • SSH 서버에서 외부 프로그램을 사용
    • 키워드 Subsystem에 이름 sftp와 명령어 internal-sftp를 지정
    • internal-sftp는 Match Group sftp-users의 ChrootDirectory 옵션을 사용해 각 사용자 별로 chroot를 적용하기 위해 sftp-server 대신 사용
  1. Match Group sftp-users
    • sftp를 사용할 그룹 이름과 옵션을 정의
    • 그룹 안에 속한 사용자들은 ssh 및 scp를 사용 불가능 → 오직 sftp만 사용 가능
      1. X11Forwarding no → ssh 접속해서 GUI 기반의 어플리케이션 실행 X
      2. AllowTcpForwarding no → TCP 포워딩을 불가능
    • chroot를 적용돼 자신의 홈 디렉토리를 루트(/) 디렉토리로 인식
      1. ChrootDirectory는 root로 적용될 디렉토리 위치를 지정
      2. %u → 인증된 사용자의 사용자 이름을 지정
    • ForceCommand internal-sftp → internal-sftp를 강제 명령으로 실행

4. 그룹 생성 및 그룹에 사용자 포함

  • SFTP 사용이 적용될 그룹 sftp-users를 생성하기 위해 명령어 groupadd를 사용

  • 그룹을 만든 후 사용자를 그룹에 포함 → 예시 : hippo 사용자

  • hippo 사용자의 홈디렉토리에 그룹 회원들이 접속할 수 있도록 권한을 변경

    # 변경한 /etc/ssh/sshd_config을 새로 적용
    $ systemctl restart sshd
    
    # sftp-users 그룹 생성
    $ groupadd sftp-users
    
    # sftp-users 그룹에 root 사용자를 추가
    # usermod -g sftp-users root를 하면 그룹 하나만 속함 -> 사용 X
    $ usermod -aG sftp-users root
    $ id root
    uid=0(root) gid=0(root) groups=0(root),10(wheel),1000(sftp-users)
    
    # hippo 사용자가 없기에 새로 추가 필요
    $ id hippo
    id: hippo: no such user
    
    # hippo 사용자 추가
    $ adduser hippo
    $ passwd hippo
    
    # sftp-users에 hippo 사용자 추가
    $ usermod -aG sftp-users hippo
    
    # hippo 사용자가 정상적으로 생성되고 sftp-users에 들어있는 지 확인
    # wheel 그룹에 속하려면 /etc/group의 wheel에 hippo를 추가해야 함
    $ id hippo
    uid=1000(hippo) gid=1001(hippo) groups=1001(hippo),10(wheel),1000(sftp-users)
    
    # 권한 변경
    $ chmod 755 /home/hippo
    
    $ ls -al /home
    drwxr-xr-x   2 hippo hippo 4096 Jan 30 21:54 hippo

리눅스 SFTP 클라이언트 테스트

  • 접속하는 윈도우 SFTP 클라이언트

  • 리눅스 클라이언트로 이용하여 테스트

  • 리눅스 SFTP 접속 → IP 접속을 허용해줘야 함 (ACL 정책 확인 필요)

    $ sftp -P 22000 root@[서버 IP] 
    root@[서버 IP]'s password: 
    Connected to [서버 IP]. 
    
    # SFTP 접속 위치의 파일 확인 
    sftp> ls 
    test.sh   time 
    
    # SFTP 현재 위치 확인 
    sftp> pwd 
    Remote working directory: /root 
    
    # SFTP 접속 해제 
    sftp> exit`

+ Recent posts