수성컴전자방입니다. 얼마 전 Raspberry Pi 4 Model B로 SMB 서버 여는 법을 올렸습니다(관련 글). SMB는 보안 문제로 인해 Windows PC에서 외부 접속이 안 되므로 SFTP 서버를 열어 보겠습니다. SFTP는 FTP와는 별개의 프로토콜이며, SSH 프로토콜을 활용한 파일 전송 규격입니다. SSH의 키 교환 알고리즘 기반의 암호화 기능이 있어서 FTP보다 보안성이 좋습니다.
목차
1. Raspberry Pi 4 Model B에 Ubuntu Server 설치, SSH 연결
2. (공유기 사용 시)라즈베리파이4B Ubuntu Server 고정 IP 설정
3. 외장 SSD 준비, 파티션 생성, 포맷, 마운트
4. SFTP(NAS) 접속용 사용자 계정 생성
5. Chroot로 공유 폴더 경로 설정(/etc/ssh/sshd_config)
6. 접근 권한 설정
7. SSH 재시작
8. (공유기 사용 시)포트포워딩
9. DDNS 설정
10. Windows에서 FileZilla를 이용하여 SFTP 서버 접속
11. 갤럭시 내 파일에서 SFTP 서버 접속
12. 글 마무리
13. 참고 자료
1. Raspberry Pi 4 Model B에 Ubuntu Server 설치, SSH 연결
저는 이상하게 외장 SSD에 Ubuntu Server를 설치하면 SSH 접속이 안 되더라고요. 그래서 USB 메모리에 Ubuntu Server를 설치했습니다.
라즈베리파이를 조작하는 방법은 여러 가지가 있겠지만, 저는 VS Code를 이용하여 SSH 접속하겠습니다.
2. (공유기 사용 시)라즈베리파이4B Ubuntu Server 고정 IP 설정
라즈베리파이를 재부팅할 수도 있으므로 라즈베리파이의 IP는 고정되어 있는 것이 편합니다. 공유기를 사용하신다면 위의 링크를 참고하여 설정하시기 바랍니다. 참고로 사설 IP만 고정하는 것이므로, 공인 IP는 여전히 동적 IP입니다.(공인 IP를 고정하려면 추가 요금을 내야 합니다. 그냥 사설 IP만 고정합시다. 그 대신 9번 문단에서 DDNS 설정을 할 것입니다.)
3. 외장 SSD 준비, 파티션 생성, 포맷, 마운트
3.1. 저는 SATA 규격의 중고 SSD가 있어서 SATA to USB 3.0 어댑터를 이용하여 라즈베리파이에 연결했습니다.(https://sooseongcom.com/post/raspberrypi4b-smb#3-외장-ssd-준비)
3.2. 외장 SSD에 파티션을 생성하고 포맷한 다음 마운트합니다.(https://sooseongcom.com/post/raspberrypi4b-smb#4-외장-ssd에-파티션-생성-포맷-마운트)
4. SFTP(NAS) 접속용 사용자 계정 생성
사실 그냥 Ubuntu 계정과 비밀번호를 만드시면 됩니다. 이미 있다면 건너뛰셔도 됩니다.(메인으로 사용하는 사용자 계정과 별개로 NAS 접속용 계정을 만드시는 것을 추천 드립니다.)
4.1. sudo useradd 계정명을 입력합니다.(Ubuntu에 사용자 계정 추가됨.)
4.2. sudo passwd 계정명 명령을 실행합니다.
4.3. 4.1번에서 추가한 계정으로 SMB 접속할 때 입력할 암호를 설정합니다.
5. Chroot로 공유 폴더 경로 설정(/etc/ssh/sshd_config)
5.1. cd /etc/ssh 명령을 실행하여 /etc/ssh 경로로 이동합니다.
5.2. sudo chown 사용자계정명 sshd_config 명령을 실행하여 소유자를 변경합니다.(VS Code로 파일을 수정하기 위함.)
5.3. Ctrl+F를 누르고 /usr/lib/openssh/sftp-server를 찾아 아래와 같이 수정합니다.
# ...
# override default of no subsystems
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sdmcrw
ChrootDirectory /home/sda1/sdmc
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand internal-sftp
[Line 4~5 Subsystem sftp]
4행) # Subsystem sftp /usr/lib/openssh/sftp-server
5행) Subsystem sftp internal-sftp
기존의 Subsystem sftp /usr/lib/openssh/sftp-server는 삭제하거나 주석 처리하고, Subsystem sftp internal-sftp를 추가합니다. SFTP와 관련하여 /usr/lib/openssh/sftp-server를 실행하지 않고 sshd 내부에 포함된 모듈을 사용하겠다는 것입니다.
[Line 7 Match]
Match User 사용자계정명
사용자계정명(이하 ‘SFTP계정’)에 대해서만 적용되는 설정을 8행 이후에 들여쓰기로 작성할 것입니다.
참고1) 특정 그룹에만 적용되게 하려면 Match Group 그룹명으로 합니다.
참고2) 특정 포트에만 적용되게 하려면 Match LocalPort 포트번호로 합니다. 기본 포트 외의 다른 포트를 추가하려면 먼저 파일 상단에서 주석 처리되어 있는 #Port 22를 찾아 주석을 풀고 다른 포트를 추가해 주어야 합니다.
[Line 8 ChrootDirectory]
ChrootDirectory 폴더경로
폴더경로에는 SFTP계정으로 접속했을 때 최상위 경로(root)로 지정할 폴더의 경로를 작성합니다.
[Line 9 X11Forwarding]
X11Forwarding no
X11Forwarding은 Linux의 GUI 앱을 SSH로 실행하기 위한 것인데, SFTP계정으로 그런 기능을 쓰지 않을 것이므로 no로 설정합니다.
[Line 11 PermitTTY]
PermitTTY no
PermitTTY는 SSH를 통해 원격 터미널 세션(TTY)을 할당하는 것인데, SFTP계정으로 터미널을 조작하지 않도록 하기 위해 no로 설정합니다.
[Line 12 ForceCommand]
ForceCommand internal-sftp
ForceCommand는 사용자가 SSH를 통해 서버에 접속할 때 실행할 명령을 강제합니다. SFTP계정으로는 SFTP만 사용할 수 있도록 하기 위해 ForceCommand internal-sftp라고 작성합니다.
[예시]
6. 접근 권한 설정
접근 권한 설정은 아래와 같이 합니다.
- ... (rwxr-xr-x root:아무거나)
- 📁공유 폴더 (rwxr-xr-x root:아무거나)
- 📁하위 1단계 (rwxrwxr-x root:SFTP그룹)
- 하위 2단계 이하 (아무거나:아무거나)
- 📁하위 1단계 (rwxrwxr-x root:SFTP그룹)
- 📁공유 폴더 (rwxr-xr-x root:아무거나)
위의 요약에서 r은 읽기 권한, w는 쓰기 권한, x는 실행(디렉토리 접근) 권한입니다. 빨간 글씨는 소유자의 권한, 파란 글씨는 소유 그룹의 권한, 초록 글씨는 그 외 접속자의 권한입니다. 쌍점(:)을 기준으로 왼쪽은 소유자이고, 오른쪽은 소유 그룹입니다(소유자:소유그룹).
ls -l 명령어를 사용하면 현재 경로 내의 폴더/파일들의 권한을 확인할 수 있습니다.
자, 그럼 이제부터 차근차근 설정해 봅시다.
6.1. cd / 명령을 실행하여 root directory로 이동합니다. 계속해서 cd 폴더명 명령어와 ls -l 명령어를 사용하여 공유 폴더까지 내려가며 접근 권한이 rwxr-xr-x으로, 소유자가 root로 되어 있는지 확인합니다.
- 접근 권한이 rwxr-xr-x이 아니면 sudo chmod 755 해당경로 명령을 실행합니다.
- r=4, w=2, x=1
소유자(rwx): 4+2+1=7
그룹(r-x): 4+1=5
그 외(r-x): 4+1=5
∴755
- r=4, w=2, x=1
- 소유자가 root가 아니면 sudo chown root 해당경로 명령을 실행합니다.
이렇게까지 하면 공유 폴더에 폴더나 파일을 생성할 수 없게 됩니다. 따라서 공유 폴더 안에 폴더를 만들어 주고, rwxrwxr-x 권한을 주어야 합니다. 그리고 모든 파일은 그 폴더 안에 넣을 것입니다.
6.2. sudo mkdir 하위1단계 명령을 실행합니다.
6.3. sudo chgrp -R SFTP그룹 하위1단계 명령을 실행합니다.
SFTP그룹의 이름은 보통 SFTP계정 이름 그대로 입력하시면 되며, 별도로 NAS용 그룹을 만드신 경우 해당 그룹의 이름을 입력하시면 됩니다. 물론, SFTP계정이 해당 그룹에 추가되어 있어야 합니다.
6.4. sudo chmod 775 하위1단계 명령을 실행합니다.
소유자(rwx): 4+2+1=7
그룹(rwx): 4+2+1=7
그 외(r-x): 4+1=5
∴775
6.5. NAS의 모든 파일들을 하위1단계 안에 넣습니다.
7. SSH 재시작
service ssh restart 명령을 실행하여 SSH를 재시작합니다.
8. (공유기 사용 시)포트포워딩
공유기를 사용하는 경우 각 장치에 사설 IP가 부여됩니다. 같은 네트워크 안에서는 사설 IP를 입력하여 서버에 접속할 수 있지만, 외부 네트워크에서 서버에 접속하려면 공인 IP를 입력해야 하므로 공유기에서 포트포워딩을 해 주어야 외부 접속이 가능합니다.
- 내부 IP 주소: 라즈베리파이의 사설 IP
- 프로토콜: TCP
- 외부 포트: 외부에서 접속할 때 입력할 포트를 임의로 설정하세요.
- 내부 포트: 22(단, /etc/ssh/sshd_config에서 포트 번호를 변경하지 않았을 경우)
포트포워딩 방법
위에 본인의 공유기가 없을 경우 인터넷에 공유기 이름을 검색해 보면 포트포워딩 하는 방법이 나오므로 검색해 보시기 바랍니다.
9. DDNS 설정
공인 IP를 고정하려면 추가 요금을 내야 하므로 개인적으로 사용할 때는 사설 IP만 고정합니다. 그래서 공인 IP는 주기적으로 변경되어 불편합니다. DDNS를 설정하면 도메인 주소가 공인 IP와 동일한 역할을 하게 할 수 있습니다. 심지어 공인 IP가 바뀌면 DDNS 주소가 알아서 바뀐 공인 IP에 대응되므로 편리합니다.
10. Windows에서 FileZilla를 이용하여 SFTP 서버 접속
이제 Windows PC에서 SFTP 서버에 접속해 보겠습니다. Windows의 파일 탐색기는 SFTP 접속을 지원하지 않으므로 SFTP 클라이언트 프로그램을 설치해야 합니다. 저는 FileZilla를 설치해 보겠습니다.
10.1. https://filezilla-project.org에 접속합니다.
10.2. Download FileZilla Client를 클릭합니다.
10.3. Download FileZilla Client를 클릭합니다.
10.4. 맨 왼쪽(Free) Download를 클릭합니다. 설치 파일이 내려받아지면 실행합니다.
10.5. I Agree를 클릭합니다.
10.6. Chrome을 설치하라고 뜨는데 Decline을 선택하고 Next를 클릭합니다.
10.7. FileZilla를 사용할 계정을 선택합니다.
- Anyone who uses this computer (all users): 이 컴퓨터의 모든 사용자 계정
- Only for me: 오직 이 계정
저는 Anyone who uses this computer (all users)를 선택하고 Next를 클릭했습니다.
10.8. 원하는 대로 체크하고 Next를 클릭합니다.
10.9. Next를 클릭합니다.
10.10. Install을 클릭합니다.
10.11. Finish를 클릭합니다.
10.12. FileZilla를 실행하고 호스트에 SFTP 서버 주소를 입력합니다.
- 같은 네트워크일 때: sftp://서버사설IP
- 외부 접속이며 포트포워딩 시: sftp://서버공인IP
- 외부 접속이며 포트포워딩, DDNS 설정 시: sftp://DDNS도메인주소
10.13. 사용자명에 SFTP계정의 이름을 입력합니다.
10.14. 비밀번호에 SFTP계정의 비밀번호를 입력합니다.
10.15. 포트를 입력합니다.
- 같은 네트워크이거나 공유기 미사용 시: /etc/ssh/sshd_config에 설정된 포트(기본값: 22)
- 외부 접속 시: 포트포워딩 할 때 설정한 외부 포트
10.16. 빠른 연결을 클릭합니다.
10.17. 계속해서 접속할 것이라면 항상 이 호스트를 신뢰하고 이 키를 캐시에 등록에 체크합니다.
10.18. 확인을 클릭합니다.\
FileZilla 창 우측 절반에 SFTP 서버의 파일들이 뜹니다. 그런데 이 파일을 더블 클릭하면 내려받아집니다. 물론 SFTP는 파일 전송을 위한 것이니 이것이 편하신 분들도 있겠지만, 저는 파일을 더블 클릭하면 편집기가 실행되도록 해 보겠습니다.
10.19. 파일→설정으로 들어갑니다.
10.20. 인터페이스→파일 목록으로 들어갑니다.
10.21. 더블 클릭 동작을 파일인지 디렉터리인지에 따라 설정할 수 있습니다. 저는 파일 더블 클릭 동작을 보기/편집으로 바꾸었습니다.\
10.22. 이제 파일을 더블 클릭하면 편집할 수 있습니다. 처음 실행하는 파일 형식인 경우 이런 창이 뜨는데 시스템 연결 사용을 선택하고 확인을 클릭하시면 됩니다.
10.23. 파일이 잘 실행됩니다.
주의할 점은 여기서 수정하고 저장하면 바로 서버에 업로드되는 것이 아니라는 것입니다. 업로드 절차를 거쳐야 합니다.
10.23. 파일→현재 편집 중인 파일 표시로 들어갑니다.
10.24. 각각의 파일들을 클릭하고 미편집, 업로드 및 미편집, 업로드, 파일 열기 중에서 고르면 됩니다. ‘미편집’은 Quit의 느낌, ‘업로드’는 Save의 느낌인 듯 합니다.
10.25. 매번 서버 주소, 사용자명, 비밀번호, 포트를 입력하기 귀찮으니 재접속할 때는 초록색 체크 모양 마지막으로 사용한 서버로 재접속 단추를 누르면 편리합니다.
서버를 즐겨찾기처럼 추가할 수도 있습니다. 왼쪽 위 파일 아래 사이트 관리자 열기 단추를 누릅니다.
10.26. 새 사이트를 클릭합니다.
10.27. 프로토콜을 SFTP - SSH File Transfer Protocol로 설정합니다.
10.28. 호스트 주소(IP 또는 DDNS)를 입력합니다.
10.29. 포트 번호를 입력합니다.
10.30. 사용자에 SFTP계정의 이름을 입력합니다.
10.31. 비밀번호에 SFTP계정의 비밀번호를 입력합니다.
10.32. 이름 바꾸기를 클릭하여 원하는 이름으로 설정합니다.
10.33. 연결 또는 확인을 클릭합니다.
10.34. 비밀번호를 저장할지 말지 설정하고 확인을 클릭합니다.
10.35. 이제 사이트 관리자 열기 단추 옆의 ▼를 클릭하면 서버 목록이 나오며, 이것을 클릭하여 편리하게 접속할 수 있습니다.
.
11. 갤럭시 내 파일에서 SFTP 서버 접속
갤럭시 스마트폰의 ‘내 파일’ 앱은 SFTP 접속을 지원합니다.
11.1. 내 파일을 실행합니다.
11.2. 네트워크 저장공간으로 들어갑니다. 네트워크 저장공간을 처음 들어가는 경우 내 파일 앱을 업데이트하라는 창이 뜰 수 있습니다. 업데이트해 주세요.
11.3. 네트워크 저장공간 추가를 터치합니다.
11.4. SFTP 서버를 터치합니다.
11.5. 주소(IP 또는 DDNS)를 입력합니다.
11.6. 포트 번호를 입력합니다.
11.7. 사용자 이름에 SFTP계정의 이름을 입력합니다.
11.8. 로그인 방법을 비밀번호로 선택하고 SFTP계정의 비밀번호를 입력합니다.
11.9. 표시할 이름을 임의로 입력합니다.
11.10. 추가를 터치합니다.
11.11. 이제 SFTP 서버에 접속하여 파일들을 확인할 수 있습니다.
.
12. 글 마무리
제 글을 읽어 주셔서 감사합니다. 다음에 만나요!
13. 참고 자료
1) dev_Shawn. 2023. “[Linux] Ubuntu에서 계정 생성 & 삭제 하기”, dev_shawn.log. (2025. 03. 03. 방문). https://velog.io/@shawnhansh/Linux-Ubuntu에서-계정-생성-삭제-하기
2) clamp2x. 2015. “SFTP(Chroot 완벽설정) 사용자 상위폴더 접근 못하게 하는 두가지 방법”, Study For Us. (2025. 03. 03. 방문). https://studyforus.tistory.com/243
3) Mr.november11. 2018. “[Linux] CentOS SFTP 서버 설정하기 - chroot로 디렉토리 제한 및 SSH와 포트 분리까지”, Mr.november11. (2025. 03. 03. 방문). https://november11tech.tistory.com/96
4) 강정우. 2024. “SFTP protocol을 이용하여 파일공유 시스템 구축”, 헬창개발자의 성장 V.log. (2025. 03. 03. 방문). https://velog.io/@jeong_woo/SFTP-protocol을-이용하여-파일공유-시스템-구축
5) hjchoi. 2022. “SFTP 접속을 위한 계정 생성하기”, 소소한 정리.log. (2025. 03. 03. 방문). https://velog.io/@hojoon90/SFTP-접속을-위한-계정-생성하기
6) 얇은생각. 2021. “Ubuntu : User 비밀번호 변경 방법”, 쵸코쿠키의 연습장. (2025. 03. 03. 방문). https://jjeongil.tistory.com/1482