Overview
오늘은 chattr, lsattr 에 대해서 공부를 해보려고 한다.
먼저 속성(attribution)이란, 퍼미션과는 다른개념으로 퍼미션은 사용자에 따라서 특정권한을 부여하지만
속성(attribution)은 특정파일자체에 대한 허가이기 때문에, 파일을 삭제하지 못하게하는 속성이 걸려있는경우 파일소유자이더라도 해당파일을 삭제하지 못한다.
즉, 파일마다 특정속성을 부여하여 권한과는 다른개념으로 파일을 관리할수 있다.
lsattr 이란?
lsattr는 특정파일에 대한 속성을 확인고자 할 때 사용된다.
Chattr 이란?
chattr(change attribute)는 리눅스 파일시스템에 파일 보호한는 명령어로써 파일의 숨은 속성을 변경하여 파일 손상을 방지합니다.
명령어 사용법
- chattr [옵션] [+,-,=속성(설정모드)] [파일명]
옵션 설명
-R 디렉토리 아래의 파일 및 디렉토리 속성을 변경할 수 있습니다.
-V 자세한 출력모드를 제공합니다.
-v 지정된 파일에 버전을 설정할 수 있습니다.
속성 설명
- chattr 설정(+)하시거나 또는 제거(-)할 수 있습니다.
a : 해당 파일을 추가만 할 수 있다. root만이 속성변경이 가능하다. 파일 보안을 위해 주로 사용한다.
c : 이 속성이 설정된 파일은 커널에 의해 디스크상에 자동적으로 압축된 상태로 저장되어 있다. 파일을 읽을 경우에는 압축을 해제한 상태로 되돌려주며 쓰기시에는 디스크에 저장하기전에 파일을 압축한다.
d : 이 속성이 설정된 파일은 dump명령어로 백업되지 않는다.
i : 이 속성이 지정되어 있다면 해당파일의 변경, 삭제, 이름변경뿐 아니라 파일추가 및 링크파일도 만들수 없게된다. 변경추가가 거의 없는 부팅관련 파일들에 설정하면 부팅되지않는 문제로 인한 시스템장애를 줄일수 있다.
s : 이 속성이 설정된 파일은 파일삭제가 될 경우에 해당블럭이 모두 0으로 되어버리고 디스크에 다시 쓰기가 발생한다. 따라서 삭제파일복구가 불가능하게 된다.
S : 이 속성이 설정된 파일은 변경이 될 경우에 디스크동기화가 일어나는 효과를 그대로 누릴수 있다.
u : 이 속성을 가진 파일이 삭제가 되었을 경우에는 그 내용이 저장되며 삭제되기 전의 데이터로 복구가 가능해진다. 즉 사용자가 삭제되기 전의 내용을 요구하였을 때에 그 내용을 되살릴수 있따.
j : 저널링 파일시스템의 파일을 대상으로 설정하는 속성이다. 이 "j"속성은 오직 ext3타입으로 마운트된 파일시스템에 매우 유용한 속성이다.
A : 이 속성이 설정되어 있는 파일에 대하여 access가 발생하더라도 파일시스템의 파일정보에 저장되는 atime이 갱신되지 않는다.
D : 디렉토리에 설정하는 속성으로서 D속성이 설정된 디렉토리는 변경사항을 동기화시킨다. 그리고 이 D속성은 커널 2.5.19이후 버전에서만 사용될수 있다.
T : 이 속성이 부여된 디렉토리는 최상위 디렉토리로 인식되어 간주된다. 커널 버전 2.5.46이후 버전에서만 사용될수 있다.
옵션을 보듯이 속성은 주로 파일과 디렉토리에 허가되지 않은 사용자가 파일을 변경못하도록 설정하여 파일보안을 하기 위한 것이다.
예시(example)
ex1.) 특정 파일에 삭제, 변경, 내용 추가등을 불가능하게 설정해보자.(i)
- ' i ' 속성을 설정하면 해당파일에 대해서는 root 사용자라도 삭제, 변경, 추가가 불가능하다.
$ lsattr testfile
------------- testfile
$ chattr +i testfile
$ rm -f testfile
rm: cannot remove `testfile': Operation not permitted
$ lsattr testfile
----i-------- testfile
- 이와 같이 '+' 연산자를 이용하여 'i' 속성을 부여하였고, 'i' 속성이 부여된 파일은 삭제가 불가능하다.
- 이번엔 'i' 속성을 제거후 파일을 삭제해보자.
$ chattr -i testfile
$ lsattr testfile
------------- testfile
$ rm -f testfile
$ ls testfile
ls: testfile: No such file or directory
ex2.) 특정파일에 내용 추가만 할 수 있게 해보자.(a)
- 'a' 속성을 설정하면 특정파일에 대해서 변경,삭제는 허용되지 않으나 내용추가만 가능하게 된다.
$ cat testfile
ABCD
$ chattr +a testfile
$ lsattr testfile
-----a------- testfile
$ echo "EFGH" > testfile #"EFGH"로 내용 변경
-bash: testfile: Operation not permitted #파일내용변경은 허용되지 않음
$ echo "EFGH" >> testfile #기존내용에 "EFGH"만 추가
$ cat testfile #내용추가는 정상적으로 이뤄짐을 알수 있다.
ABCD
EFGH
- 즉, 이와같은 파일의 삭제 및 내용수정은 불가능하지만 추가만 가능한 옵션은 주로 로그파일에 사용된다.
* '>' 와 '>>' 란?
echo명령어는 입력받은 문자를 출력시켜준다. 즉, echo "abcd"라고 사용하게 되면 화면상에 "abcd"라는 문구열을 출력한다.
echo "abcd" > file1 이와같은 명령어를 사용하면 echo를 통해 출력된 "abcd"라는 문자열을 그대로 file1에 덮어씌운다.
즉, file1파일의 내용과는 상관없이 "abcd"문자만이 해당파일에 남는다. 하지만
echo "abcd" >> file1 이와 같이 ">>"를 써주게 되면 기존의 내용은 전혀 건들지 않고 "abcd"문자열을 해당파일의 내용 가장 마지막에 새로 추가하게된다. 즉, 로그파일처럼 생성된다고 생각하면 된다.
또한 기존에file1이 없는경우에는 파일을 생성후 해당내용을 쓰게 된다.
ex3.) '=' 연산자를 이용한 절대변경을 해보자.
- '=' 연산자를 이용하면 기존에 있던 속성은 무시하고 입력된 속성에 대해서만 설정하게 된다.
- 따라서 "="연산자만 주고 아무속성도 주지 않는다면 모든 속성을 제거한다는 뜻도 된다.
$ lsattr f
--S-ia------- f
$ chattr =c f
$ lsattr
--------c---- ./f
$ chattr = f #모든속성 제거
$ lsattr f
------------- f
ex4.) 속성 확인하기(lsattr) 해보자.
- 특정 디렉토리내에 있는 파일및디렉토리 속성 확인하기
# lsattr /test #test디렉토리내에 있는 파일들의 속성 확인
-----a------- /test/testfile
-----a------- /test/file01
-----a------- /test/newdir
- 특정디렉토리의 속성확인(-d옵션)
# lsattr -d /test
-----a------- /test
'Linux' 카테고리의 다른 글
리눅스 명령어 2. jq란? (2) | 2024.01.19 |
---|---|
리눅스 명령어 1. xargs란? (0) | 2024.01.16 |
CentOS 7 / 계정에 sudo 권한 주기 (0) | 2022.04.28 |
Django(Linux) (0) | 2022.02.16 |
LVM (0) | 2022.02.16 |