Ubuntu Linux 에서 SFTP 계정 설정하기

HYEONG HWAN, MUN/ 10월 27, 2019/ 미분류/ 3 comments

https://blog.lael.be/post/9536

서비스를 운영하다 보면 어떠한 이유로 서버내 특정 경로를 외부(거래처 개발자)의 사람에게 접근하도록 오픈해야 할 경우가 있다.

나의 경우를 예로 들자면, 고객사가 사이트 디자인을 개편하고 싶어서 디자이너(겸 퍼블리셔)를 채용했고, 그 디자이너가 웹에디터로는 작업이 너무 불편하다고 ftp 열어줄 수 없냐고 요구하는 경우이다.

물론 절대로 허용하면 안되는 일이지만, 고객이 우량고객일 경우 영업팀의 요청에 의해, 허용해 주어야 할 때가 있다.

 

이런 경우에 사용할 수 있는, 서버 시스템은 보호하면서, 특정 디렉토리의 sftp에 접근하도록 설정하는 방법에 대해 알아보도록 하자.

 

제한 사항

sftp 접속 후 표시되는 루트 폴더에는 업로드를 할 수 없습니다.

 

설정 방법

1. SFTP 로그인 계정 생성

# adduser laeltest03

 

2. sftp_root 폴더 생성, 업로드 폴더 생성

SFTP 로그인시 처음에 표시될 root 폴더를 생성한다.

# su -l laeltest03
# mkdir sftp_root
# cd sftp_root
# mkdir uploads
# exit

3. 해당 사용자에 대해 SFTP 접속만 허용하도록 변경

# vi /etc/ssh/sshd_config

가장 하단에 다음의 내용 입력

Match User laeltest03
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /home/laeltest03/sftp_root

두번째 줄에 의해 ssh 접근이 막히고, 세번째 줄에 의해 비밀번호 입력이 허용되고, 네번째 줄에 의해 루트 디렉토리가 바뀐다.

 

변경 사항 적용

# service ssh reload

 

해당 사용자 쉘로그인 못하도록 설정

# usermod --shell /usr/sbin/nologin laeltest03

 

4. Filezilla 같은 SFTP 접속 프로그램에서 접속해 본다.

접속이 안되면 정상이다.

디버그 하는 방법을 설명하기 위해 접속이 안되는 상황을 만들었다.

접속 로그 살피기 (나가기 명령어, control C)

# tail -f /var/log/auth.log

오류 내용을 설명하자면,

chroot 의 조건은 1) 모든 경로의 owner 가 root 이어야 함.  2) 모든 경로의 group 및 other 에게 write 권한이 없어야 함.

 

5. 권한 설정

# chown root /home/laeltest03
# chown root /home/laeltest03/sftp_root

 

# chmod 750 /home/laeltest03
# chmod 750 /home/laeltest03/sftp_root

 

6. 다시 접속 테스트

ssh 명령어로 접속 시도해서 This service allows sftp connections only. 라고 나오면 정상이다.

sftp 로 정상적으로 잘 접속되면 정상이다.

 

끝.


더보기

만약 ssh 도 허용해 주어야 한다면 jailshell 사용을 고려해보아야 한다. 격리된 가상화 쉘이라고 보면 된다.

https://github.com/pymumu/jail-shell

 

만약 특정 폴더를 공유하고 싶다면 엄청 잘 설정해서 chroot 를 바꾸거나, 퍼미션을 잘 설정해서 ln 명령어로 해결하면 된다.
하지만 나는 mount 명령어를 사용하는 것을 권장한다.

mount --bind 원본폴더절대경로 마운트될폴더

마운트 해제 방법

umount 마운트된폴더

또는 재부팅

 

마운트를 유지하고 싶으면 fstab 이나 crontab 에 설정해야함.

 

 

3 Comments

  1. 이거 지금 필요한 시점인데~

    관심법이 있으신듯 합니다.
    훌륭한 글 감사드립니다
    잘 활용할게요

    1. 이번에 구매하신 슈퍼 서버 화이팅!

      1. 감사합니다~^^

        아직 무엇을 할지 모르겠어요~
        좋은 한 주 되세요
        항상 감사드립니다

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*