메뉴 건너뛰기

리눅스 관련 모음

본문시작

2011.10.05 09:09

chattr, lsattr

조회 수 41937 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

국산 통나무 수공예 남원제기, 남원목기

자료가 도움이 되셨다면
혼수용품제수용품 필요시
남원제기 공식 홈페이지 http://남원제기.kr
남원목기 공식 홈페이지 http://otchil.kr
에서 구매 해 주세요
정성껏 모시겠습니다.
 

1장. 파일의 속성부여 및 속성제거하는 chattr명령어의 실무 이야기


서버관리를 하다보면 root명령어로도 삭제되지 않는 경우를 경험해 보셨을 것입니다. , 다음과 같은 경우 분명히 root로 파일을 삭제 하였음에도 불구하고 삭제가 되지않는 경우가 있습니다.

[root@command root]# ls -l testfile

-rw-r--r-- 1 root root 12 Mar 30 01:56 testfile

[root@ command root]#

[root@ command root]# rm -f testfile

rm: cannot unlink `testfile': Operation not permitted

[root@ command root]#

위의 testfileroot로 삭제하려고 하였으나 보시는 바와 같이 “Operation not permitted”라는 메시지와 함께 삭제되지 않았습니다. 여러분들께서도 위와 같은 황당한 경험을 한번쯤은 해보셨으리라 생각합니다. 왜그럴까요.

이 파일에는 삭제되지 못하도록 하는 파일속성이 설정되어있기 때문입니다. 가끔씩 해킹을 당한 서버내에 이런 파일들이 존재하는 경우가 흔히 있습니다. 이런 경우에 chattrlsattr명령어로 해당 파일에 설정되어있는 파일의 속성을 확인해 보시고 올바른 속성으로 수정하시면 됩니다.

, 이런 파일의 속성을 설정하고 제거할 수 있는 명령어가 chattr이며 파일에 설정되어있는 속성을 확인하는 명령어가 lsattr입니다.

어떤분들께서는 좀 황당하게 생각할 수도 있을 것입니다. 파일의 퍼미션(permission)에 대한 이해와 설정방법만 해도 복잡해 죽겠는데, 뭔 속성(attribution)이라는 것이 있어서 이렇게 힘들게 하나라고 말입니다.

하지만, 분명히 말씀드리지만 현명하고 똑똑하고 유능한 서버관리자가 되려면 파일의 퍼미션외에도 속성에 대해서 정확하게 알아두셔야 합니다. 필자가 지금 괜히 공포분위기 조성하는 것이 아니라 사실이기 때문에 힘주어 강조하고 있는 것입니다. 따라서 이번장의 설명을 잘 읽고 이해하셔서 여러분들의 서버관리 행로에 일취월장의 보탬이 되기를 바랍니다.

이쯤에서 잔소리는 각설하고 한마디로 요약하자면 chattr명령어는 파일과 디렉토리의 속성을 지정하는 명령어입니다. 도스(DOS)에서는 attrib라는 명령어로 파일의 속성을 지정하였던 것을 기억하실 것입니다. 리눅스에서는 chattr이라는 명령어로 파일과 디렉토리의 속성을 지정할 수 있습니다. 여기서 말하는 속성(attribution)은 파일의 퍼미션(permission)과는 다른 것으로 다음과 같은 것들이 있습니다.

특정파일에 대해 삭제 및 변경, 추가등을 불가능하게 한다든지, 추가는 되지만 삭제는 안되게한다든지하는 설정이 가능합니다. 쉽게 말씀드리면, 퍼미션(permission)ls명령어로 확인할 수 있는 것으로 파일의 읽기(read), 쓰기(write), 실행(execution)에 관한 표시를 하지만, 속성(attribution)lsattr로 확인할 수 있으며 파일의 변경과 접근,실행등의 권한을 설정해둔 것입니다.


chattr의 사용형식은 다음과 같습니다.

명령어위치 : /usr/bin/chattr

사용형식 : chattr [-RV] [-v 설정버전] [+-=설정모드] 대상파일들

chattr에서 사용하는 [설정모드]는 다음과 같습니다.

+ : 지정한 속성을 부여합니다. +기호가 사용되면 지정한 속성을 부여한다는 의미입니다. : 지정한 속성을 제거합니다. -기호가 사용되면 부여된 속성을 제거한다는 의미입니다. : 원래 파일이 가지고 있던 그 속성만을 유지하게 합니다.


그리고 chattr에서의 -RVv옵션에 대한 설명은 다음과 같습니다.

-R : 서브디렉토리이하까지 그 속성을 변경할 수 있습니다.

-V : 자세한 출력모드를 제공합니다.

-v version : 지정된 파일에 버전을 설정할 수 있습니다.

또한 chattr명령어에서 무엇보다 중요한 것은 각 속성을 정확하게 이해하는 것입니다.
, chattr로 설정할 수 있는 파일(디렉토리)의 속성에는 다음과 같은 것들이 있습니다.

아래 각 속성의 의미를 정확하게 이해하시고 여러분들께서 관리하고 계시는 리눅스서버의 파일보안을 위하여 chattr로 설정(+)하시거나 또는 제거(-)하실 수 있습니다
.

아래 속성의 의미를 파악하신 후에 이어지는 실제 사용예들을 보시기 바랍니다.

a 속성

해당 파일을 추가만 할 수 있습니다.

당연히 root만이 속성변경이 가능합니다. 파일보안을 위해 주로 사용하는 속성입니다.

c 속성

이 속성이 설정된 파일은 커널에 의해 디스크상에 자동적으로 압축된 상태로 저장이 되어 있습니다.

파일을 읽을 경우에는 압축을 해제한 상태로 되돌려주며 쓰기시에는 디스크에 저장하기 전에 파일을 압축합니다
.

d 속성


이 속성이 설정된 파일은 dump
로 백업이 되지않습니다.

i 속성

이 속성이 지정되어 있다면 해당파일의 변경,
삭제, 이름변경뿐 아니라 파일추가및 링크파일도 만들 수 없게 됩니다.
변경추가가 거의 없는 부팅관련 파일들에 설정하면 부팅이 되지않는 문제로 인한 시스템장애를 줄일 수 있습니다
.
또한 a 속성과 함께 필자가 주로 사용하는 속성이기도 합니다.


s 속성

이 속성이 설정된 파일은 파일삭제가 될 경우에 해당블럭이 모두 0
으로 되어 버리고 디스크에 다시 쓰기가 발생합니다.

S 속성 이 속성이 설정된 파일은 변경이 될 경우에 디스크동기화가 일어나는 효과를 그대로 누릴 수 있습니다.


u 속성

이 속성을 가진 파일이 삭제가 되었을 경우에는 그 내용이 저장이 되며 삭제되기 전의 데이터로 복구가 가능해집니다.

따라서 chattr로 파일과 디렉토리의 속성을 지정하는 주된 이유는 허가되지않은 사용자가 파일의 변경을 못하게하는 설정을 하여 파일보안을 하기위한 것입니다.

 

2장. 특정파일에 삭제, 변경, 추가등을 불가능하게 하는 속성부여하기



특정파일에 대하여 root로도 파일삭제,변경,추가를 불가능하게 설정을 하시려면 chattr명령어에 i속성을 해당 파일에 설정하시면 됩니다.
i
속성이 설정된 파일은 삭제뿐아니라 변경, 내용추가등이 전혀 불가능하게 됩니다
.

아래 예는 lsattrrc.local파일의 속성설정내용을 확인한 것입니다
.
보시는 바와같이 아무런 속성이 설정되어 있지 않습니다.

[root@host3 rc.d]# lsattr rc.local

-------------- rc.local

[root@host3 rc.d]#

다음은 이 파일에 i 속성을 설정한 것입니다.
설정한 후에 lsattr로 확인 해 보시면 rc.local파일에 i속성이 추가되어 있는 것을 확인하실 수 있을 것입니다
.
i
속성을 파일에 설정할 때에는 다음예와 같이 +i라고하시면 됩니다.

[root@host3 rc.d]# chattr +i rc.local

[root@host3 rc.d]#

[root@host3 rc.d]# lsattr rc.local

---i---------- rc.local

[root@host3 rc.d]#

이제 파일(rc.local)의 삭제를 해보도록 하겠습니다.
삭제를 시도한 결과 "명령이 허용되지 않음" 또는 영문으로 "Operation not permitted"라는 메시지와 함께 삭제가 되지않는다는 것을 확인하실 수 있을 것입니다.

[root@host3 rc.d]# rm -f rc.local

rm: cannot remove `rc.local': Operation not permitted

[root@host3 rc.d]#

그리고 이번예에서 부여한 rc.local파일의 i속성을 다음절에서 제거해 보겠습니다.
제거시에는 -를 붙여서 -i라고 하시면 설정된 i속성이 제거가 됩니다.
다음 예에서 이번에 설정한 i속성을 제거하는 예를 보시기 바랍니다.

 

3장. 특정파일의 삭제, 변경, 추가등을 불가능하게 하는 i속성 제거하기

top


이번에는 앞의 예에서 설정하였던 rc.local파일에 i속성을 제거해 보았습니다.
, 특정파일에 부여되어있는 i옵션을 제거할 때에는 -i를 사용하시면 됩니다.
chattr명령어에 -i옵션을 사용하시면 i속성이 제거가 됩니다.
아래의 결과를 보시면 설정되어 있던 i속성이 제거되었다는 것을 확인하실 수 있을 것입니다.

[root@host3 rc.d]# chattr -i rc.local

[root@host3 rc.d]#

[root@host3 rc.d]# lsattr rc.local

-------------- rc.local

[root@host3 rc.d]#

그리고 이제 다시 rc.local파일을 삭제하시면 아무런 속성이 지정되어 있지않기 때문에 삭제가 됨을 알 수 있습니다.

[root@host3 rc.d]# rm -f rc.local

[root@host3 rc.d]#

 


4장. 특정 파일에 대하여 파일삭제는 불가능하지만 파일에 내용을 추가하는 것은 가능하도록 하는 속성 부여하기


파일의 a속성이 설정되어있다면 파일삭제는 불가능하지만 파일에 내용을 추가하는 것은 가능해집니다.
따라서 이번에는 a 속성을 이용하여 파일에 추가는 가능하나 삭제는 되지않도록 속성설정을 하는 예를 보이도록 하겠습니다.

, 파일에 내용추가는 가능하도록 설정하고 삭제는 되지않도록하는 예를 보일 것이며 대상이 되는 파일은 리눅스의 로그파일에 설정하시면 유용할 것입니다.
필자의 경우에는 a속성의 설정은 주로 /var/log 디렉토리에 존재하는 로그파일들, 예를 들어 messages, secure, maillog등의 파일들에 이 속성을 지정해 두고 사용합니다.

, 그럼 /var/log/messages파일을 대상으로 a속성을 부여하여 로그는 계속 추가저장 되도록 설정하고 삭제는 불가능하도록 설정해 보도록 하겠습니다.
앞서도 설명드렸지만 여기서 설명되는 내용을 그대로 따라 하실 것 같아서 필자는 imsi라는 디렉토리를 따로 만들어서 /var/log/messages파일을 복사한 다음 a속성을 부여한 것이므로 여러분들께서는 이론적인 무장과 충분한 설정연습을 하신 후에 실제업무에 적용하시기 바랍니다.

먼저, messages파일을 확인 한 것입니다.

[root@host3 log]# ls -l messages

-rw-------1 rootroot65852 107 21:43 messages

[root@host3 log]#

다음은 chattr을 이용하여 a속성을 messages 파일에 부여한 것입니다. 그리고 부여된 결과를 확인하기 위해 lsattr로 속성설정내용을 확인한 것입니다.

[root@host3 log]# chattr +a messages

[root@host3 log]#

[root@host3 log]# lsattr messages

----a--------- messages

[root@host3 log]#

 

a 속성이 설정되어 있기 때문에 messages파일에 시스템로그는 계속 저장이 될 것입니다. , messages의 기능상의 문제는 전혀 없기 때문에 서버에서 발생하는 문제는 전혀 없습니다.

아래의 예는 실제로 /var/log/messages 파일에 a속성이 설정되어 있는 것으로 시스템 로그는 그대로 실시간으로 추가 저장이 되고 있음을 알 수 있습니다.

[root@host3 log]# tail -f messages

Oct7 16:49:19 host3 atd: atd startup succeeded

Oct7 16:49:19 host3 xfs: ignoring font path element

/usr/X11R6/lib/X11/fonts/cyrillic (unreadable)

Oct7 16:49:24 host3 modprobe: modprobe: Can't locate module char-major-226

Oct7 16:49:24 host3 modprobe: modprobe: Can't locate module char-major-226

Oct7 16:49:24 host3 kernel: Linux agpgart interface v0.99 (c) Jeff Hartmann

Oct7 16:49:24 host3 kernel: agpgart: Maximum main memory to use for agp memory: 96M

Oct7 16:49:24 host3 kernel: agpgart: Detected Intel 440BX chipset

Oct7 16:49:24 host3 kernel: agpgart: AGP aperture is 128M @ 0xe0000000

Oct7 16:49:24 host3 kernel: [drm] Initialized tdfx 1.0.0 20010216 on minor 0

Oct7 21:43:39 host3 sshd(pam_unix)[892]: session opened for user root by (uid=0)

 

그리고 다음과 같이 삭제를 하려고 할 경우에 "명령이 허용되지 않음" 또는 영문으로 "Operation not permitted"라는 메시지와 함께 삭제는 되지않음을 확인하실 수 있을 것입니다.

[root@host3 log]# rm -f messages

rm: cannot remove `messages': Operation not permitted

[root@host3 log]#

 

그리고 이번에는 a라는 속성을 제거하였습니다.a속성을 제거한 후에 lsattr로 속성제거를 확인 하였습니다.

[root@host3 log]# chattr -a messages

[root@host3 log]#

[root@host3 log]# lsattr messages

-------------- messages

[root@host3 log]#

 

 

5장. 특정 디렉토리내의 모든 파일과 디렉토리에 대하여 한번에 속성부여하고 확인하기



이번에는 특정 디렉토리내의 모든 파일들과 디렉토리들을 대상으로 한꺼번에 특정 속성을 설정해 보도록 하겠습니다. 다음과 같이 bible이라는 디렉토리가 있습니다.

[root@host3 home]# ls -l

합계 36

drwxr-xr-x38 biblebible4096918 18:08 bible

[root@host3 home]#

이 디렉토리에는 다음과 같이 수많은 파일들과 디렉토리들이 존재합니다. 아래 결과가 너무 많은 까닭으로 일부 결과를 생략하였습니다..

[root@host3 home]# ls -lR bible | more

bible:

합계 3732

-rw-r--r--1 rootroot80428272001 00-INDEX

drwxr-xr-x4 rootroot4096828 03:13 802

drwxr-xr-x2 rootroot4096828 03:13 8021q

-rw-r--r--1rootroot3699 11281999 BUG-HUNTING

-rw-r--r--1 rootroot12034952002 Changes

-rw-r--r--1 rootroot109089102001 CodingStyle

-rw-r--r--1 rootroot3483952002 Config.in

-rw-r--r--1 rootroot1119065952002 Configure.help

-rw-r--r--1 rootroot2434918 18:04 DIR_COLORS

-rw-r--r--1 rootroot2434918 18:04 DIR_COLORS.xterm

-rw-r--r--1 rootroot29594952002 DMA-mapping.txt

drwxr-xr-x2 rootroot4096828 03:13 DocBook

-rw-r--r--1 rootroot7990152001 IO-mapping.txt

-rw-r--r--1 rootroot1362952002 IRQ-affinity.txt

-rw-r--r--1 rootroot45282182000 LVM-HOWTO

-rw-r--r--1 rootroot1694952002 Makefile

-rw-r--r--1 rootroot92336918 18:04 Muttrc

-rw-r--r--1 rootroot932 12222001 README

-rw-r--r--1 rootroot34741 10182001 README.DAC960

-rw-r--r--1 rootroot7731212000 README.moxa

-rw-r--r--1 rootroot3848 10122001 README.nsp_cs.eng

이하 결과생략....

, 그럼 bible내에 존재하는 모든 파일과 디렉토리에 i속성을 설정해 보도록 하겠습니다.

[root@host3 home]# chattr -R +i bible

[root@host3 home]#

아래와 같이 lsattrbible디렉토리의 모든 파일과 디렉토리들에게 i속성이 설정된 것을 확인한 것입니다.
결과내용이 너무 많은 관계로 일부결과를 생략 하였습니다.

[root@host3 home]# lsattr -R bible | more

---i---------- bible/DIR_COLORS

---i---------- bible/DIR_COLORS.xterm

---i---------- bible/Muttrc

---i---------- bible/a2ps-site.cfg

---i---------- bible/a2ps.cfg

---i---------- bible/adjtime

---i---------- bible/aep.conf

---i---------- bible/aeplog.conf

---i---------- bible/aliases

---i---------- bible/aliases.db

---i---------- bible/anacrontab

---i---------- bible/at.deny

---i---------- bible/auto.master

---i---------- bible/auto.misc

---i---------- bible/bashrc

---i---------- bible/cdrecord.conf

---i---------- bible/crontab

이하결과 생략..

 

 

6장. 특정 디렉토리내의 모든 파일과 디렉토리에 부여되어있는 속성을 동시에 제거하기


다음은 앞의 예와는 반대의 경우로 특정디렉토리 내의 파일과 디렉토리의 속성을 한번에 제거하는 예입니다.
, 위에서 bible이라는 디렉토리내의 모든 파일과 디렉토리의 속성을 설정하였으므로 이 속성을 모두 한번에 제거해 보겠습니다.

[root@host3 home]# chattr -R -i bible

[root@host3 home]#

[root@host3 home]# lsattr -R bible | more

-------------- bible/DIR_COLORS

-------------- bible/DIR_COLORS.xterm

-------------- bible/Muttrc

--------------bible/a2ps-site.cfg

-------------- bible/a2ps.cfg

-------------- bible/adjtime

-------------- bible/aep.conf

-------------- bible/aeplog.conf

-------------- bible/aliases

-------------- bible/aliases.db

-------------- bible/anacrontab

-------------- bible/at.deny

-------------- bible/auto.master

-------------- bible/auto.misc

-------------- bible/bashrc

-------------- bible/cdrecord.conf

-------------- bible/crontab

-------------- bible/csh.cshrc

-------------- bible/csh.login

-------------- bible/dumpdates

-------------- bible/esd.conf

-------------- bible/exports

-------------- bible/fam.conf

이하결과 생략...

아래의 결과를 보시면 앞의 예에서 bible디렉토리내의 모든 파일과 디렉토리에 설정했던 i속성이 제거된 것을 확인하실 수 있습니다.

 


7장. 파일의 여러가지 속성을 한번에 설정하기


이번에는 chattr로 설정할 수 있는 여러가지 속성을 동시에 설정하는 예를 보도록 하겠습니다.

아래의 예는 file1이라는 파일에 a, i, s, S, u 속성 5개를 동시에 설정한 것입니다.

[root@host3 command]# ls -l file1

-rwx-----x1 rootroot4314004 107 21:58 file1

[root@host3 command]#

[root@host3 command]#

[root@host3 command]# lsattr file1

-------------- file1

[root@host3 command]#

[root@host3 command]# chattr +aisSufile1

[root@host3 command]#

[root@host3 command]# lsattr file1

suSia--------- file1

[root@host3 command]#

이처럼 각각의 속성은 독립적이기 때문에 여러개의 속성을 동시에 설정할 수 있습니다.

리눅스에는 보안설정을 하는 여러가지 방법이 있습니다. 이들 여러가지 방법중 파일보안을 위하여 chattr이 사용될 수 있습니다. 지금까지 설명드렸던 예들을 참조하여 여러분들께서 관리하시는 리눅스서버의 파일보안을 위하여 직접적용해 보시기 바랍니다.

이제 어느날 갑자기 파일을 삭제하려고 하였을 때에 “Operation not permitted”라는 메시지를 만나더라도 절대 당황하지 마시고 필자가 설명드린 내용을 참고하여 현명하게 대처하시길 바랍니다.

 
   

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
50 SELinux Lockdown Part One: SELinux Users 햇빛소년 2012.06.07 35455
49 selinux 관련 명령모음. 햇빛소년 2012.06.07 36673
48 DCC관련 명령어 모음 햇빛소년 2012.06.02 44296
47 - FQDN - 올바른 Hostname 설정하기. 햇빛소년 2012.06.02 33339
46 설치관련 DCC+razor2+pyzor how to ---[ spamassassin -D <test 2>debug ] file 햇빛소년 2012.05.31 32129
45 Red Hat / CentOS IPv6 Network Configuration 햇빛소년 2012.05.30 28484
44 cdcc 문서 햇빛소년 2012.05.30 33140
43 chmod 파일 퍼미션의 다양한 조건들.... 햇빛소년 2012.05.16 28990
42 iptables 삭제명령 햇빛소년 2012.05.15 71798
41 설치관련 스팸어쎄신(spamassassin)은 설치 후 service등록과 업데이트를 한번 더 해 줘야 한다. 햇빛소년 2012.05.10 30050
40 cpan 으로 설치힌 perl 모듈의 검색과 삭제... 햇빛소년 2012.05.10 30443
39 Starting spamd: Apr 29 16:41:34.934 [14162] warn: server socket setup failed, retry 1: spamd: could not chown 에러해결 햇빛소년 2012.04.29 32490
38 ClamAV 0.97.4 버전으로 새로 컴파일 하여 업데이트 한후 에러발생 해결... 햇빛소년 2012.04.29 29054
37 Apache 2.4.1 소스설치시 에러에 대한 해결 햇빛소년 2012.02.26 61386
36 specifies multiple packages 대처법 햇빛소년 2012.02.22 28302
35 convert: error while loading shared libraries: libMagick.so.10: cannot open file 햇빛소년 2012.02.20 30244
34 segmentation fault가 발생할 때 디버깅 방법 햇빛소년 2012.01.05 38740
» chattr, lsattr 햇빛소년 2011.10.05 41937
32 su 명령의 문제점 햇빛소년 2011.10.04 55113
31 윈도우에서 내 컴퓨터 ip주소 확인하기 햇빛소년 2011.06.20 38455
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10