읽기 전용 파일 시스템에서 파일을 리디렉션할 수 있나요?

읽기 전용 파일 시스템에서 파일을 리디렉션할 수 있나요?

본질적으로 읽기 전용이고(예: SquashFS) 스왑이 비활성화된 파일 시스템을 사용하여 Linux 이미지를 생성한다고 가정해 보겠습니다. 읽기 전용이란 기본 파일 시스템과 그 모든 내용이 읽기 전용이고 읽기 전용으로 마운트되어 있으며 디렉터리만 쓰기 가능해야 함을 의미합니다(예: /tmp쓰기 가능한 다른 저장소/파티션으로 리디렉션).

이제 내 질문은 누군가가 해당 시스템에 대한 전체 루트 액세스 권한을 갖고 있는 경우 파일의 읽기 전용 부분에 대한 액세스를 속이는 것이 가능하다는 것입니다. 예를 들어, 파일 a.so이 읽기 전용 섹션에 있는 경우 파일에 대한 모든 액세스가 다른 파일로 리디렉션될 수 있습니까? 그는 시스템의 쓰기 가능한 부분에 있는 모든 파일을 복사하거나 루트 권한으로 실행할 수 있습니다.

감사합니다

답변1

기본 파일 시스템이 읽기 전용으로 마운트되고 특정 디렉터리(쓰기 가능)만 마운트되는 시나리오를 고려하면 /tmp짧은 대답은 '예'입니다. 루트 액세스 권한이 있는 사람은 잠재적으로 시스템의 읽기 전용 부분에 있는 파일에 대한 액세스를 리디렉션할 수 있습니다. 쓰기 가능한 부분의 다른 파일을 지시합니다. 그게 다야 :

기호 링크 또는 하드 링크: 루트 사용자는 기호 링크(symlink)를 생성하여 원본 파일에서 쓰기 가능 영역의 새 파일로 액세스를 리디렉션할 수 있습니다. 읽기 전용 파일 시스템 자체에서는 심볼릭 링크를 생성할 수 없지만 사용자는 쓰기 가능한 영역에 심볼릭 링크를 배치하고 LD_LIBRARY_PATH대신 심볼릭 링크를 사용하도록 환경(예: 라이브러리의 경우)이나 응용 프로그램 구성을 조정할 수 있습니다. 원본 파일의.

LD_PRELOAD 팁: 귀하의 예와 같은 공유 라이브러리의 경우 루트 사용자는 동적 링커의 기능을 a.so활용할 수 있습니다 . LD_PRELOAD이 기능을 사용하면 다른 라이브러리보다 먼저 로드할 사용자 정의 공유 라이브러리를 지정할 수 있습니다. 사용자는 a.so쓰기 가능한 영역에 복사하고 필요에 따라 수정한 다음 LD_PRELOAD를 사용하여 원본 대신 수정된 버전을 로드하여 액세스를 효과적으로 리디렉션할 수 있습니다.

환경 조작: 파일 조작 외에도 루트 사용자는 환경 변수를 변경하거나 chroot 환경을 사용하여 애플리케이션 실행 방식을 변경하고 쓰기 가능 영역에 저장된 다른 파일이나 구성을 사용하도록 리디렉션할 수 있습니다.

Mount --bind 옵션: 이 mount --bind옵션은 파일 시스템의 한 부분에서 다른 부분으로 디렉터리나 파일을 마운트하는 데 사용할 수 있습니다. 루트 사용자는 이를 사용하여 쓰기 가능한 디렉터리나 파일을 읽기 전용 부분 어딘가에 덮어쓰고 쓰기 가능한 버전으로 액세스를 효과적으로 리디렉션할 수 있습니다.

이러한 방법은 시스템의 읽기 전용 부분에서 쓰기 가능한 부분으로 액세스를 리디렉션할 수 있지만 실행하려면 루트 액세스가 필요하다는 점은 주목할 가치가 있습니다. 이는 시스템에 대한 루트 액세스를 보호하는 것의 중요성을 강조합니다. 사용자에게 무제한 루트 액세스 권한이 있는 경우 파일 리디렉션뿐만 아니라 여러 가지 방법으로 시스템 무결성이 손상될 수 있습니다. 신뢰할 수 있는 사용자에게만 루트 액세스 권한을 부여하고 SELinux 또는 AppArmor와 같은 추가 보안 조치를 사용하면 이러한 위험을 완화하는 데 도움이 될 수 있습니다.

답변2

틀림없이. 최후의 수단으로 루트 액세스 권한이 있는 사람은 언제든지 커널 모듈을 로드하거나 코드를 수정하여 커널이 원하는 방식으로 작동하도록 할 수 있습니다.

더 쉽게 만들기 위해 Linux 커널은 설명하는 목적에 맞게 overlayfs를 도입했습니다. 따라서 이것은 매우 일반적인 사용법이며 단지 오버레이 구성의 문제입니다.

관련 정보