Linux 파일 속성 변경 도구: chattr 명령어 사용법

개요

chattr 명령어는 리눅스 第二확장 파일시스템(E2FS)에서만 사용 가능한 특수 파일 속성을 수정하는 도구이다. 이 명령어를 통해 파일의 다양한 특성을 제어할 수 있으며, 보안과 성능 측면에서 유용하게 활용된다.

명령어 형식

chattr [-RVf] [-v version] [mode] files...

기호 모드(Symbolic Mode)

속성 지정에는 세 가지 연산자를 사용한다:

  • + : 선택한 속성 추가
  • - : 선택한 속성 제거
  • = : 파일의 고유 속성으로 지정

사용 가능한 속성 문자는 aAcCdDeijsStTu이며, 각각 다음과 같은 의미를 가진다:

  • a (append only): 추가 전용 모드만 허용
  • A (no atime): 접근 시간(atime) 업데이트 비활성화
  • c (compressed): 커널 레벨 자동 압축
  • C (no copy-on-write): 쓰기 시 복사(CoW) 비활성화
  • d (no dump): dump 도구 백업 제외
  • D (sync dir): 디렉토리 변경 시 동기 쓰기
  • e (extent format): 확장 영역 사용 표시
  • i (immutable): 불변 파일 (변경/삭제 불가)
  • j (data journal): 데이터 저널링
  • s (secure delete): 안전한 삭제 (영역 제로화)
  • S (sync file): 파일 변경 시 동기 쓰기
  • t (no tail merge):尾部 병합 지원 안 함
  • T (top of hierarchy): 디렉토리 계층 구조顶端 표시
  • u (undeletable): 삭제 시 데이터 보존

읽기 전용 속성

다음 속성들은 lsattr(1)로 조회만 가능하며 chattr로 수정할 수 없다:

  • E: 압축 오류 표시
  • h: 대용량 파일 (2TB 이상)
  • l (indexed): 인덱스 디렉토리
  • N: inode 내 inline 데이터
  • X: 압축 데이터 직접 접근 가능
  • : 압축된 더러운(dirty) 파일

명령어 옵션

옵션설명
-R하위 디렉토리까지 재귀적으로 속성 적용
-V상세 출력模式 및 버전 정보 표시
-f대부분 오류 메시지 표시 안 함
-v version파일 시스템 버전 설정

주요 속성 상세설명

불변 속성 (i)

i 속성이 설정된 파일은 어떤 사용자도 수정할 수 없다. 파일 삭제, 이름 변경, 링크 생성, 데이터 쓰기가 모두 금지된다. 이 속성을 설정하거나 해제하려면 루트 권한 또는 CAP_LINUX_IMMUTABLE 기능이 필요하다.

접근 시간 비활성화 (A)

A 속성이 설정된 파일에 접근할 때 atime이 업데이트되지 않는다. 노트북 환경에서 불필요한 디스크 I/O를 줄이는데 효과적이다.

자동 압축 (c)

c 속성이 설정된 파일은 커널이 자동으로 압축하여 디스크에 저장한다. 읽을 때는 압축 해제된 데이터를 반환하고, 쓸 때는 압축 후 저장한다.

쓰기 시 복사 비활성화 (C)

copy-on-write 파일시스템에서 C 속성이 설정된 파일은 CoW 동작의 영향을 받지 않는다. btrfs 파일시스템에서 새로운 파일이나 빈 파일에 설정해야 한다. 디렉토리에 설정하면 해당 디렉토리에서 생성되는 새 파일이 No_COW 특성을 갖는다.

저널링 (j)

파일시스템이 data=ordered 또는 data=writeback 옵션으로 마운트된 경우, j 속성이 설정된 파일은 파일 데이터 자체를 쓰기 전에 ext3/ext4 저널에 먼저 기록한다. data=journal 옵션 사용 시에는 이미 모든 데이터가 저널링되므로 이 속성이 의미 없다. 설정/해제에는 CAP_SYS_RESOURCE 기능이 필요하다.

동기 쓰기 (S)

S 속성이 설정된 파일이 수정되면 변경 사항이 즉시 디스크에 동기 기록된다. 파일 단위의 sync 마운트 옵션과 동일하다.

안전한 삭제 (s)

s 속성이 설정된 파일이 삭제되면 해당 디스크 블록이 제로(0)로 덮어씌워진다.

복원 가능한 삭제 (u)

u 속성이 설정된 파일이 삭제되어도 파일 내용이 보존되어 복원이 가능하다.

디렉토리 계층 구조顶端 (T)

T 속성이 설정된 디렉토리는 Orlov 블록 할당자에게 해당 디렉토리가 계층 구조의 맨 상단에 위치함을 알려준다. /home 디렉토리에 설정하면 john과 mary 디렉토리가 별도의 블록 그룹에 배치되어 불필요한 디스크 섹터 접근을 줄일 수 있다.

제한사항

  • 현재主流 커널의 ext2, ext3, ext4文件系统는 c, s, u 속성을 지원하지 않음
  • j 옵션은 ext3/ext4 파일시스템에서만 유효
  • D 옵션은 리눅스 커널 2.5.19 이상에서만 사용 가능
  • 모든 파일시스템이 모든 속성을 지원하는 것은 아님 (btrfs, ext4, xfs 매뉴얼 참조)

사용 예시

예제 1: 삭제 불가능한 파일 생성

# 테스트 파일 생성
[root@server ~]# touch /tmp/testfile

# 파일 속성 확인
[root@server ~]# lsattr /tmp/testfile
---------------- /tmp/testfile

# 불변 속성 추가 (누구도 삭제 불가)
[root@server ~]# chattr +i /tmp/testfile

# 속성 변경 확인
[root@server ~]# lsattr /tmp/testfile
----i----------- /tmp/testfile

# 삭제 시도 (실패)
[root@server ~]# rm -f /tmp/testfile
rm: cannot remove '/tmp/testfile': Operation not permitted

예제 2: 불변 속성 해제 후 삭제

# 속성 제거
[root@server ~]# chattr -i /tmp/testfile

# 확인
[root@server ~]# lsattr /tmp/testfile
---------------- /tmp/testfile

# 파일 삭제
[root@server ~]# rm /tmp/testfile
removed '/tmp/testfile'

예제 3: 추가 전용 파일 생성

# 로그 파일에 추가 전용 속성 설정
[root@server ~]# touch /var/log/important.log
[root@server ~]# chattr +a /var/log/important.log

# 확인
[root@server ~]# lsattr /var/log/important.log
-----a---------- /var/log/important.log

예제 4: 디렉토리 전체에 재귀적 적용

# 특정 디렉토리 내 모든 파일에 불변 속성 적용
[root@server ~]# chattr -R +i /secure/data/

# 확인
[root@server ~]# lsattr -R /secure/data/

관련 명령어

파일시스템 속성 조회에는 lsattr 명령어를 사용한다:

lsattr [-RVadv] [files]
옵션설명
-R하위 디렉토리 재귀 조회
-V버전 정보 표시
-a.으로 시작하는 숨김 파일 포함 조회
-d디렉토리 자체의 속성만 표시
-v파일 버전 표시

결론

chattr 명령어는 리눅스 파일시스템의 고급 속성을控制하여 보안과 데이터 무결성을 강화할 수 있는 강력한 도구이다. 특히 immutable 속성은 중요한 파일을 실수나 외부 공격으로부터 보호하는 데 유용하게 활용된다.

태그: linux chattr filesystem ext4 immutable

7월 7일 21:38에 게시됨