Post

Linux 스토리지 보안(2)

Linux 스토리지 보안(2)

파일 시스템

파일 시스템 종류

ext2ext3ext4xfs
리눅스 옛날 버전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 초과

파티션 작업

  1. 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 파일 시스템 점검과 수정
      • 옵션
        1. -f : 파일 시스템에 오류가 없더라도 강제로 점검
        2. -p : 에러 발생시 자동으로 복구
        3. -y : 모든 질문에 yes라고 대답
        4. -b : 수퍼 블럭을 이용한 복구
      • 사용 예시
        • fsck -t ext4 /dev/sda1
        • fsck.ext4 /dev/sda1
        • e2fsck /dev/sda
        • 위의 세 명령어는 모두 똑같은 뜻을 지닌다.
    • xfs_repair : xfs파일 시스템 점검
  • 슈퍼블록과 실린더그룹
    • 슈퍼 블록: 시스템 관리 정보가 위치한 블록(파일)
  • 파일시스템 모니터링
    • df
    • du
    • cockpit
    1
    2
    
      systemctl enable --now cockpit.socket
      firefox https://localhost:9000 &
    

마운트 작업

빈폴더를 사용해서 장치의 내부를 볼 수 있게 하는 것

  1. 마운트 확인
    • df -k / df -hT
    • mount
  2. 마운트 관련 파일들
    • /etc/mtab : 현재 마운트된 정보를 담는다 == mount 명령어
    • /etc/fstab : 부팅시 마운트 할 만한 정보를 담음

      fstab 파일 형식 :
      마운트 자원 | 마운트 포인트 | 파일 시스템 종류 | 옵션 | dump 관련 설정 | 파일 점검 옵션

    • 옵션 : defaultrw(read&write), auto(장애처리와 상관있음),

dump 관련 설정은 무시해도 됨 0이든 1이든 읽혀지지 않음

  • 파일 점검 옵션
    • 0 : 안함
    • 자연수 : 마운트 전에 점검
    • 수가 작을수록 우선순위가 높아짐(사용자거는 나중에 하는 것이 좋음)
    • ** /etc/fstab에 작업후 부팅이 되지 않으면 sulogin prompt에서 루트 사용자 암호 입력
  1. 마운트 관련 명령어들
    • mount [-t ext4] [-o OPTIONS] /마운트포인터

      마운트 장치 on 마운트 파일 type 타입(마운트 옵션) 마운트 유무와 마운트 옵션을 확인할 때 많이 씀

    • mount 장치이름 마운트포인트
    • umount /마운트 포인트
      • 마운트 해제
    • 마운트는 빈 디렉토리에 해야한다.
    • mount -a
    • umount -a
    • -a 옵션은 all이라고 생각하면 됨

[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치면 됨

  1. 기타 마운트
    • 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

공유 폴더 만들기

  1. 공유 설정(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 서버(윈도우)
      전제조건 : 암호가 반드시** 필요함(윈도우 사용자)
      1. 공유할 디렉토리 생성
      • 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
    
This post is licensed under CC BY 4.0 by the author.