지식
Linux
chattr · lsattr — 파일 속성으로 추가 보호
chattr로 리눅스 파일 속성(immutable, append-only, secure delete 등)을 제어하고, lsattr로 속성을 확인하는 방법, 보안 강화 실전 시나리오를 설명합니다.
지난 글에서 ACL로 사용자별 세밀한 권한을 설정하는 방법을 배웠습니다. 이번에는 권한 시스템과는 별개로 inode에 저장되는 파일 속성(attribute)을 제어하는 chattr와 lsattr를 다룹니다. 이 속성은 root조차 우회하기 어려운 보호를 제공합니다.
chattr란
chattr(change attribute)는 ext2/ext4/xfs 파일시스템의 inode에 저장되는 확장 속성을 변경합니다. 이 속성은 커널 레벨에서 파일 보호를 강제하므로, 소유자·권한과 무관하게 적용됩니다.
root도
+i(immutable) 속성이 붙은 파일을 수정·삭제할 수 없습니다. 먼저 속성을 해제해야 합니다.
주요 속성
lsattr — 속성 확인
# 단일 파일
lsattr /etc/resolv.conf
# ----i---------e-- /etc/resolv.conf
# ^--- i = immutable
# e = extent format (ext4 기본)
# 디렉터리 내용
lsattr /etc/
# 재귀
lsattr -R /etc/ssh/
# 디렉터리 자체 속성 (-d)
lsattr -d /etc/
chattr 사용법
# 속성 추가
sudo chattr +i file # immutable 추가
sudo chattr +a logfile # append-only 추가
sudo chattr +si file # secure delete + immutable
# 속성 제거
sudo chattr -i file
sudo chattr -a logfile
# 여러 속성 동시 제거
sudo chattr -ia file
# 재귀 적용
sudo chattr -R +i /etc/ssh/
실전 보안 시나리오
중요 설정 파일 잠금
# DNS 설정을 DHCP 등이 덮어쓰지 못하게 잠금
sudo chattr +i /etc/resolv.conf
# SSH 설정 보호
sudo chattr +i /etc/ssh/sshd_config
# 확인
lsattr /etc/resolv.conf
# ----i---------e-- /etc/resolv.conf
# 변경 시도
sudo rm /etc/resolv.conf
# rm: cannot remove '/etc/resolv.conf': Operation not permitted
로그 파일 추가 전용 보호
# 로그 파일을 추가만 허용 → 삭제·덮어쓰기 차단
sudo chattr +a /var/log/auth.log
sudo chattr +a /var/log/syslog
# 확인 (a = append-only)
lsattr /var/log/auth.log
# -----a--------e-- /var/log/auth.log
+a 속성이 있으면 악성코드나 침입자가 로그를 지워도 실패합니다. logrotate는 root 권한으로 실행되지만 +a 파일의 truncate는 +i와 달리 CAP_LINUX_IMMUTABLE 없이는 차단됩니다.
침입 후 공격자 활동 제한
공격자가 root를 획득해도 +i 속성이 걸린 파일은 수정할 수 없습니다. 단, 커널 모듈 로드 권한이 있으면 우회 가능하므로 심층 방어의 한 레이어로 이해해야 합니다.
# 중요 바이너리 보호 (패키지 업데이트 전 해제 필요)
sudo chattr +i /usr/bin/sudo
sudo chattr +i /usr/bin/su
속성의 한계
| 제한 사항 | 설명 |
|---|---|
| 파일시스템 의존 | ext2/ext4/xfs 지원, tmpfs/vfat 등 미지원 |
| cp/mv 미복사 | 복사 시 속성이 따라가지 않음 |
| 커널 권한으로 우회 | CAP_LINUX_IMMUTABLE 권한이 있으면 해제 가능 |
| 마운트 우회 | 디스크를 다른 OS로 부팅해 마운트하면 무력화 |
속성 보존 복사
# tar로 속성 보존 (--preserve=all은 ext attr 포함)
tar --preserve=all -czf backup.tar.gz /etc/
# rsync로 복사 시 속성 보존 옵션 없음 → 속성 별도 백업 필요
지난 글: ACL — getfacl·setfacl로 세밀한 권한 제어
다음 글: 불변 파일 — 시스템 파일을 침입자로부터 보호
읽어주셔서 감사합니다. 😊