Ubuntu Linux 에서 SFTP 계정 설정하기
서비스를 운영하다 보면 어떠한 이유로 서버내 특정 경로를 외부(거래처 개발자)의 사람에게 접근하도록 오픈해야 할 경우가 있다.
나의 경우를 예로 들자면, 고객사가 사이트 디자인을 개편하고 싶어서 디자이너(겸 퍼블리셔)를 채용했고, 그 디자이너가 웹에디터로는 작업이 너무 불편하다고 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 에 설정해야함.
이거 지금 필요한 시점인데~
관심법이 있으신듯 합니다.
훌륭한 글 감사드립니다
잘 활용할게요
이번에 구매하신 슈퍼 서버 화이팅!
감사합니다~^^
아직 무엇을 할지 모르겠어요~
좋은 한 주 되세요
항상 감사드립니다