수성컴전자방입니다. 오늘은 Raspberry Pi 4 Model B로 NAS를 만들겠습니다. 보통 ‘OpenMediaVault’라는 운영체제를 설치해서 쓰는데, 저는 그런 것 없이 그냥 Ubuntu Server에 Samba를 설치해서 SMB 서버를 구동하겠습니다.
목차
1. Raspberry Pi 4 Model B에 Ubuntu Server 설치, SSH 연결
2. (공유기 사용 시)라즈베리파이4B Ubuntu Server 고정 IP 설정
3. 외장 SSD 준비
4. 외장 SSD에 파티션 생성, 포맷, 마운트
5. SAMBA 설치
6. 사용자 계정 추가 및 SMB 암호 설정
7. 사용자 그룹 추가
8. 외장 SSD 접근 권한 설정
9. /etc/samba/smb.conf 수정
10. SMB 포트 개방, SMB 재구동
11. Windows PC에서 NAS 접속하기
12. Windows PC에서 네트워크 드라이브 문자 지정
13. SMB 휴지통 만들기
14. 글 마무리
15. 참고 자료
1. Raspberry Pi 4 Model B에 Ubuntu Server 설치, SSH 연결
저는 이상하게 외장 SSD에 Ubuntu Server를 설치하면 SSH 접속이 안 되더라고요. 그래서 USB 메모리에 Ubuntu Server를 설치했습니다.
라즈베리파이를 조작하는 방법은 여러 가지가 있겠지만, 저는 Visual Studio Code를 이용하여 SSH 접속하겠습니다.
2. (공유기 사용 시)라즈베리파이4B Ubuntu Server 고정 IP 설정
라즈베리파이를 재부팅할 수도 있으므로 라즈베리파이의 IP는 고정되어 있는 것이 편합니다. 공유기를 사용하신다면 위의 링크를 참고하여 설정하시기 바랍니다. 참고로 사설 IP만 고정하는 것이므로, 공인 IP는 여전히 동적 IP입니다.(공인 IP를 고정하려면 추가 요금을 내야 합니다. 그냥 사설 IP만 고정합시다.)
3. 외장 SSD 준비
저는 SATA 규격의 중고 SSD가 있어서 SATA to USB 3.0 어댑터를 준비했습니다. NEXT-318U3 제품입니다.
이 부분을
이렇게 SSD와 연결하고 USB를 PC와 연결합니다.
PC의 파일 탐색기에서 보니, 제 SSD가 중고 SSD라서 이전의 Windows 파티션들이 남아 있는 모습을 볼 수 있습니다.
3.1. 시작 오른쪽 클릭(Windows+X)→터미널(관리자)(A)을 실행합니다.
3.2. diskpart를 실행합니다.
3.3. list disk를 실행하고 외장 SSD의 disk 번호를 확인합니다.(스크린샷 보고 따라하지 마시고 여러분의 디스크 번호를 잘 확인하세요!)
3.4. select disk 외장SSD번호를 실행합니다.
3.5. clean을 실행합니다.
3.6. exit로 나갑니다.
3.7. 시작 오른쪽 클릭(Windows+X)→디스크 관리(K)를 실행합니다.
3.8. 방금 clean시킨 디스크를 오른쪽 클릭하고 디스크 초기화를 클릭합니다.
3.9. 확인을 클릭합니다.
3.10. 볼륨 할당은 Ubuntu에서 할 것이니 외장 SSD를 PC와 분리하겠습니다.
3.11. 저는 어릴 때 가지고 놀던 옥스포드 신나는 지하철 블록으로 라즈베리파이 NAS 케이스를 만들었습니다.
언젠가 구매해 두었던 라즈베리파이용 팬도 장착하였습니다.
불이 날 것을 대비하여 승전상사의 소화패드도 부착하였습니다. 2023년 4월 국제 전기전력 전시회 관람했을 때 승전상사 부스에 가서 소화패드를 관심 있게 봤더니 관계자님께서 저에게 몇 개 주셨습니다. 이제서야 필요한 곳에 사용하네요. 이 자리를 빌어 감사의 말씀 드립니다.
3.12. 브레드보드(빵판)와 4핀 택트스위치를 구매하여 연결했습니다.
3.13. SATA to USB 3.0 컨버터의 USB 3.0 케이블을 라즈베리파이에 꽂습니다. 그리고 Ubuntu Server가 설치된 USB도 라즈베리파이에 꽂습니다. 전원 케이블(USB-C)를 연결하고 전원을 넣으면 라즈베리파이가 켜집니다.
4. 외장 SSD에 파티션 생성, 포맷, 마운트
4.1. 파일→폴더 열기(단축키: Ctrl+K, O)를 클릭하고 외장 SSD를 마운트하고 싶은 곳을 엽니다. 저는 /home을 선택했습니다.
저는 시행착오를 많이 겪어서 이후의 스크린샷에서 폴더 경로가 왔다갔다 하니 양해 부탁드립니다.
4.2. 암호를 입력합니다.
4.3. 터미널(VS Code 상단 터미널→새 터미널)에서 sudo fdisk -l 명령을 실행하고 암호를 입력합니다.(참고로 리눅스 터미널은 암호 입력 화면에서 키보드를 눌러도 화면에 변화가 없지만 실제로는 입력되고 있다는 점 참고하시기를 바랍니다.)
그러면 라즈베리파이에 연결된 저장 장치들을 확인할 수 있습니다. 저는 USB(Ubuntu Server)가 sdb로, 외장 SSD가 sda로 잡혔네요.
4.4. df -h 명령을 실행하면 현재 마운트된 파티션 목록을 볼 수 있습니다. sdb1, sdb2는 있는데 sda는 안 보이네요.
4.5. lsblk 명령을 실행하면 디스크와 파티션을 시각적으로 볼 수 있습니다. sda는 아무 파티션이 없는 것을 볼 수 있습니다.
4.6. sudo fdisk /dev/디스크 명령을 실행합니다.
4.7. 대문자 F를 입력하여 남은 공간을 확인합니다.
4.8. n을 입력하여 파티션을 만듭니다. 이때 여러 가지 입력할 것들이 있는데 그냥 엔터를 누르면 기본값(p, 1, first sector, last sector)으로 입력됩니다.
4.9. ‘Do you want to remove the signature?’라는 질문에는 y를 입력합니다.
4.10. w를 입력하여 저장하고 종료합니다.
4.11. lsblk 명령을 실행하면 방금 만든 파티션을 확인할 수 있습니다.
4.12. 그러나 df -h 명령을 실행하면 방금 만든 파티션이 없습니다. 왜냐하면 방금 만든 파티션이 마운트되지 않았기 때문입니다. 방금 만든 파티션을 마운트해야 합니다.
4.13. 마운트하기 전 우선 방금 만든 파티션을 EXT4 형식으로 포맷하겠습니다. sudo mkfs.ext4 /dev/파티션 명령을 실행합니다.
4.14. sudo mkdir 폴더이름 명령을 실행하여 폴더를 생성합니다.(root 권한이 필요하므로 VS Code 기능으로 생성 불가. 터미널에서 명령어를 사용해야 함.)
4.15. sudo mount /dev/파티션 ./폴더이름 명령을 실행하여 파티션을 마운트합니다.
Linux는 Windows와 달리 파티션이 드라이브 문자를 갖지 않고 특정 폴더에 연결됩니다.
4.16. lsblk, df -h 명령을 실행하면 파티션이 원하는 경로에 마운트된 것을 확인할 수 있습니다.
그러나 이렇게만 두면 라즈베리파이 재부팅 시 마운트가 해제되므로, 자동 마운트를 설정하겠습니다.
4.17. /etc 경로로 폴더를 열고 암호를 입력합니다.
4.18. /etc/fstab을 수정해야 하는데 권한이 없으므로 사용자 계정에 권한을 주겠습니다.
sudo chown 사용자계정명 fstab 명령을 실행합니다.
4.19. sudo blkid 명령을 실행하여 외장 SSD 파티션의 UUID를 확인합니다.
4.20. /etc/fstab의 맨 밑에
<외장 SSD 파티션의 UUID> <마운트할 폴더 경로> defaults 0 0
을 추가합니다.
5. SAMBA 설치
5.1. 다시 마운트한 폴더가 있는 경로(저는 ‘/home’입니다.)로 돌아옵니다.
5.2. sudo apt update 명령을 실행합니다.
5.3. sudo apt install samba 명령을 실행합니다.
5.4. ‘Do you want to continue? [Y/n]’이라는 질문이 뜨면 Y를 입력하고 엔터를 누릅니다.
5.5. Samba는 설치가 완료되면 자동으로 구동됩니다. sudo systemctl status smbd 명령을 실행하여 Samba 상태를 확인할 수 있습니다.
6. 사용자 계정 추가 및 SMB 암호 설정
SMB 서버 접속할 때 입력할 사용자 이름과 암호를 설정하겠습니다.
6.1. sudo useradd 계정명을 입력합니다.(Ubuntu에 사용자 계정 추가됨.)
6.2. sudo smbpasswd -a 계정명 명령을 실행합니다.
6.3. 6.1번에서 추가한 계정으로 SMB 접속할 때 입력할 암호를 설정합니다.
저는 읽기 전용 계정을 만들기 위해 계정을 2개 추가했습니다.
6.4. sudo smbpasswd -e 계정명 명령을 실행하여 SMB 계정을 활성화합니다.
7. 사용자 그룹 추가
7.1. sudo groupadd 그룹명 명령을 실행합니다.(Ubuntu에 사용자 그룹 추가됨.)
7.2. sudo usermod -G 그룹명 계정명 명령을 실행합니다.
저는 사용자 계정을 2개 만들었으나 그중 1개만 방금 만든 그룹에 추가했습니다.
8. 외장 SSD 접근 권한 설정
8.1. 외장 SSD 파티션 폴더에 NAS로 공유할 폴더를 만듭니다.
8.2. 마운트한 폴더가 있는 경로(저는 ‘/home’입니다.)에서 ls -l 명령을 실행하면 파일, 폴더별 접근 권한을 확인할 수 있습니다. 위의 스크린샷에서 3번째 줄을 보겠습니다.
drwxr-xr-x에서 r은 읽기 권한, w는 쓰기 권한, x는 실행(디렉토리 접근) 권한입니다.
제 외장 SSD(sda1)는 현재 사용자는 읽기, 쓰기, 실행 모두 가능하고, 그룹은 읽기와 실행만 가능하고, 그 외(others)도 읽기와 실행만 가능한 상태입니다.
그리고 현재 사용자와 그룹 모두 root입니다.
8.3. sudo chown 사용자계정명 폴더명 명령을 실행하여 VS Code 상에서도 파일을 관리할 수 있게 합니다.
8.4. sudo chgrp -R 그룹명 폴더명 명령을 실행하여 외장 SSD에 해당 그룹이 접근할 수 있게 합니다.(-R이 빠지면 폴더 안의 파일들은 접근 권한이 변경되지 않습니다. 빠뜨리지 않도록 주의하세요!)
8.5. sudo chmod g+w 명령을 실행하여 그룹 권한에 쓰기를 추가합니다.
8.6. 이제 ls -l 명령을 실행하면 위의 스크린샷 3번째 줄처럼 됩니다.(물론 계정 이름, 그룹 이름, 폴더 이름은 다를 것입니다.)
9. /etc/samba/smb.conf 수정
9.1. /etc/samba 경로로 들어갑니다.
9.2. smb.conf 수정을 위해 sudo chown 사용자계정명 smb.conf 명령을 실행합니다.
9.3. 이제 smb.conf를 수정합니다. [global] 아래에 있는 내용들은 공통적으로 적용되는 부분이고, [printers] 아래에 있는 내용들은 프린터에 적용되는 부분이고, [다른 이름] 아래에 있는 내용들은 개별적으로 적용되는 부분이라고 보시면 됩니다. 일단 [global] 부분에 아래와 같이 적습니다.
#...
[global]
dos charset = cp949
display charset = UTF8
unix charset = UTF8
min protocol = SMB2
#...(기존에 있는 것들을 지우지 말 것)
[Line 4~6]
인코딩 관련입니다.
[Line 7]
최소 프로토콜(버전)을 SMB2로 설정합니다. SMB1은 보안이 취약하여 사용하지 않습니다.
9.4. 이제 개별적인 사항들을 설정하겠습니다. smb.conf 맨 밑에 추가합니다.
[Line 246]
[접속하는 PC에서 보여지는 이름]
[Line 247 path]
path = 공유할 폴더 경로
[Line 248 read only]
read only = yes이면 읽기 전용.
read only = no이면 읽기 전용 아님.
[Line 249 writeable]
writeable = yes이면 쓰기 가능.
writeable = no이면 쓰기 불가.
[Line 250 write list(writeable = yes일 때)]
write list = 쓰기 가능한 사용자 목록(쉼표로 구분)
[Line 251 valid user]
valid user = 접근 가능한 사용자 목록(쉼표로 구분)
저는 실수로 write list에 있는 사용자들을 valid user에 쓰지 않은 채로 스크린샷을 찍었는데, 나중에 추가해 주었습니다.
[Line 252~253 create mode, directory mode]
create mode = 0777
directory mode = 0777
create mode는 파일을 생성할 때 접근 권한을 무엇으로 설정할지를, directory mode는 폴더를 생성할 때 접근 권한을 무엇으로 설정할지를 정합니다. r=4, w=2, x=1입니다.
10. SMB 포트 개방, SMB 재구동
10.1. sudo ufw allow ‘Samba’ 명령을 실행하면 SMB 포트인 TCP 139, 445번, UDP 137~138번 포트가 개방됩니다.
10.2. sudo systemctl restart smbd 명령을 실행합니다.
10.3. sudo systemctl restart nmbd 명령을 실행합니다.
11. Windows PC에서 NAS 접속하기
11.1. 라즈베리파이와 같은 네트워크에 연결된 Windows PC에서 파일 탐색기 주소 창에 \\라즈베리파이호스트이름을 입력하고 엔터를 누릅니다.
11.2. 6, 9번 문단에서 추가한 사용자 계정 이름과 암호를 입력합니다. 내 자격 증명 기억에 체크하면 나중에 다시 접속할 때 자동 로그인됩니다.
11.3. 그러면 공유한 폴더들이 나타납니다.
11.4. 공유된 폴더에 들어가서 한 쪽에 파일을 생성하면 다른 한 쪽에도 파일이 들어가는 것을 보실 수 있습니다.
파일을 복사해 보면 속도도 준수하게 나옵니다.
12. Windows PC에서 네트워크 드라이브 문자 지정
NAS 서버에 드라이브 문자를 부여하면 사용하기 편리합니다.
12.1. ‘내 PC’에서 주소창 바로 아래의 …을 클릭하고 네트워크 드라이브 연결을 클릭합니다.
12.2. 드라이브 문자를 선택(보통 Z:로 함.)하고 폴더 칸에 \\라즈베리파이호스트이름\공유폴더이름을 입력하고 마침을 클릭합니다.
12.3. 이제 NAS가 Z 드라이브가 되었습니다.
13. SMB 휴지통 만들기
NAS에 있는 파일을 지우면 ‘완전히 삭제하시겠습니까?’라는 창이 뜹니다. PC의 휴지통으로 들어가지 않고 영구삭제 된다는 뜻입니다. 이에 대한 대안으로 Samba의 휴지통 기능을 이용할 수 있습니다.
/etc/samba/smb.conf를 수정하겠습니다.
휴지통 사용을 원하는 폴더 설정 부분에 아래 코드를 추가합니다.
vfs objects = recycle
recycle:repository = .recycle_bin
recycle:keeptree = yes
recycle:versions = yes
recycle:exclude = *.tmp,*.temp,*.TMP,*.TEMP, ~$*
recycle:excludedir = .recycle_bin, /tmp, /temp, /TMP, /TEMP
[Line 2 recycle:repository]
recycle:repository = 휴지통으로 사용할 폴더 경로
예) recycle:repository = .recycle_bin라고 쓰면 공유폴더/.recycle_bin이 휴지통이 됨.
[Line 3 recycle:keeptree]
recycle:keeptree = yes이면 삭제된 폴더/파일의 트리(디렉토리) 경로를 유지. 폴더 삭제 시 폴더 내용물도 휴지통으로 이동됨.
recycle:keeptree = no이면 삭제된 폴더/파일의 트리(디렉토리) 경로를 유지하지 않음. 폴더 삭제 시 폴더 내용물 영구삭제됨.
[Line 4 recycle:versions]
recycle:versions = yes이면 같은 이름의 파일이 휴지통에 여러 번 저장될 경우 각각을 유지.
[Line 3 recycle:exclude]
recycle:exclude = 휴지통에 버리지 않을 파일 목록
*.확장명으로 작성하면 해당 확장명을 갖는 파일을 지워도 휴지통에 들어가지 않습니다.
그 외에도 * 기호를 사용하여 특정 문구로 시작하는/마치는 파일명의 파일들을 제외할 수 있습니다.
[Line 5 recycle:excludedir]
recycle:excludedir = 휴지통으로 사용할 폴더 경로, 그 외 휴지통에 버리지 않을 폴더 목록
참고로 이 목록에 휴지통으로 사용할 폴더 경로를 넣지 않으면 그 NAS는 영구삭제가 불가능해집니다.
14. 글 마무리
원래는 포트포워딩도 해서 외부 접속이 가능하게 하려고 했는데, Windows는 SMB 접속할 때 포트 번호를 입력할 수 없게 되어 있군요(: 기호도 먹히지 않음). 갤럭시의 ‘내 파일’에서는 포트 번호를 입력할 수 있어서 외부 접속이 가능하긴 한데, 저는 PC에서 더 많이 사용할 것 같아서 다른 방법을 찾아봐야겠습니다.
제 글을 읽어 주셔서 감사합니다. 다음에 만나요!
15. 참고 자료
1) coucou3. 2020. “자작 NAS (5) - 우분투 논리볼륨 추가하기”, commit;. (2025. 01. 04. 방문). https://everycommit.tistory.com/5
2) coucou3. 2020. “자작 NAS (6) - 내부 파일 공유 환경 구축 2(Ubuntu - Windows SMB)”, commit;. (2025. 01. 04. 방문). https://everycommit.tistory.com/6
3) Andrew Tridgell. n. d. “smb.conf”, Samba 누리집. (2025. 01. 04. 방문). https://www.samba.org/samba/docs/4.9/man-html/smb.conf.5.html
4) 위키독스 작성자. n. d. “11-04 samba 휴지통 기능 및 파일숨김”, 위키독스. (2025. 01. 04. 방문). https://wikidocs.net/253914
5) h_json. 2024. “[Linux] 14. 사용자 그룹 조회, 생성, 수정, 삭제”, 앞으로 나아가는 프로 개발자. (2025. 01. 04. 방문). https://apro-developer.tistory.com/82
6) pi_rock. 2015. “Samba share only writable when chown for specific user set”, StackExchange. (2025. 01. 04. 방문). https://askubuntu.com/questions/661907/samba-share-only-writable-when-chown-for-specific-user-set
7) 이유없는 존재. 2021. “우분투 HDD의 여유 공간에 파티션 추가하고 사용하기”, NOBODY. (2025. 01. 04. 방문). https://blog.naver.com/PostView.naver?blogId=codeknight2&logNo=222450145041
8) 민덕. 2020. “[Samba] 우분투 Samba 네트워크 공유 폴더 구축”, 민덕이의 개발노트. (2025. 01. 04. 방문). https://minddong.tistory.com/45
9) Vivek Gite. 2021. “How to configure Samba to use SMBv2 and disable SMBv1 on Linux or Unix”, nixCraft. (2025. 01. 04. 방문). https://www.cyberciti.biz/faq/how-to-configure-samba-to-use-smbv2-and-disable-smbv1-on-linux-or-unix/
10) dev_Shawn. 2023. “[Linux] Ubuntu에서 계정 생성 & 삭제 하기”, dev_shawn.log. (2025. 01. 04. 방문). https://velog.io/@shawnhansh/Linux-Ubuntu에서-계정-생성-삭제-하기
11) 인파. 2022. “🐧 리눅스 파일 & 디렉토리 권한 (소유권 / 허가권 / 특수권한), Inpa Dev. (2025. 01. 04. 방문). https://inpa.tistory.com/entry/LINUX-📚-파일-권한-소유권허가권-💯-정리
12) 인파. 2022. “🐧 삼바(SAMBA) 설치 & 설정 방법 [리눅스 ↔ 윈도우]”, Inpa Dev. (2025. 01. 04. 방문). https://inpa.tistory.com/entry/LINUX-📚-삼바SAMBA-설치-설정-※-총정리
13) :: Teacher ::. 2016. “[SMB] Samba(삼바) smb.conf 설정값”, :: IT School ::. (2025. 01. 04. 방문). https://info-lab.tistory.com/2
14) gosu. 2023. “smb.conf”, rimgosu.log. (2025. 01. 04. 방문). https://velog.io/@rimgosu/smbconf
15) Viewing Sunset. 2019. “samba 계정 추가 및 변경 ~~”, Viewing Sunset. (2025. 01. 04. 방문). https://viewingsunset.tistory.com/99
16) Nikhil George 외 3명. 2022. “Samba config - failed to add entry for user - Raspberry Pi”, stackoverflow. (2025. 01. 04. 방문). https://stackoverflow.com/questions/73776123/samba-config-failed-to-add-entry-for-user-raspberry-pi
17) 창공. 2014. “Linux mount / umount (마운트 / 마운트해제)”, IT 지식창고. (2025. 01. 04. 방문). https://blog.naver.com/diceworld/220212713378
18) Christopher Díaz Riveros 외 3명. 2017. “fdisk: partition contains a ntfs signature. remove it?”, StackExchange. (2025. 01. 04. 방문). https://unix.stackexchange.com/questions/395950/fdisk-partition-contains-a-ntfs-signature-remove-it
19) ㅁ윤지ㅁ. 2020. “파티션(Partition) - Primary Partition, Extended Partition, Logical Partition”, SLOW but STEADY. (2025. 01. 04. 방문). https://yunjipark0623.tistory.com/entry/파티션Partition-Primary-Partition-Extended-Partition-Logical-Partition
20) TIM TROTT. 2012. “How To Enable Recycle Bin Like Functionality in Samba”, LONEWOLF ONLINE. (2025. 01. 04. 방문). https://lonewolfonline.net/linux-tips/enabling-recycle-bin-functionality-samba/