서버는 아무래도 CentOS가 검증되어있기 때문에 그걸로 가기로 했다.
필요한 기능이라면 ftp, samba, 미디어서버, WOL, 자동백업 정도
토렌트도 상당히 사용하니 토렌트서버도 하나 두고
그러고보니 집 IP가 유동IP기 때문에 DDNS도 설정해야한다.
마침 iptime 공유기를 사용하고 있다.
1. CentOS7 설치 및 기본 설정
우선은 OS를 설치해보자.
현재 SSD 하나에 HDD가 세 개인데, SSD에 리눅스를, HDD는 마운트 형식으로 사용하려 한다..
실수로 HDD를 SSD와 같이 LVM으로 묶어버려서 새로 포맷하는 불상사가 일어나긴 했지만…
설치하려는 드라이브에서 SSD만을 선택하고 파티션을 자동으로 잡아주면 인스톨러가 적절히 파티션을 나눠준다.
(보통 부트영역에 1MB, 스왑영역을 메모리 크기정도로 잡는 듯 하다.)
OS는 CentOS 7 minimal로 설치했다..
Everything(DVD) 버전도 상관없으나 필자의 파일 다운로드 환경이 썩 좋지 않아 용량이 작은 걸 내려받았다.
minimal은 말 그대로 minimal이기 때문에 설치 후 아무것도 되는게 없다.
우선 nmtui로 네트워크를 잡아준 다음 네트워크를 재시작하자.
DHCP를 쓰고싶은 경우에는 nmtui로 어댑터를 활성화시키기만 하면 된다.
더 복잡한 설정은 sysconfig 디렉토리에서 스크립트를 조금만 손보면 된다.
$ sudo nmtui # 어댑터 활성 / 설정 $ sudo systectl network restart $ ip addr # net-tools가 없어 ifconfig를 못할 때 유용
그리고 필요한 패키지들을 이것저것 설치해준다.
당장은 net-tools, APM(apache, php, mysql), vsftpd 등등
이건 무얼 하고자하느냐에 따라 다르니 취향에 맞게 설치해주면 된다.
그렇다 하더라도 fail2ban은 반드시 깔아주자. (로그인 실패 시 ip차단)
이를 깔지 않으면 journalctl -xe를 통해 무수한 brute-force 공격을 확인할 수 있을 것이다.
$ sudo yum install fail2ban $ sudo systemctl enable fail2ban # 부팅 시 자동실행 $ sudo systemctl start fail2ban # fail2ban 실행
그 밖에도 /etc/ssh/sshd_config를 수정하여 Root로의 로그인을 막고 포트를 변경하는 것도 좋을 것이다.
Port 22222 # 포트를 변경한 경우 반드시 방화벽도 열어줘야한다. PermitRootLogin no
2. HDD 파티션 설정
요새 핫한 파일 시스템들이 많이 있지만 그냥 적당한 걸 쓰기로 했다.
zfs를 좀 써보고싶었는데, 그거 할 시간은 없겠다싶어 패스했다.
ext4와 btrfs가 후보인데, 친구가 회사에서 btrfs로 스토리지 서버 운영을 하면서 욕을 좀 많이 하더라 (지금은 zfs를 쓴다)
그냥 맘고생 하지 말고 ext4로 밀기로 했다.
우선은 fdisk -l로 시스템에 연결된 스토리지를 탐색해보자. (/dev를 건드리기 때문에 sudo로 실행해야 한다.)
이것으로 스토리지 정보를 알 수 있다.
굳이 스토리지 정보를 확인할 필요는 없겠지만 이런 형식적인 확인 절차는 HDD 날리려다 SSD 보내버리는 사태를 막아주니 반드시 확인해주자.
Disk /dev/sda: 128.0 GB, 128035676160 bytes, 250069680 sectors Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
그 후에는 fdisk /dev/[storage] (e.g. /dev/sda)로 해당 스토리지에 파티션을 만들어주자.
포맷 대상은 sdb, sdc, sdd이다. (sda는 OS가 설치된 ssd)
일단 fdisk로 들어가면 다음과 같은 명령어들을 사용할 수 있다.
Command (m for help): m Command action d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id v verify the partition table w write table to disk and exit x extra functionality (experts only)
뭐… 적절히 사용해준다.
d 연타해서 파티션 있는걸 싹 지우고
g 눌러서 리눅스용으로 파티션 테이블 새로 만들어주고
n 눌러서 파티션을 새로 추가해준다.
필자는 파티션을 굳이 나눌 필요가 없어서 디폴트로 진행했다. (엔터만 연타)
w 눌러서 저장하고 나오면 된다.
마찬가지로 더 필요한 설정이 있다면 하고 나오면 된다.
[hooni@localhost ~]$ sudo fdisk /dev/sdd Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): d No partition is defined yet! Command (m for help): g Building a new GPT disklabel (GUID: 8C398EF8-BABB-404C-96B0-F0630FE04D97) Command (m for help): n Partition number (1-128, default 1): First sector (2048-3907029134, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-3907029134, default 3907029134): Created partition 1 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
3. HDD 포맷 및 마운트
2번은 파티션을 잡는게 다였으니, 이제 포맷을 해주어야 한다.
필자는 ext4로 포맷을 할거지만 경우에 따라서 다음과 같은 형식으로 포맷할 수 있다. (OS 기본제공 형식)
[hooni@localhost ~]$ mkfs. mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
다음 명령어로 포맷을 진행한다.
$ sudo mkfs.ext4 /dev/sdb1
sdb1은 sdb의 파티션 1을 의미한다. (직전 단계에서 만든 파티션)
다 끝나고 blkid로 확인해보면 포맷이 잘 돼있는걸 확인할 수 있다.
[hooni@localhost ~]$ sudo blkid ... /dev/sdb1: UUID="f363d944-b8ca-4e72-aca3-d7131d4b285b" TYPE="ext4" PARTUUID="5d205855-b09d-432b-81f5-9506aa8dfae2" /dev/sdc1: UUID="c5383490-6d48-4644-822b-1b5c12044432" TYPE="ext4" PARTUUID="b022ef2d-eea4-4825-a12e-3b47598eb7bc" /dev/sdd1: UUID="cd5ab246-9ce0-47e7-ae01-a68c2ab616c8" TYPE="ext4" PARTUUID="1b248742-2ed5-4b17-ac05-24f0f63eef33" ...
이제 mount 명령어로 마운트하거나, fstab에 등록해 자동 마운트를 설정하면 된다.
필자는 /etc/fstab을 다음과 같이 수정했다.
... # HDD Storage UUID=f363d944-b8ca-4e72-aca3-d7131d4b285b /storage/hdd1 ext4 defaults 0 0 UUID=c5383490-6d48-4644-822b-1b5c12044432 /storage/hdd2 ext4 defaults 0 0 UUID=cd5ab246-9ce0-47e7-ae01-a68c2ab616c8 /storage/hdd3 ext4 defaults 0 0
몰랐는데, 마운트과정에서 디렉터리를 자동으로 생성해주진 않더라.
디렉터리를 먼저 만들고 마운트해야 한다.
안그러면 다음과 같은 오류를 목격하게 된다.
[hooni@localhost /]$ sudo mount -a mount: mount point /storage/hdd1 does not exist mount: mount point /storage/hdd2 does not exist mount: mount point /storage/hdd3 does not exist
4. Samba 설치
당장 데이터를 좀 옮기고싶은데 ftp쓰기는 좀 그래서
samba로 윈도우에서 마운트해서 쓰게끔 설정했다.
이후 OwnCloud같은 걸로 연동이 되도록 해볼 생각이다.
필자의 경우 DDNS를 사용하는데다 공유기에서 포트포워딩까지 하니 외부에서 NAS samba로 접근을 못한다.
(윈도우의 경우 네트워크 스토리지를 마운트할 땐 무조건 samba 디폴트 포트:139, 445를 사용하게 되어 있다.)
ftp로 I/O할게 아니라면 웹 인터페이스가 절실하다.
일단 필자는 hdd1, hdd2, hdd3 세 디렉터리를 개방할거고,
hdd1은 guest에게 read only로, hdd2, hdd3는 user에게만 허용하도록 구성할 생각이다.
우선은 samba를 설치한다.
yum -y install samba samba-client
물론 /etc/samba/smb.conf에서 설정도 적절히 해준다. (아래는 예시이다)
[samba] comment = samba Share Directories path = /home/samba read only = no valid users = [유저] [게스트] public = yes writable = yes write list = [유저] create mask = 0777 directory mask = 0777
다 끝나면 방화벽을 뚫고 리붓하고 즐기면 된다.
$ sudo firewall-cmd --permanent --add-port=139/tcp $ sudo firewall-cmd --permanent --add-port=445/tcp $ sudo firewall-cmd --reload $ sudo systemctl enable smb $ sudo systemctl start smb
samba를 즐기기 위해서는 samba에 계정을 등록해야 한다.
참고로 OS에 계정을 등록한다는 게 아니다.
smbpasswd 명령어로 다음과 같이 계정을 등록할 수 있다.
$ sudo smbpasswd -a username
CentOS7의 경우 SELinux가 Samba 연결을 막는다.
chcon 커맨드를 통해 samba 접근용 디렉터리의 보안속성을 samba로 바꾸어주어야 한다.
(안그래도 보안에 취약한 NAS에 selinux를 꺼버리는 선택은 너무 위험하므로 chcon을 사용하자)
[hooni@localhost /]$ sudo chcon -t samba_share_t /storage/hdd* ... [hooni@localhost /]$ ls -Zal /storage/ 합계 12 drwxrwxrwx. 5 unconfined_u:object_r:samba_share_t:s0 root root 42 1월 9 05:00 . dr-xr-xr-x. 18 system_u:object_r:root_t:s0 root root 257 1월 9 09:33 .. drwxrwxrwx. 3 system_u:object_r:samba_share_t:s0 root root 4096 1월 9 04:45 hdd1 drwxrwxrwx. 3 system_u:object_r:samba_share_t:s0 root root 4096 1월 9 04:45 hdd2 drwxrwxrwx. 3 system_u:object_r:samba_share_t:s0 root root 4096 1월 9 04:46 hdd3
samba_share_t로 보안 속성을 바꾸고 나면 samba 접속이 잘 된다.