강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

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

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

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




 

리눅스에서 개별 파일에 대하여 각각의 개별 사용자들이 가질 수 있는 권한(허가권)의 종류에는 3가지가 있습니다.

 

 

 

 파일에 대한 권한(허가권)이라고 하면 우리는 대부분 퍼미션(permission)을 가장 먼저 생각하게 됩니다.

 

 

 

 하지만, 파일(디렉토리)이 가질 수 있는 허가권의 종류가 퍼미션만 있는 것이 아니라 퍼미션, 속성, 그리고 SetUID 이렇게 3가지가 있다는 것입니다.

 

 

 

 

 

ㅇ 파일의 권한(허가권)의 종류 (개별 파일마다 독립적으로 설정할 수 있는 개별 허가권)

 

 

 

- 퍼미션(permission)

 

- 속성(attribution)

 

- SetUID, SetGID, StickyBit

 

 

 

 

, 개별 파일마다 가질 수 있는 권한은 우리가 알고 있는 퍼미션이 전부가 아니라 속성이라는 것과 SetUID라는 것도 있다는 것을 반드시 알고 계셔야 합니다.

 

 

 

 

그리고 이번에는 속성(attribution)에 대해서 배우게 될 것입니다.

 

 

 

 

, 이런 경우를 한번 가정해 봅시다.

 

 

 

 시스템관리를 하다 보면 root권한으로도 삭제되지 않는 파일을 경험해 보셨을 것입니다.

 

 

 

 , 다음과 같은 경우 분명히 root로 파일을 삭제 하였음에도 불구하고 삭제가 되지 않는 경우가 있습니다.

 

 

 

 

[root@su250 sulinux]# id

uid=0(root)gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

[root@su250 sulinux]#

[root@su250 sulinux]# ls -l readme

-rw-r--r-- 1 root root 20026 2009-01-0323:32 readme

[root@su250 sulinux]#

[root@su250 sulinux]# rm -f readme

rm: cannot remove `readme': Operation not permitted

[root@su250 sulinux]#

 

위의 readme파일을 root로 삭제하려고 하였으나 보시는 바와 같이 “Operation not permitted”라는 메시지와 함께 삭제되지 않았습니다.

 

 

 

  여러분들께서도 위와 같은 황당한 경험을 한번쯤은 해보셨으리라 생각합니다.

 

 

 

  왜 그럴까요.

 

이 파일에는 삭제되지 못하도록 하는 파일속성이 설정되어있기 때문입니다.

 

 

 

 여기서 말하는 속성(attribution)이라는 것은 퍼미션과는 아무런 연관이 없습니다.

 

 

 

 , 퍼미션은 각각의 사용자가 누구냐에 따라서 허가를 하거나 하지 않거나를 결정하지만, 속성이라는 것은 사용자에 따라서 허용을 하거나 하지 않거나를 결정하는 것이 아니라 파일 자체에 대한 허가이기 때문입니다.

 

 

 

 이것을 잘 이해해야만 속성에 대해서 정확한 개념정리를 할 수 있습니다.

 

 

 

 

 

가끔씩 해킹을 당한 시스템 내에 이런 파일들이 존재하는 경우가 흔히 있습니다.

 

 

 

 이런 경우에 chattr lsattr명령어로 해당 파일에 설정되어있는 파일의 속성을 확인해 보시고 올바른 속성으로 수정하시면 됩니다.

 

 

 

 , 특정 파일에 대해여 속성을 설정하거나 제거할 때 사용하는 명령어가 우리가 이번 장에서 배울 chattr lsattr입니다.

 

 

 

 , 파일이나 디렉토리에 대하여 특정 속성(속성은 여러 가지가 있음.)을 부여하거나 제거할 수 있는 명령어가 chattr이고, 파일에 부여되어 있는 특정 속성을 확인하는 명령어가 lsattr입니다.

 

 

 

 

 

어떤 분들께서는 좀 황당하게 생각하실 수도 있을 것입니다.

 

 

 

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

 

 

 

 하지만, 분명히 말씀 드리지만 현명하고 똑똑하고 유능한 시스템관리자가 되려면 파일의 퍼미션외에도 속성에 대해서 정확하게 알아두셔야 합니다.

 

 

 

 필자가 지금 괜한 잔소리 하는 것이 결코 아닙니다.

 

 

 

 따라서 이번 장의 설명을 잘 읽고 이해하셔서 여러분들의 시스템관리에 실무적인 큰 도움이 되도록 하시기 바랍니다.

 

 

 

 

 

, 간단히 요약하겠습니다.

 

 

 

 chattr명령어는 파일과 디렉토리의 속성을 지정하는 명령어입니다.

 

 

 

  도스(MS-DOS)에서는 attrib라는 명령어로 파일의 속성을 지정하였던 것을 기억하시는 분이 계실지 모르겠습니다.

 

 

 

 리눅스에서는 chattr이라는 명령어로 파일과 디렉토리의 속성을 지정할 수 있습니다.

 

 

 

  여기서 말하는 속성(attribution)은 파일의 퍼미션(permission)과는 다른 것으로 다음과 같은 것들이 있습니다.

 

 

 

 

 

특정파일에 대해 삭제 및 변경, 추가 등을 불가능하게 한다든지, 추가는 되지만 삭제는 안되게한다든지하는 설정이 가능합니다.

 

 

 

  , 퍼미션(permission) ls명령어로 확인할 수 있는 것으로 파일의 읽기(read), 쓰기(write), 실행(execution)에 관한 표시를 하지만, 속성(attribution) lsattr로 확인할 수 있으며 파일의 변경과 접근,실행 등의 권한을 설정해둔 것입니다.

 

 

 

 

 

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

 

 

 

 

 

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

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

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

 

 

 

 

 + : 지정한 속성을 부여합니다.

 

 

 

  +기호가 사용되면 지정한 속성을 부여한다는 의미입니다.

 

 

 

 
 - :
지정한 속성을 제거합니다.

 

 

 

  -기호가 사용되면 부여된 속성을 제거한다는 의미입니다.

 

 

 

 
 = :
원래 파일이 가지고 있던 그 속성만을 유지하게 합니다.

 

 

 

 

 

여기서 설정 가능한 설정모드들은 “+-=[ASacDdIijsTtu]”가 있습니다.

 

 

 

 좀 복잡하지만 뒤에서 설명하도록 하겠습니다.

 

 

 

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

 

 

 

 

 

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

 

 

 

 

-f  :  대부분의 에러메시지를 출력하지 않습니다.

 

 

 

 

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

 

 

 

 

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

 

 

 

 

 

또한 chattr명령어에서 무엇보다 중요한 것은 각 속성을 정확하게 이해하는 것입니다.

 

 

 

 , chattr로 설정할 수 있는 파일(디렉토리)의 속성에는 다음과 같은 것들이 있습니다.

 

 

 

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

 

 

 

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

 

 

 

 

 

a 속성 (append  only)
해당 파일을 추가(append mode)만 할 수 있습니다.

 

 

 

 당연히 root만이 속성변경이 가능합니다.

 

 

 

 파일보안을 위해 주로 사용하는 속성입니다.

 

 

 

 

 

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

 

 

 

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

 

 

 

 

 

d 속성 (no dump)
이 속성이 설정된 파일은 dump프로그램(명령어)로 백업이 되지 않습니다.

 

 

 

 

 

i 속성 (immutable)
이 속성이 지정되어 있다면 해당파일의 변경, 삭제, 이름변경뿐 아니라 파일추가 및 링크파일도 만들 수 없게 됩니다.

 

 

 

 변경추가가 거의 없는 부팅관련 파일들에 설정하면 부팅이 되지 않는 문제로 인한 시스템장애를 줄일 수 있습니다.

 

 

 

 또한 a 속성과 함께 필자가 주로 사용하는 속성이기도 합니다.

 

 

 

  그리고 이 속성은 수퍼유저(superuser)권한으로만 부여할 수 있고 제거할 수 있습니다.

 

 

 

 

 

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

 

 

 

 따라서 삭제파일복구가 불가능하게 됩니다.

 

 

 

  

 

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

 

 

 

 

 

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

 

 

 

 , 사용자가 삭제되기 전의 내용을 요구하였을 때에 그 내용을 되살릴 수가 있습니다.

 

 

 

 

 

j속성 (data journalling)

저널링 파일시스템의 파일을 대상으로 설정하는 속성입니다.

 

 

 

  j속성은 오직 ext3타입으로 마운트된 파일시스템에 매우 유용한 속성입니다.

 

 

 

 

 

A속성 (no  atime  updates)

이 속성이 설정되어 있는 파일에 대하여 access가 발생하더라도 파일시스템의 파일정보에 저장되는 atime(atime record)가 갱신되지 않습니다.

 

 

 

 

 

D속성 (synchronous directory updates)

디렉토리에 설정하는 속성으로서 D속성이 설정된 디렉토리는 변경사항을 동기화 시킵니다.

 

 

 

 

 

 

T속성 (top of directory hierarchy)

이 속성이 부여된 디렉토리는 최상위 디렉토리로 인식되어 간주됩니다.

 

 

 

 

 

 

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

 

 

 

 

 

여기서 주의하실 점은 c속성, s속성, 그리고 u속성은 ext2파일시스템과 ext3파일시스템에서는 유효하지 않을 있다는 점입니다.

 

 

 

 속성에 대해서는 현재 많은 논란이 있는 중에도 개발진행 중에 있습니다.

 

 

 

 그리고 E속성, X속성, Z속성등과 같이 현재 개발 완료되었으나 실험적인 단계에 있는 속성들도 있습니다.

 

 

 

 결론적으로 속성이 매우 유용한 것은 틀림없기 때문에 개발 개선이 지속적으로 이루어지고 있다는 것입니다.

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,056 명
  • 현재 강좌수 :  35,908 개
  • 현재 접속자 :  213 명