Linux에서 chattr 명령을 사용하는 방법

0
368
빨간색 노트북 배경에 Linux 터미널입니다.
팻마와티 아흐마드 자누리/Shutterstock

일반적인 읽기, 쓰기 및 실행 파일 권한과 함께 Linux 파일에는 파일의 다른 특성을 제어하는 ​​또 다른 속성 집합이 있습니다. 이를 확인하고 변경하는 방법은 다음과 같습니다.

권한 및 속성

Linux에서 파일에 액세스할 수 있는 사용자와 파일로 수행할 수 있는 작업은 사용자 중심의 집합에 의해 제어됩니다. 권한. 파일의 내용을 읽을 수 있는지, 파일에 새 데이터를 쓸 수 있는지, 스크립트 또는 프로그램인 경우 파일을 실행할 수 있는지 여부는 모두 해당 권한 집합에 의해 결정됩니다. 권한은 파일에 적용되지만 다른 범주의 사용자에 대한 제한과 기능을 정의합니다.

에 대한 권한이 있습니다. 소유자 파일의 그룹 파일 및 기타—즉, 처음 두 범주에 속하지 않는 사용자입니다. 당신은 사용할 수 있습니다 ls 명령 -l (긴 목록) 옵션을 사용하여 파일 또는 디렉토리에 대한 권한을 확인합니다.

Linux에서 chmod 명령을 사용하는 방법

관련된Linux에서 chmod 명령을 사용하는 방법

권한을 변경하려면 다음을 사용합니다. chmod 명령. 최소한 파일에 대한 쓰기 권한이 있거나 루트 사용자라면 할 수 있습니다.

파일 권한은 사용자 수준에서 권한을 부여하거나 제거하기 때문에 사용자 중심임을 알 수 있습니다. 대조적으로, 속성 파일 시스템 중심입니다. 권한과 마찬가지로 파일 또는 디렉토리에 설정됩니다. 그러나 일단 설정되면 모든 사용자에게 동일합니다.

속성은 권한과 별개의 설정 모음입니다. 속성은 불변성 및 기타 파일 시스템 수준 동작과 같은 특성을 제어합니다. 파일이나 디렉토리의 속성을 보기 위해 우리는 lsattr 명령. 우리가 사용하는 속성을 설정하려면 chattr 명령.

Linux의 inode에 대해 알고 싶었던 모든 것

관련된Linux의 inode에 대해 알고 싶었던 모든 것

권한 및 속성은 내부에 저장됩니다. 아이노드. inode는 파일 및 디렉토리와 같은 파일 시스템 개체에 대한 정보를 보유하는 파일 시스템 구조입니다. 하드 드라이브에서 파일의 위치, 생성 날짜, 권한 및 속성은 모두 해당 inode에 저장됩니다.

파일 시스템마다 기본 구조와 기능이 다르기 때문에 일부 파일 시스템에서는 속성이 다르게 동작하거나 완전히 무시될 수 있습니다. 이 기사에서 우리는 ext4 이것은 많은 Linux 배포판의 기본 파일 시스템입니다.

파일의 속성 보기

그만큼 chattr 그리고 lsattr 명령은 이미 컴퓨터에 있으므로 아무 것도 설치할 필요가 없습니다.

현재 디렉토리에 있는 파일의 속성을 확인하려면 다음을 사용하십시오. lsattr:

lsattr

디렉토리의 모든 파일에 대한 파일 속성 나열

점선은 설정되지 않은 속성의 자리 표시자입니다. 설정되는 유일한 속성은 e (범위) 속성. 이것은 파일 시스템 inode가 사용 중이거나 필요한 경우 사용할 것임을 보여줍니다.범위 하드 드라이브에 있는 파일의 모든 부분을 가리킵니다.

파일이 하나의 연속적인 하드 드라이브 블록 시퀀스에 보관되어 있는 경우 해당 inode는 파일을 저장하는 데 사용되는 첫 번째 블록과 마지막 블록만 기록하면 됩니다. 파일이 단편화되면 inode는 파일의 각 조각의 첫 번째 블록과 마지막 블록 번호를 기록해야 합니다. 이러한 하드 드라이브 블록 번호 쌍을 익스텐트라고 합니다.

이것은 가장 일반적으로 사용되는 속성의 목록입니다.

  • : 추가만. 이 속성을 가진 파일은 다음에만 추가할 수 있습니다. 여전히 쓸 수 있지만 파일 끝에서만 가능합니다. 파일 내의 기존 데이터를 덮어쓸 수 없습니다.
  • : 압축. 파일은 하드 드라이브에서 자동으로 압축되고 읽을 때 압축이 해제됩니다. 파일에 기록된 데이터는 하드 드라이브에 기록되기 전에 압축됩니다.
  • : 아니요 atime 업데이트. 그만큼 atime 파일에 마지막으로 액세스한 시간을 기록하는 inode의 값입니다.
  • : Copy-On-Write가 없습니다. 두 프로세스가 파일에 대한 액세스를 요청하면 동일한 파일에 대한 포인터가 제공될 수 있습니다. 파일에 쓰려고 시도하는 경우에만 파일의 고유한 복사본이 제공되어 해당 프로세스에 고유하게 만듭니다.
  • : 덤프가 없습니다. 리눅스 dump 명령은 전체 파일 시스템의 복사본을 백업 미디어에 쓰는 데 사용됩니다. 이 속성은 dump 파일을 무시하십시오. 백업에서 제외됩니다.
  • : 동기 디렉토리 업데이트. 디렉터리에 대해 이 속성이 켜져 있으면 해당 디렉터리에 대한 모든 변경 사항이 동기식으로, 즉 즉시 하드 드라이브에 기록됩니다. 데이터 작업을 버퍼링할 수 있습니다.
  • 이자형: 범위 형식. 그만큼 e 속성은 파일 시스템이 하드 드라이브에 있는 파일의 위치를 ​​매핑하기 위해 익스텐트를 사용하고 있음을 나타냅니다. 다음으로 변경할 수 없습니다. chattr. 파일 시스템의 작동 기능입니다.
  • : 불변. 변경할 수 없는 파일은 이름 바꾸기 및 삭제를 포함하여 수정할 수 없습니다. 루트 사용자는 이 속성을 설정하거나 설정 해제할 수 있는 유일한 사람입니다.
  • 에스: 보안 삭제. 이 속성이 설정된 파일이 삭제되면 파일 데이터를 보유하고 있던 하드 드라이브 블록을 0이 포함된 바이트로 덮어씁니다. 이것은 존중되지 않는다는 점에 유의하십시오. ext4 파일 시스템.
  • 에스: 동기 업데이트. 파일에 대한 변경 사항 S 속성 세트는 파일에 동기적으로 기록됩니다.
  • : 파일 삭제 u 속성 집합은 파일의 복사본을 만듭니다. 이는 파일이 오류로 제거된 경우 파일 복구에 유용할 수 있습니다.

파일 속성 변경

그만큼 chattr 명령을 사용하면 파일이나 디렉토리의 속성을 변경할 수 있습니다. 우리는 사용할 수 있습니다 + (세트) 및 - (unset) 연산자는 속성을 적용하거나 제거하는 것과 유사합니다. chmod 명령 및 권한.

그만큼 chattr 명령에는 = (세트만) 연산자. 이것은 파일이나 디렉토리의 속성을 명령에 지정된 속성으로만 설정합니다. 즉, 모든 속성 ~ 아니다 명령줄에 나열된 설정 해제.

추가 전용 속성 설정

텍스트 파일에 추가 전용 속성을 설정하고 이것이 파일로 수행할 수 있는 작업에 어떤 영향을 미치는지 살펴보겠습니다.

sudo chattr +a text-file.txt

텍스트 파일에 추가 전용 속성 설정

다음을 사용하여 추가 전용 비트가 설정되었는지 확인할 수 있습니다. lsattr :

lsattr text-file.txt

텍스트 파일의 속성 나열

그 편지 “a“는 속성이 설정되었음을 나타냅니다. 파일을 덮어쓰도록 합시다. 단일 꺾쇠 괄호 “를 사용하여 출력을 파일로 리디렉션>“는 파일의 모든 내용을 리디렉션된 출력으로 바꿉니다.

일부 텍스트 파일을 미리 로드했습니다. 로렘 입숨 자리 표시자 텍스트.

cat text-file.txt

텍스트 파일의 자리 표시자 텍스트

다음에서 출력을 리디렉션합니다. ls 파일에:

ls -l > text-file.txt
sudo ls -l > text-file.txt

추가 전용 텍스트 파일을 덮어쓰려고 합니다.

사용하더라도 작업이 허용되지 않습니다. sudo 명령.

두 개의 꺾쇠 괄호를 사용하는 경우 “>>” 출력을 리디렉션하려면 파일의 기존 데이터에 추가됩니다. 이는 추가 전용 텍스트 파일에 허용되어야 합니다.

sudo ls -l >> text-file.txt

텍스트 파일의 끝으로 출력 리디렉션

오류 메시지 없이 명령 프롬프트로 돌아갑니다. 파일 내부를 살펴보고 무슨 일이 일어났는지 봅시다.

cat text-file.txt

텍스트 파일의 내용 검사

리디렉션된 출력 ls 파일 끝에 추가되었습니다.

추가 전용 텍스트 파일에 추가된 새 데이터

파일에 데이터를 추가할 수는 있지만 이것이 우리가 변경할 수 있는 유일한 것입니다. 우리는 그것을 삭제할 수 없으며 루트도 할 수 없습니다.

rm text-file.txt
sudo rm text-file.txt

추가 전용 텍스트 파일 삭제 실패

불변 속성 설정

새 데이터가 추가되지 않는 파일을 보호하려면 immutable 속성을 설정할 수 있습니다. 이렇게 하면 데이터 추가를 포함하여 파일에 대한 모든 변경 사항이 방지됩니다.

sudo chattr +i second-file.txt
lsattr second-file.txt

텍스트 파일에 불변 속성 설정하기

“를 볼 수 있습니다.i“는 불변 속성이 설정되었음을 나타냅니다. 파일을 변경할 수 없도록 만들었기 때문에 루트 사용자도 이름을 변경할 수 없습니다(mv), 삭제(rm) 또는 여기에 데이터를 추가합니다.

sudo mv second-file.txt new-name.txt
sudo rm second-file.txt
sudo ls -l >> second-file.txt

변경에 저항하는 불변 파일

ext4의 보안 삭제에 의존하지 마십시오

지적했듯이 일부 운영 체제는 모든 속성을 지원하지 않습니다. 보안 삭제 속성은 ext 다음을 포함한 파일 시스템 제품군 ext4. 파일의 안전한 삭제를 위해 이것에 의존하지 마십시오.

이것이 작동하지 않는다는 것을 쉽게 알 수 있습니다 ext4. 우리는 설정합니다 s (보안 삭제) 속성은 텍스트 파일에 있습니다.

sudo chattr +s third-file.txt

텍스트 파일의 보안 삭제 속성 설정

우리가 할 일은 이 파일에 대한 메타데이터를 담고 있는 inode를 찾는 것입니다. inode는 파일이 차지하는 첫 번째 하드 드라이브 블록을 보유합니다. 파일에 일부가 포함되어 있습니다. 로렘 입숨 자리 표시자 텍스트.

올바른 하드 드라이브 위치를 읽고 있는지 확인하기 위해 하드 드라이브에서 직접 해당 블록을 읽습니다. 파일을 삭제한 다음 동일한 하드 다이빙 블록을 다시 한 번 읽습니다. 보안 삭제 속성이 적용되는 경우 0으로 채워진 바이트를 읽어야 합니다.

다음을 사용하여 파일의 inode를 찾을 수 있습니다. hdparm 명령 --fibmap (파일 블록 맵) 옵션.

sudo hdparm --fibmap third-file.txt

파일의 inode 찾기

첫 번째 하드 드라이브 블록은 18100656입니다. dd 읽도록 명령합니다.

옵션은 다음과 같습니다.

  • if=/dev/sda: 이 컴퓨터의 첫 번째 하드 드라이브에서 읽습니다.
  • bs=512: 512바이트의 하드 드라이브 블록 크기를 사용합니다.
  • 건너뛰기=18100656: 블록 18100656 이전의 모든 블록을 건너뜁니다. 즉, 블록 18100656에서 읽기를 시작합니다.
  • 개수=1: 데이터의 한 블록을 읽습니다.
sudo dd if=/dev/sda bs=512 skip=18100656 count=1

파일의 첫 번째 하드 드라이브 블록 읽기

예상대로 우리는 로렘 입숨 자리 표시자 텍스트. 하드 드라이브에서 올바른 블록을 읽고 있습니다.

이제 파일을 삭제하겠습니다.

rm third-file.txt

동일한 하드 드라이브 블록을 읽는 경우에도 데이터를 볼 수 있습니다.

sudo dd if=/dev/sda bs=512 skip=18100656 count=1

삭제된 파일이 사용하는 하드 드라이브 블록에서 데이터 읽기

다시 말하지만 보안 삭제를 위해 이것에 의존하지 마십시오. ext4.파일을 복구할 수 없도록 삭제하는 더 나은 방법이 있습니다.

관련된: Linux에서 파일을 안전하게 삭제하는 방법

유용하지만 주의해서 사용

파일의 속성을 설정하면 우발적인 재해에 영향을 받지 않을 수 있습니다. 파일을 삭제하거나 덮어쓸 수 없다면 꽤 안전합니다.

시스템 파일에 적용하고 Linux 설치를 보다 안전하게 만들고 싶다고 생각할 수 있습니다. 그러나 업데이트가 발행되거나 업그레이드가 적용되면 시스템 파일을 주기적으로 교체해야 합니다. 이러한 이유로 자신이 만든 파일에만 이러한 속성을 사용하는 것이 가장 안전합니다.

관련된: fail2ban으로 Linux 서버를 보호하는 방법