코딩/라즈베리파이

라즈베리파이 없이 구형 컴퓨터에 NAS 만들기 with Ubuntu Server

드리프트 2022. 3. 15. 15:40
728x170

안녕하세요?

 

오늘은 기존에 쓰던 라즈베리파이와 OpenMediaVault를 버리고 Intel Pentium 구형 모델을 이용해서 나만의 NAS를 만들어 볼까 합니다.

 

OpenMediaVault는 데비안 시리즈 10(Buster), 11(BullsEye) 버전에서 작동하니까 Ubuntu Server에도 설치가 가능할 줄 알았는데 21.10 버전을 설치하니 안되더라고요.

 

sudo wget -O - <https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install> | sudo bash

 

우분투 SSH 터미널 창에서 위와 같이 입력하면 원래 설치되어야 하는데 아래와 같이 에러가 뜨네요.

 

Ubuntu Server 버전이라 그런 거 같습니다.

ubuntu-21.10-live-server-amd64.iso

 

그래서 우분투 옛날 버전을 설치하려고 하니 굉장히 귀찮아졌고 그냥 수작업으로 FTP, Samba, SSH Port 변경, Torrent 설치 등을 진행해 보려고 합니다.

 

 

SSH Port 변경

 

우분투 서버 설치할 때 꼭 OpenSSH를 선택해서 설치하십시오.

 

왜냐하면 서버는 모니터 필요 없이 본체만 24시간 켜놓고 작업은 원격으로 SSH 접속해서 해야 하기 때문입니다.

 

만약 OpenSSH를 설치하지 못하셨다면 아래와 같이 간단히 설치할 수 있습니다.

sudo apt install openssh-server

SSH 활성하는 아래와 같이 하시면 됩니다.

sudo systemctl enable ssh

SSH 서비스 시작은 아래와 같이 하시고요.

sudo systemctl start ssh

원격에서 테스트할 때는 아래와 같이 하시면 됩니다.

ssh user@server-name

or

ssh cpro95@192.168.29.137

포트 변경에 들어가 볼까요?

 

SSH 기본 포트는 22번입니다.

 

22번을 그냥 그대로 쓰시면 중국 쪽 해커들의 무지성 접속 시도가 계속된 걸 느꼈기 때문에 항상 저는 포트를 바꿔 쓰고 있습니다.

 

우분투에서의 SSH 설정 파일은 sshd_config 파일인데요.

 

보통 리눅스의 설정 파일은 /etc 폴더에 다 들어 있습니다.

 

한번 찾아볼까요?

find / -name "sshd_config" 2>/dev/null

 

마지막 줄에 보듯이 /etc 폴더 밑에 있네요.

 

이제 sudo로 root 관리자로 편집하겠습니다.

sudo vim /etc/ssh/sshd_config

해당 파일을 여시고 Port 22 나 #Port 22를 찾으면 됩니다.

 

#는 주석이라 인식 안되게 하는 거니까요.

 

Port 22를 Port 2002로 바꾸고 저장하고 나오시면 됩니다.

 

리눅스에서는 기본적으로 0에서 1023까지는 시스템 서비스가 사용하는 포트라서 되도록이면 1024번부터 65535번까지 쓰는 게 좋습니다.

 

실제 나의 시스템에서 쓰는 포트가 궁금하시면 아래와 같이 실행해 보시면 됩니다.

cat /etc/services

or

less /etc/services

or

more /etc/services

이제 포트도 바꿨으니까 ssh 서비스를 다시 시작해야 합니다.

sudo systemctl restart ssh

그러고 나서 원격 접속을 해제하시고 앞으로 접속할 때는 아래와 같이 포트를 지정해서 해야 합니다.

ssh cpro95@192.168.29.137 -p 2002

 

 

하드디스크 마운트 하기

 

우분투 서버를 NAS로 만들려고 하면 당연히 대용량 하드가 필요하겠죠.

 

그래서 저도 1TB, 500MB짜리 안 쓰는 대용량 하드를 설치했습니다.

 

라즈베리파이에서는 USB로 연결되기 때문에 속도나 주기적으로 언마운트되는 현상 때문에 짜증 났었는데요.

 

이제 펜티엄 PC에 설치했으니 아주 빠른 SATA 방식의 액세스 속도가 기대되네요.

 

그러면 우분투 시스템에서 나의 장치가 뭐가 있나 확인하는 명령어가 필요한데요.

 

이럴 때 쓰이는 게 바로 blkid입니다.

 

locate/print block device attributes라고 man page에 나옵니다.

 

sudo blkid

여기 보시면 저 같은 경우는 /dev/sda 가 1 테라 하드디스크이고, /dev/sdb1이 500메가 하드디스크입니다.

 

이걸 어떻게 아냐고요.

 

아래와 같이 실행해 보십시오.

sudo fdisk -l

여기 보시면 하드디스크 종류와 용량이 나오는데요.

 

/dev/sd* 만 잘 기억하시면 됩니다.

 

이제 blkid에서 얻은 정보로 다시 넘어가 보면 우리가 필요한 건 UUID 정보와 파티션이 ext4인지 ext3인지 exfat인지 NTFS인지가 중요한데요.

 

최근 exfat 파일 시스템이 마이크로소프트의 대인배 같은 행동으로 오픈소스가 되어 리눅스에서도 완벽하게 exfat 파일 시스템을 쓸 수 있습니다.

 

exfat이 좋은 점은 맥에서도 쓸 수 있기 때문입니다.

 

mkfs.exfat으로 하드디스크를 재 포맷하는 걸 추천드리나, 저 같은 경우에는 자료가 너무 많아서 그냥 ext4나 ext3 방식으로 쓰기로 했습니다.

 

그럼 그다음으로 진행해야 할게 하드디스크를 마운트 하는 위치인데요.

 

윈도즈에서는 하드디스크는 C드라이브, D드라이브 이런 식으로 사용하지만 유닉스 계열에서는 하나의 디렉터리로 인식합니다.

 

그래서 보통 /mnt라는 폴더가 각 리눅스 버전에서는 존재하죠

 

그래서 다음과 같이 우리가 마운트 할 하드의 마운트 디렉터리를 만들도록 하겠습니다.

 

sudo mkdir /mnt/ext3_disk
sudo mkdir /mnt/ext4_disk

디렉토리 이름은 본인이 정하시면 되고요.

 

저는 위와 같이 ext3 파티션인지 ext4 파티션인지에 따라 이름도 이렇게 지었습니다.

 

그럼 마운트 해야 하는데요.

 

수작업으로 mount를 이용해서 마운트 할 수 있습니다.

sudo mount -t ext4 /dev/sda /mnt/ext4_disk

위와 같이 하시면 /dev/sda 하드디스크를 /mnt/ext4_disk 폴더에 ext4 타입으로 마운트 하게 됩니다.

 

이 방법이 안 좋은 점은 시스템이 재부팅됐을 때마다 다시 해줘야 하거든요.

 

그래서 시스템이 부팅될 때 마다 자동 마운트가 되게 하는 프로그램이 있습니다.

 

바로 fstab이란 서비스인데요.

 

/etc/fstab 파일을 열어보시면 됩니다.

sudo vim /etc/fstab

 

저 같은 경우에는 위와 같이 # 을 둬서 구분했고요.

 

UUID는 아까 blkid에서 얻은 정보고, 마운트 포인트는 아까 만들어 뒀던 디렉터리이고 그리고 나머지는 쉽게 이해할 수 있을 겁니다.

 

그리고 defaults 0 2는 가장 많이 쓰이는 디폴트 옵션이니까 무조건 넣어주시고요.

 

저 같은 경우는 탭을 이용해서 띄어쓰기 했습니다.

 

예전에 그렇게 배웠던 게 얼핏 기억나기도 하고요.

 

이제 저장하고 나오시고 다시 부팅하시면 하드디스크가 자동으로 인식되어 있을 겁니다.

 

 

 

FTP 설정

 

리눅스 진영에서 가장 잘 쓰는 FTP 데몬은 바로 vsftpd입니다.

 

아래와 같이 설치하겠습니다.

sudo apt install vsftpd

 

이제 vsftpd 데몬을 항상 실행하게끔 해야 하는데요.

 

아래와 같이 하시면 됩니다.

sudo systemctl start vsftpd

sudo systemctl enable vsftpd

이제 설정 파일을 건드려야 하는데요.

 

먼저 백업 파일을 저장해 놓겠습니다.

 

만약 에러가 생기면 백업파일을 원본에 덮어쓰면 되거든요.

sudo cp /etc/vsftpd.conf  /etc/vsftpd.conf_default
sudo vim /etc/vsftpd.conf

설정 파일에서 중요한 게 몇 가지 있는데요.

# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO

익명 사용자가 FTP에 접속할 수 있는 권한인데요.

 

예전에는 이게 YES라고 되어 있어 FTP에 anonymous라고 치고 비밀번호는 보통 이메일을 치면 public 폴더에 접속이 가능했습니다.

 

그런데 개인 서버이기 때문에 이 부분은 No라고 하시는 게 좋을 듯합니다.

# Uncomment this to enable any form of FTP write command.
#write_enable=YES

이 부분은 FTP로 접속했을 때 쓸 수 있는 권한을 부여하는 건데요.

 

write_enable 앞에 있는 # 을 제거해서 권한을 YES로 만들겠습니다.

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022

이 부분도 앞에 #을 없애 주십시오.

 

그리고 맨 마지막에 있는

# Uncomment this to indicate that vsftpd use a utf8 filesystem.
#utf8_filesystem=YES

이 부분도 #을 없애 utf8 시스템으로 만들어 주시는 게 좋습니다.

 

다음으로 ftp와 samba를 사용할 사용자를 추가해 보겠습니다.

sudo useradd -m testuser

sudo passwd testuser

testuser라는 이름 말고 본인만의 이름을 지으면 됩니다.

 

저는 ftpuesr라고 지었습니다.

 

이제 /etc/passwd 파일을 보시면 아래와 같이 나오는데요.

 

ftpuser의 기본 홈 디렉터리로 /home/ftpuser라고 되어 있습니다.

 

이제 이걸 /mnt로 바꿀 예정인데요.

 

sudo vim /etc/passwd

 

위와 같이 sudo 명령어로 아래와 같이 고치시기 바랍니다.

 

그래야만 ftpuser로 로그인하면 /mnt 폴더로 바로 가기 때문입니다.

물론, ftp 프로그램에서 디폴트 원격 폴더를 따로 지정해 줘도 됩니다.

sudo service vsftpd restart

위와 같이 재 시작해주시고 아래처럼 테스트해보십시오.

 

FileZilla라는 FTP 전용 프로그램으로 접속해 본 결과 위와 같이 바로 /mnt 폴더로 이동하게 되었습니다.

 

이제 FTP도 완성되었네요.

 

 

 

Samba 파일 시스템 설정

 

 

이제 삼바 파일 시스템을 리눅스에 설치할 건데요.

 

먼저 관련 프로그램을 설치해야 합니다.

sudo apt-get install samba

어디에 설치되었는지 한번 볼까요?

whereis samba

이제 samba 설정 파일을 수정해 보겠습니다

sudo vim /etc/samba/smb.conf

다른 설정은 건드릴 필요 없이 위와 같이 마지막 행에 추가하시면 됩니다.

 

mysamba는 제 삼바 셰어의 이름입니다.

 

네트워크상에서 삼바 서버 이름이 mysamba로 보일 겁니다.

 

 

제 맥에서 Finder 상에 나타난 게 위와 같은 스샷입니다.

 

mysamba라고 보이네요.

 

그리고 그 아래 쓰실 때는 첫 번째는 탭을 눌러서 쓰면 됩니다.

 

그리고 valid users에 허용할 사용자를 추가하시면 됩니다.

 

이게 없으면 아무나 접속 가능하게 됩니다.

[mysamba]
        comment = Samba on Ubuntu Server
        path = /mnt
        read only = no
        writeable = yes
        browsable = yes
        valid users = ftpuser, cpro95
        guest ok = no

그리고 중요한 게 하나 있는데, 바로 samba의 user에 대한 passwd를 따로 지정해줘야 한다는 겁니다.

 

왜냐하면 samba는 우분투 시스템의 유저 패스워드 정보를 사용하지 않기 때문이죠.

 

그래서 아래와 같이 ftpuser라는 유저 아이디에 대해 삼바 패스워드를 지정해 줘야 합니다.

 

sudo smbpasswd -a ftpuser

 

이제 삼바 설정도 끝났습니다.

 

 

스크린숏 보시면 작동이 잘 되고 있다고 확인하실 수 있을 겁니다.

 

윈도즈에서는 탐색기에서 내 PC를 고른다음 아래 빈칸에서 오른쪽 버튼 눌러서 네트워크 위치 추가를 누르시고 다음을 누른다음 사용자 지정 네트워크 위치 선택을 고른다음 또 다음버튼을 누르면 주소를 넣는 창이 보이는데요.

 

여기서 다음과 같이 치시면 됩니다.

\\\\192.168.29.137\\mysamba

윈도우즈에서는 역슬래시가 아마 원화표시로 보일 겁니다.

 

그리고 마지막에 mysamba라는 이름은 우리가 우분투 서버에서 설정한 그 이름이고요.

 

그다음 아이디와 비밀번호를 입력하시면 됩니다.

 

 

 

Torrent 설정 (transmission, 토렌트)

 

 

리눅스에서 많이 쓰이는 토렌트 서버는 transmission인데요.

 

아래와 같이 transmission-daemon을 설치해 보겠습니다.

sudo apt install transmission-daemon

이제 whereis 명령어를 통해 transmission-daemon이 설치된 경로를 찾아야 합니다.

 

버전에 따라서 설정 파일 위치가 틀릴 수 있기 때문입니다.

라즈 비안 OS에서는 /var/lib/transmission-daemon/info/settings.json 파일에 위치해 있었는데요.

 

Ubuntu Server 21.10에서는 /etc/transmission-daemon/settings.json에 있네요.

 

위 스크린숏 보시면 /etc/ 폴더 밑에 transmission-daemon 이 있다고 하고 /var/lib 폴더 밑에는 없다고 나와서 /etc 폴더 밑에 있다고 추측했습니다.

 

그런데 실제 /va/lib/transmission-daemon 폴더에 가보시면 설정 파일이 있는데 root만 접근하게 해 놔서 sudo 명령어로도 못 들어갑니다.

 

그래서 /etc/transmission-daemon/settings.json 파일을 뜯어고쳐야 하죠.

그럼 파일을 수정해서 transmission-daemon 설정을 고쳐볼까요?

{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": false,
    "blocklist-url": "<http://www.example.com/blocklist>",
    "cache-size-mb": 4,
    "dht-enabled": true,
    "download-dir": "/var/lib/transmission-daemon/downloads",
    "download-limit": 100,
    "download-limit-enabled": 0,
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/var/lib/transmission-daemon/Downloads",
    "incomplete-dir-enabled": false,
    "lpd-enabled": false,
    "max-peers-global": 200,
    "message-level": 1,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 1,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": false,
    "rename-partial-files": true,
    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-host-whitelist": "",
    "rpc-host-whitelist-enabled": true,
    "rpc-password": "{e843cc3d1779f610fca6c49280261e9824af5dcf24NTDLa2",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "transmission",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": true,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 100,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 100,
    "speed-limit-up-enabled": false,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-limit": 100,
    "upload-limit-enabled": 0,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true
}

뭔가 굉장히 복잡한데요.

 

중요한 부분만 고치면 됩니다.

 

  1. download-dir
"download-dir": "/var/lib/transmission-daemon/Downloads",

"download-dir" 은 토렌트가 다운로드 완료되었을 때 최종 보관되는 장소입니다.

 

저는 다음과 같이 1TB 하드로 설정했습니다.

 

"download-dir": "/mnt/ext4_disk/downloads",

 

  1. incomplete-dir
"incomplete-dir": "/var/lib/transmission-daemon/Downloads",
"incomplete-dir-enabled": false,

"incomplete-dir" 은 다운로드 중인 파일을 표기하는 옵션인데 저는 잘되고 있는지 확인하기 위해 설정하는 편입니다.

 

저는 다음과 같이 하드 temp 폴더로 지정했습니다.

"incomplete-dir": "/mnt/ext4_disk/temp",
"incomplete-dir-enabled":true,

 

 

  1. rpc 설정
    "rpc-password": "{e843cc3d1779f610fca6c49280261e9824af5dcf24NTDLa2",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "transmission",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": true,

rpc 설정은 우리가 웹이나 전용 프로그램으로 토렌트 상태를 보려고 접속하는 세팅 관련입니다.

 

일단 transmission-daemon 기본 포트는 9091입니다. 잘 외워 두시기 바랍니다.

 

rpc-username 은 기본적인 이름인 "transmission"으로 설정했습니다.

 

그리도 rpc-password에도 가장 일반적인 "1234567890"으로 설정합시다.

 

물론 본인 여러분의 비밀번호를 설정하십시오.

 

"rpc-password" : "1234567890" 이렇게 넣어 두시면 나중에 transmission-daemon 이 실행될 때 settings.json 파일에 있는 rpc-password 부분이 hash 숫자로 바뀝니다.

 

그리고 중요한 rpc-whiltelist 관련해서는 false 및 모든 주소로 바꾸어 놓읍시다.

 

제 설정입니다.

    "rpc-password": "1234567890",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "transmission",
    "rpc-whitelist": "*.*.*.*",
    "rpc-whitelist-enabled": false,

 

  1. watch-dir

NAS에 토렌트 서버를 돌리는 가중 중요한 이유는 토렌트 파일만 특정 폴더에 ftp로 업로드하면 자동으로 토렌트가 알아서 실행시키게 만드는 겁니다.

 

transmission-daemon에서는 watch-dir 이 그 기능을 합니다.

 

watch-dir 폴더에 torrent 파일만 업로드하면 알아서 다운로드를 시작합니다.

 

transmission-daemon의 watch-dir 기본 설정은 안되어 있어 다음과 같은 문구를 settings.json 마지막에 추가하시면 됩니다.

 

 "watch-dir": "/mnt/ext4_disk/temp",
 "watch-dir-enabled": true

 

  1. umask

umask란 트랜스미션이 다운로드한 화일의 읽기 권한을 설정하는 방식입니다.

 

기본은 "umask": 18, 이라고 되어 있는데 이렇게 되면 사용자가 transmission-daemon 만 지울 수 있게 됩니다.

 

그래서 누구나 읽기 가능하게 즉, -rwxrwxrwx (777) 이렇게 설정하는 방식인데

 

다음과 같이 umask를 0으로 설정하면 됩니다.

"umask": 0,

 

 

  1. 실행

이제 설정을 변경했으면 그게 반영되게 해야 하는데요.

 

transmission-daemon은 처음 시작할 때 /var/lib 폴더에 있는 설정 파일을 그대로 /etc/transmission-daemon 폴더에 덮어씁니다.

 

그래서 항상 /etc/transmission-daemon/settings.json 파일을 고치고 저장했으면 아래와 같이 transmission-daemon 이 실행되어 있을 때 reload를 해야 합니다.

 

sudo service transmission-daemon reload

 

reload를 해서 설정파일을 /etc/transmission-daemon 폴더 밑에 있는 settings.json 파일에 적용했으면

 

다음과 같이 transmission-daemon을 재 실행해서 위에서 입력한 암호가 hash 상태로 변했는지 확인해 봅시다.

 

sudo service transmission-daemon restart

 

설정파일을 다시 보시면 암호 부분이 hash로 되어 있고 그 외 적용한 세팅값이 다 잘 들어 가 있다는 걸 알 수 있을 겁니다.

 

이제 웹 UI에 접속해 보겠습니다.

 

주소는 http://192.168.29.137:9091입니다.

 

 

아까 설정한 아이디인 transmission 이랑 비밀번호를 넣으시면 됩니다.

설정이 잘 되어 있는지 아무 토렌트 파일로 직접 실행해 보시는 걸 추천드립니다.

 

저는 웹상에서 접속하는 방식 대신 transmission remote gui 란 앱을 쓰는데요.

 

이게 transmission-daemon의 데스크톱 GUI 앱입니다.

 

설정도 아까 했던 데로 하시면 쉽게 쓸 수 있을 겁니다.

 

토렌트 실행도 아주 잘되네요.

 

이상으로 Ubuntu Server를 이용한 나만의 NAS 제작에 대해 알아봤습니다.

 

 

그리드형