나는 chattr +i filename
모든 사용자에 대해 파일을 읽기 전용으로 만드는 명령을 알고 있습니다. 그러나 문제는 를 사용하여 취소할 수 있다는 것입니다 chattr -i filename
.
시스템의 모든 사람이 파일을 읽을 수 있지만 누구도 쓸 수 없도록 만드는 방법이 있습니까? 심지어 루트도 아니고 돌아갈 방법도 없습니다(다시 쓸 수 있게 만드는 옵션 없음).
답변1
CD나 DVD로 굽습니다. 지울 수 있는 유형이 아닌 한 번 쓸 수 있는 유형입니다. 또는 다른 유형의 읽기 전용 장치입니다.
글쎄, 나는 당신이 소프트웨어 솔루션을 원한다고 생각하므로 여기에 몇 가지 아이디어가 있습니다. 루트에 대해서도 사용되는 시스템 호출 (*)chattr
을 비활성화하는 SELinux 규칙 세트를 만들 수 있습니다. 또 다른 가능성은 다음을 사용하는 것입니다.능력: 설정에는 기능이 +i
필요하므로 CAP_LINUX_IMMUTABLE
기능 경계 세트에서 모든 프로세스가 해당 기능을 포함하지 않도록 예약할 수 있으면 누구도 이러한 플래그를 변경할 수 없습니다. 하지만 init
이를 모든 프로세스에 적용하려면 지원이 필요합니다. 체계이것을 할 수 있다, 하지만 서비스별로 개별적으로 이루어져야 한다고 생각합니다.
(* ioctl
대체품일 수도 있습니다.)
그러나 이렇게 하면 일반 루트가 원시 장치에서 파일 시스템을 수정할 수 있으므로 debugfs
이를 방지하고 커널 수정(모듈 로드)도 방지해야 합니다. sysctl을 사용하여 모듈이 로드되는 것을 방지할 수 있지만 kernel.modules_disabled
원시 장치에 대한 액세스를 방지하는지는 확실하지 않습니다. 그리고 관련된 모든 구성 파일도 변경 불가능하게 만듭니다.
어쨌든 그 후에는 시스템 부팅 방식이 변경되는 것을 방지해야 합니다. 그렇지 않으면 누군가 위 제한 사항을 무시할 수 있는 커널을 사용하여 시스템을 재부팅할 수 있습니다.
답변2
당신이 원하는 것은필수 접근 제어. 이를 통해 커널이 루트가 아닌 경우에도 재정의할 수 없는 권한 집합을 지정할 수 있습니다. SELinux는 이러한 시스템으로 잘 알려져 있습니다.스머커또 다른 예는 세 번째 시스템인 AppArmor입니다. Linux에서는 구현이 다음과 같습니다.리눅스 보안 모듈, 기존 UNIX와 유사한 보안 모델 외부에서 액세스를 제어하기 위한 범용 도구입니다. 기존의 범용 시스템 외에도 특별한 목적을 위한 자체 시스템을 만들 수도 있습니다.
물론 루트는 전체 기능을 열거나 닫거나 파일에 대한 MAC 권한을 변경할 수 있으며 일부 시스템에서는 루트가 아닌 사용자에게 이러한 기능을 부여할 수도 있습니다. 단, 시스템에 따라 이 기능을 비활성화할 수 있습니다. 나는 SELinux와 Smack이 이것을 가능하게 한다는 것을 알고 있으며 모든 LSM이 이것을 가능하게 한다고 생각합니다. 일단 비활성화되면 기능을 복원하는 유일한 방법은 커널을 재부팅하는 것입니다. 그런 다음 사용자 액세스를 활성화하기 전에 부팅 프로세스에서 기능을 비활성화하기를 원할 것입니다. 커널과 부팅 프로세스가 안전한 경우 이러한 구성은 저장 매체를 물리적으로 제거해야만 (적어도 이론상으로는) 변경할 수 있습니다.
예를 들어 SMACK을 사용하는 경우 다음을 수행할 수 있습니다.
chsmack -a _ <file>
이는 읽기 또는 실행 액세스만 허용하고 쓰기는 허용하지 않는 특수 레이블 "_"을 갖도록 파일을 설정합니다. 이제 루트라도 이 파일에 쓸 수 없습니다(위에서 언급한 것처럼 SMACK이 활성화되고 보안 덮어쓰기 기능이 비활성화된 경우).
그러나 커널이 안전한지도 확인해야 합니다. 기본적으로 커널은 루트 사용자를 신뢰하기 때문에 루트가 커널을 파괴하기 쉽습니다. 루트가 보안 모듈만 제거할 수 있다면 별로 도움이 되지 않습니다. 그러한 방법의 목록은 다음과 같습니다.여기, 그러나 그러한 목록이 모든 상황에 실제로 들어맞을 수는 없다는 점에 유의하십시오.
마지막으로 상황에 따라 부팅 프로세스를 보호해야 할 수도 있습니다. 물리적으로만 액세스할 수 있는 시스템에는 이것이 필요하지 않을 수 있지만 보안을 극대화하려면 암호화된 파일 시스템과 UEFI 보안 부팅과 같은 안전한 커널 부팅 방법이 필요합니다.
답변3
이를 수행할 방법이 없습니다. 파일이 CD-ROM과 같은 읽기 전용 미디어에 있지 않는 한 누군가는 언제든지 파일을 쓰기 가능한 상태로 복원할 수 있습니다. SELinux 권한을 사용하면 이 작업을 효과적으로 방지 할 수 있지만 root
(이 작업을 수행하는 방법을 모르거나 예제를 제공하겠습니다) 권한이 있는 사용자는 여전히 특정 작업을 실행 취소할 수 있습니다.
답변4
"시스템의 모든 사람이 파일을 읽을 수 있지만 다른 사람(루트도 포함)이 쓰지 않고 돌아갈 수 없도록 하는 방법이 있습니까?"
이에 대한 몇 가지 생각:
(1)쓰기 가능한 CD나 DVD를 사용하는 경우 모든 사람이 읽기 전용이 됩니다. 되돌릴 수 없습니다.
(2)일부 외부 미디어에는 루트 사용자도 비활성화할 수 없는 WriteProtect 스위치와 WriteProtect 플래그가 있습니다. 이를 위해서는 WriteProtect 스위치를 수동으로 제거해야 하며 WriteProtect 플래그를 재설정할 수 없습니다.
카드 하드웨어와 함께 WriteProtect 스위치를 사용할 수 있다면 루트에서도 제어할 수 없는 쓰기를 제어할 수 있습니다.
WriteProtect 플래그가 설정된 경우 반환할 방법이 없습니다.
(이를 더 정확하게 만들어준 @fluffysheap에게 감사드립니다)
(삼)파일이 로컬 컴퓨터의 파일 시스템에 있는 경우 원래 파일을 작성한 사람은 변경 사항을 취소한 다음 파일을 변경할 수 있습니다. 그러므로 귀하의 조건을 충족시키는 것은 불가능합니다.
(4)로컬 파일의 경우 가장 가까운 것은 가상 디스크 또는 ISO 이미지 파일을 사용하는 것입니다. 마운트되면 쓰기가 허용되지 않습니다. 그러나 루트는 새 콘텐츠로 새 ISO를 생성하고 새 ISO를 원본 ISO에 쓸 수 있습니다.
(5)파일이 다른 서버에 있는 경우 해결 방법은 다음과 같습니다. 원격 컴퓨터에서 웹(HTTP 또는 HTTPS) 서버, FTP 서버 또는 NAS 서버를 구성합니다. 모든 로컬 사용자(루트 포함)는 마운트(원격 서버는 읽기 전용 액세스만 제공해야 함) 또는 HTTP 또는 FTP(예:)를 통해 액세스할 수 있어야 합니다. 로컬 사용자는 서버에 쓸 수 없거나 비활성화할 수 없습니다. 이 제한. 로컬 루트도 거기에 쓸 수 없습니다. 파일을 변경하려면 원격 서버에 대한 루트 액세스가 필요합니다.