본문 바로가기

Linux/Commands Part

chattr lsattr

[chatrr과 lsattr]
※ 파일 속성(attribute) 변경 방법
윈도우에는 “읽기 전용 파일”이라고 해서 시스템에서 중요한 역할을 하면서 별로 변경될 일이 없는 파일들이 있다. 이러한 파일에는 읽지전용(read only) 속성(attribute)을 걸어 놓아 실수로 삭제되거나 변경되는 것을 예방할 수 있는데, 리눅스에서도 이러한 개념을 제공하고 있다.
리눅스에서는 chattr 이라는 명령어를 제공하여 보다 다양한 기능을 이용할 수 있다.
chattr은 “change attribute”의 약자로서 말 그대로 파일의 속성을 변경한다는 의미이다. 이 속성은 파일 시스템 차원에서 제어를 하는 것이기 때문에 서유권이나 퍼미션과는 관계없이 별도로 작동한다.
<사용 방법>
chattr +-= [ASacdisu] filename 또는 directory
+ : 지정한 옵션을 추가한다는 의미
- : 지정한 옵션을 삭제한다는 의미
= : 지정된 옵션을 초기화하여 설정한다는 의미
A : 파일에 대한 atime 즉 접근시간(Access time) 속성을 변경할 수 있다.
a : append(추가)만이 가능하다.
i : 가장 많이 사용되는 것으로 immutable의 으미로 파일의 추가, 변경, 삭제 등이 불가능하다.
[root@centos ~]# ls -al
합계 284
drwxr-x--- 18 root root 4096 10월 7 10:40 .
drwxr-xr-x 25 root root 4096 10월 9 16:10 ..
-rw------- 1 root root 1134 10월 7 09:45 .ICEauthority
drwx------ 3 root root 4096 10월 6 15:43 .Trash
drwx------ 3 root root 4096 10월 3 15:31 .adobe
-rw------- 1 root root 7716 10월 9 14:31 .bash_history
-rw-r--r-- 1 root root 24 1월 6 2007 .bash_logout
-rw-r--r-- 1 root root 191 1월 6 2007 .bash_profile
-rw-r--r-- 1 root root 176 1월 6 2007 .bashrc
...중간 생략...
# ls –al 확인해 볼 수 있는 내용 즉 파일 크기, 파일 이름, 소유권, 마지막 변경 일자 등이지만 실제로 파일의 마지막으로 읽은 시각(접근한 시각)등도 시스템 내부에서는 계속 업데이트 된다.
따라서 하루에 10만 명이 접속하는 어떤 유명한 웹 사이트의 index.html은 유저들이 사이트를 방문할 때마다 이 파일을 매번하게 될 것이다. 따라서 이 속성(A)을 추가하면 접근 시각은 업데이트 하지 않게 되어 불필요한 Disk I/O를 줄이게 되며 따라서 보안보다는 성능 튜닝과 더욱 관계가 있다.
atime은 아래와 같이 stat 명령어로 확인할 수 있다.
[root@centos ~]# stat /bin/ls
File: `/bin/ls'
Size: 93560 Blocks: 200 IO Block: 4096 일반 파일
Device: 303h/771d Inode: 127650 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-10-09 16:14:53.000000000 +0900
Modify: 2007-03-22 06:24:45.000000000 +0900
Change: 2008-10-06 16:51:08.000000000 +0900
chattr은 Remy Card라는 ext2 파일 시스템 개발자가 개발하였으며 이 명령어는 ext2나 ext3 파일 시스템에만 제대로 작동한다.
따라서 위와 같이 chattr를 이용하여 변경되지 말아야 할 중요한 파일에 대해 이 속성을 설정해 두면 유용할 것이다.
이를테면 계정을 추가, 삭제, 변경하거나 암호를 변경할 일이 없다면
# /etc/passwd
# /etc/shadow
위 두 개의 파일에 속성을 걸면 될 것이고, 중요한 데몬의 설정 파일에도 설정할 수 있다.
또한 이를 악용하여 공격자가 시스템에 침입한 후 백도어를 삭제할 수 없도록 파일에 설정해 두는 경우도 자주 있는데, 실제로 해킹당한 시스템에서 chattr과 관련되어 어떻게 사용하는지 알아보자.
루트킷 탐지 프로그램인 chkrootkit을 실행하여, 변조된 시스템 파일을 찾아 원본 파일로 대체하기 위해 아래와 같이 실행하였다.
여기에서 현재 디렉토리에 있는 ifconfig는 원본 파일이고 /sbin/ifconfig는 공격자에 의해 변조된 파일이다.
# mv ifconfig /sbin/ifconfig
mv : overwrite ‘sbin/ifconfig’, overriding mode 0755? y
mv : cannot move ‘ifconfig’ to ‘/sbin/ifconfig’: Operation not permitted
원본 파일로 대체하려고 하였으나 에러가 나면서 파일을 변경할 수 없는 것을 학인하였다.
# lsattr /sbin/ifconfig
suSiadAc------ /sbin/ifconfig
lsattr을 실행하니 해당 파일에 여러 속성이 설정되어 있는 것을 알 수 있다.
# chattr –suSiadAc /sbin/ifconfig
chattr 실행시 –를 이용하여 이 모드를 모두 해제하였다.
# mv ifconfig /sbin/ifconfig
mv: overwrite ‘/sbin/ifconfig’? y
#
이후 다시 mv를 시도하니 정상적으로 파일이 변경되었다.
이렇듯 백도어 파일을 찾아도 삭제하지 못하도록 이 속성을 설정해 두는 경우가 자주 있으니 혹 해킹을 당했다면 lsattr /bin/* 등으로 디렉토리 내 속성이 변경된 파일이 있는지 확인하기 바란다.