Linux 스토리지 보안(2)
파일 시스템
파일 시스템 종류
| ext2 | ext3 | ext4 | xfs |
|---|---|---|---|
| 리눅스 옛날 버전 | CentOS 5.X에서 사용 | CentOS 6.x이상에서 사용 | 고성능 저널링 파일 시스템 |
ext2
- 리눅스 운영체제에 도입
- 디렉토리는 테이블 구조
- 파일 구조: 비트맵과 테이블
- 최대 파일 크기 : 16GB- 2TB
- 최대 파일 수 : $(10^9)^2$
- 최대 파일이름 길이: 255 bytes
- 최대 볼륨 크기: 2TiB ~ 32TiB
- 파일 시스템 권한: Posix
- 압축: 아니오(패치를 통해 사용 가능)
- 암호화: 아니오
ext3
- 디렉토리 구조: 테이블, hashed B-tree(dir_index 사용)
- 파일 구조: 비트맵(여유 공간), 테이블(메타 데이터)
- 블량 블록 구조: 테이블
- 최대 파일 크기: 16GiB - 2TiB
- 최대 파일수: 가변, 작성 시간에 할당
- 최대 파일이름 길이: 255 bytes
- 최대 볼륨 크기: 2TiB - 16TiB
- 파일시스템 권한: 유닉스 허가, ACLs, 임의 보안 특성(리눅스 2.6 이상)
- 압축: 아니오
- 암호화: 아니오(블록 장치 수준에서 제공됨)
- 파일시스템 특성: No-atime, append-only, synchronous-write, no-dump, h-tree(디렉토리), immutable, journal, secure-delete, top(디렉토리), allow-undelete
ext4
- 도입 운영체제: 리눅스 2.6.28, 2.6.19
- 디렉토리 구조: 링크드 리스트, hashed B-tree
- 파일 구조: Extents/Bitmap
- 블량블록 구조: 테이블
- 최대 파일 크기: 16TiB(4k 블록 파일시스템 기준)
- 최대 파일수: 40억(파일시스템 작성 시간에 지정됨)
- 최대 파일이름 길이: 256 바이트
- 포크 스트림: 아니오
- 파일시스템 권한: POSIX
- 압축: 아니오
- 암호화: 아니오
- 운영체제: 리눅스, 윈도우(ext2fsd 이용시)
- 파일시스템 특성: extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
xfs
- 도입 운영체제: IRIX 5.3
- 디렉토리 구조: B+ 트리
- 파일 구조: B+ 트리
- 최대 파일 크기: 8 EiB
- 최대 파일 이름 길이: 255 바이트
- 최대 볼륨 크기: 16 EiB
- 파일시스템 권한: Posix
- 압축: 아니오
- 암호화: 아니오(블록 장치 수준에서 제공)
- 운영체제: IRIX, 리눅스, FreeBSD(읽기 전용, 실험적인 쓰기 지원)
ext2
- 리눅스 운영체제에 도입
- 디렉토리는 테이블 구조
- 파일 구조: 비트맵과 테이블
- 최대 파일 크기 : 16GB- 2TB
- 최대 파일 수 : $(10^9)^2$
- 최대 파일이름 길이: 255 bytes
- 최대 볼륨 크기: 2TiB ~ 32TiB
- 파일 시스템 권한: Posix
- 압축: 아니오(패치를 통해 사용 가능)
- 암호화: 아니오
ext3
- 디렉토리 구조: 테이블, hashed B-tree(dir_index 사용)
- 파일 구조: 비트맵(여유 공간), 테이블(메타 데이터)
- 블량 블록 구조: 테이블
- 최대 파일 크기: 16GiB - 2TiB
- 최대 파일수: 가변, 작성 시간에 할당
- 최대 파일이름 길이: 255 bytes
- 최대 볼륨 크기: 2TiB - 16TiB
- 파일시스템 권한: 유닉스 허가, ACLs, 임의 보안 특성(리눅스 2.6 이상)
- 압축: 아니오
- 암호화: 아니오(블록 장치 수준에서 제공됨)
- 파일시스템 특성: No-atime, append-only, synchronous-write, no-dump, h-tree(디렉토리), immutable, journal, secure-delete, top(디렉토리), allow-undelete
ext4
- 도입 운영체제: 리눅스 2.6.28, 2.6.19
- 디렉토리 구조: 링크드 리스트, hashed B-tree
- 파일 구조: Extents/Bitmap
- 블량블록 구조: 테이블
- 최대 파일 크기: 16TiB(4k 블록 파일시스템 기준)
- 최대 파일수: 40억(파일시스템 작성 시간에 지정됨)
- 최대 파일이름 길이: 256 바이트
- 포크 스트림: 아니오
- 파일시스템 권한: POSIX
- 압축: 아니오
- 암호화: 아니오
- 운영체제: 리눅스, 윈도우(ext2fsd 이용시)
- 파일시스템 특성: extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
xfs
- 도입 운영체제: IRIX 5.3
- 디렉토리 구조: B+ 트리
- 파일 구조: B+ 트리
- 최대 파일 크기: 8 EiB
- 최대 파일 이름 길이: 255 바이트
- 최대 볼륨 크기: 16 EiB
- 파일시스템 권한: Posix
- 압축: 아니오
- 암호화: 아니오(블록 장치 수준에서 제공)
운영체제: IRIX, 리눅스, FreeBSD(읽기 전용, 실험적인 쓰기 지원)
- 파티션 종류 & 이름체계
- fdisk CMD : 2TB 이하
- gdisk CMD : 2TB 초과
- parted CMD : 2TB 초과
파티션 작업
- fdisk CMD
- fdisk -l (전체 디스크의 전체 파티션을 다 표시해줌)
- fdisk -l /dev/sda
- 1sector : 512 bytes
- size를 K, M, G, T, P로 구분 가능
절대로 운영체제 디스크를 건들면 안된다. 끔찍한 꼴을 볼 수 있다.
- 로지컬 파티션 : 5~15
파티션 아이디
- gdisk
- 8200 : Linux swap
- 8300 : Linux filesystem
- 8e00 : Linux LVM
- fd00 : Linux RAID
- fdisk
- 82 : Linux swap
- 83 : Linux filesystem
- 8e : Linux LVM
- fd : Linux RAID
파티션나누는 것을 명령어로 하고 싶다면 parted라는 명령어를 쓴다.
parted에서 맨마지막 저장공간까지 파티션 할당하고 싶다면 -1 or 100%를 하면 된다.
- 파티션 형식 변경
- parted /dev/sdb mklabel gtp 는 파티션 형식을 gtp로 바꾸겠다는 뜻임
- 파일 시스템 작업
- 파일 시스템 : 파일을 저장하고 관리하는 구조체계
- 파일 시스템 종류 : ext2, ext3, ext4, xfs (매뉴얼 페이지 보고 man 5 filesystems)
- ext = extention
- mkfs CMD 파일시스템 생성
- mkfs -t(타입) 파일_시스템_타입 디스크_경로 == mkfs.ext4
- 파일 시스템 타입: ext2~4, xfs
- 꼭 파일 시스템 타입을 붙여야한다. 안그러면 ext2로 만들어짐
- 마운트 작업
- fsck <==> scandisk/chkdsk
- fsck /dev/sda1 : 대화형 형태(고칠건지 아닌지 물어봄)
- 파일시스템 점검
- fsck : ext*와 xfs 파일 시스템 점검과 수정
- 옵션
- -f : 파일 시스템에 오류가 없더라도 강제로 점검
- -p : 에러 발생시 자동으로 복구
- -y : 모든 질문에 yes라고 대답
- -b : 수퍼 블럭을 이용한 복구
- 사용 예시
- fsck -t ext4 /dev/sda1
- fsck.ext4 /dev/sda1
- e2fsck /dev/sda
- 위의 세 명령어는 모두 똑같은 뜻을 지닌다.
- 옵션
- xfs_repair : xfs파일 시스템 점검
- fsck : ext*와 xfs 파일 시스템 점검과 수정
- 슈퍼블록과 실린더그룹
- 슈퍼 블록: 시스템 관리 정보가 위치한 블록(파일)
- 파일시스템 모니터링
- df
- du
- cockpit
1 2
systemctl enable --now cockpit.socket firefox https://localhost:9000 &
마운트 작업
빈폴더를 사용해서 장치의 내부를 볼 수 있게 하는 것
- 마운트 확인
- df -k / df -hT
- mount
- 마운트 관련 파일들
- /etc/mtab : 현재 마운트된 정보를 담는다 == mount 명령어
- /etc/fstab : 부팅시 마운트 할 만한 정보를 담음
fstab 파일 형식 :
마운트 자원 | 마운트 포인트 | 파일 시스템 종류 | 옵션 | dump 관련 설정 | 파일 점검 옵션 옵션 : default rw(read&write), auto(장애처리와 상관있음),
dump 관련 설정은 무시해도 됨 0이든 1이든 읽혀지지 않음
- 파일 점검 옵션
- 0 : 안함
- 자연수 : 마운트 전에 점검
- 수가 작을수록 우선순위가 높아짐(사용자거는 나중에 하는 것이 좋음)
- ** /etc/fstab에 작업후 부팅이 되지 않으면 sulogin prompt에서 루트 사용자 암호 입력
- 마운트 관련 명령어들
- mount [-t ext4] [-o OPTIONS] /마운트포인터
마운트 장치 on 마운트 파일 type 타입(마운트 옵션) 마운트 유무와 마운트 옵션을 확인할 때 많이 씀
- mount 장치이름 마운트포인트
- umount /마운트 포인트
- 마운트 해제
- 마운트는 빈 디렉토리에 해야한다.
- mount -a
- umount -a
- -a 옵션은 all이라고 생각하면 됨
- mount [-t ext4] [-o OPTIONS] /마운트포인터
[ex] mount -o ro /etc/fstab /oracle - 디폴트값에서 rw만 ro로
remount 옵션 : 마운트 할 때 옵션값을 바꾸고 싶으면 “mount -o remount,rw /testmount”하면 바뀜
blkid : UUID보기
systemctl daemon-reload 데몬을 다시 인식 : 바뀌엇기 때문에 파일에 제대로 들어있는지 확인해보기 위해 마운트 명령어를 쓰기도 한다
- fuser -cu /home 홈폴더를 쓰고 있는 프로세서를 볼 수 있음
fuser -ck /home 홈폴더 쓰는 사람 강제 추방
- umount 작업할 때는 umount 전에 해당 폴더에서 다른 폴더로 이동 하면 된다
[참고] target is busy - 사용중인 파일시스템을 umount 하는 경우
fuser -cu /home
wall ‘[warning]’ 여러번(2-30분 정도 기다려주기)
fuser -ck /home 사용자 정리
umount /home 하면 된다
[참고] vim 편집기 명령어 치는 법 일반모드에서 :! CMD치면 됨
- 기타 마운트
- CD 마운트
- 자동 마운트
1 2
cd /run/media/root/$LABEL ; ls cd ; umount /run/media/root/$LABEL
- 수동 마운트
1 2 3
mkdir -p /mnt/cdrom ; mount -t iso 9660 -o ro /dev/cdrom /mnt/cdrom cd /mnt/cdrom ; ls cd ; umount /mnt/cdrom
- ISO 파일 마운트
- mount loop 옵션 : 가상화에 쓰이는 옵션(가상장치에 맵핑)
- 무조건 수동 마운트
/mnt 폴더는 임시 마운트 폴더를 모아두기 위해 만들어짐
- mkisofs : iso 파일 만들기
1 2 3 4
mkisofs -o linux.iso /test mkdir -p /mnt/iso ; mount -t iso9660 -o ro,loop /test/linux.iso /mnt/iso cd /mnt/iso ; ls cd ; umount /mnt/iso
- USB flash drive
- USB FAT32 방식(옛날 방식) centos가 바로 인식
NTFS 윈도우도 쓰고 리눅스도 쓰는데에 지장이 없음(벗 프로그램 깔아야함)
- 자동 마운트
1 2
cd /run/media/root/$LABEL ; ls cd ; umount /run/media/root/$LABEL
- 수동 마운트
- 있는 장치이름 먼저 확인해주기 lsblk –fs 그 다음 새거 확인
1
mkdir -p /mnt/usb ; mount -t vfat /dev/sdel1 /mnt/usb
- NTFS
- -o iocharset=cp94 라는 옵션을 맞춰주면 한글 파일 만질 때 좋음(io 캐릭터셋)
- 선수 패키지
- yum -y install epel-release
- yum -y install ntfs-3g
- 자동마운트
1 2
cd /run/media/root/$LABEL ; ls cd ; umount /run/media/root/$LABEL
- 수동
1 2 3 4
lsblk # 이름 보기 mkdir -p /mnt/ntfs ; mount -t ntfs /dev/sde1 /mnt/ntfs cd /mnt/ntfs ; ls cd ; umount 등등
- RAM 디스크
다 쓰고 나면 빠져나와서 umount해주어야함
mkdir -p /mnt/ramdisk ; mount -t tmpfs
공유 폴더 만들기
- 공유 설정(etc/exports)/NFS 마운트
1
2
3
4
5
systemctl enable --now nfs-server
showmount -e 192.168.10.30
mkdir -p /mnt/nfs ; mount -t nfs 192.168.10.30:/share /mnt/share
cd /mnt/nfs ; ls
cd ; umount /mnt/ntfs
- cifs 마운트(윈도우 <-> 리눅스)
- CIFS 서버(윈도우)
전제조건 : 암호가 반드시** 필요함(윈도우 사용자)- 공유할 디렉토리 생성
- C:\share 2. 공유 서비스 설정
- ncpa.cpl > 고급 공유설정 변경 == systemctl enable –now nfs-server(리눅스) 3. 폴더 공유 설정
- C:\share 폴더 속성 > [공유]탭 > 고급공유 > 선택한 폴더 공유
- CIFS 서버(리눅스)
1 2 3
yum -y install cifs-utils samba-client smbclient -L 172.16.6.7 -U 사용자이름 -t cifs -o username=soldesk //172.16.6.1/share /mnt/cifs cd ; umount /mnt/cifs
- CIFS 서버(윈도우)