서로 다른 프로세스의 가상 메모리 주소 공간 간의 격리는 권한 있는 프로세스 및 스와핑에 적용되지 않습니까?

서로 다른 프로세스의 가상 메모리 주소 공간 간의 격리는 권한 있는 프로세스 및 스와핑에 적용되지 않습니까?

Linux 프로그래밍 인터페이스에서

데이터가 포함된 가상 메모리 페이지는 스왑 아웃될 수 있으며(mlock() 또는 유사한 메서드를 사용하여 메모리에 잠겨 있지 않은 경우) 그런 다음 권한 있는 프로그램이 스왑 영역에서 읽을 수 있습니다.

한 프로세스의 가상 메모리 주소 공간은 다른 프로세스에서 접근할 수 없다는 것을 배웠습니다. 위의 인용문이 나를 궁금하게 만든다.

  • 이 격리 문은 다른 권한 있는 프로세스에 적용되지 않습니까?

  • 이것은 스왑 부분에는 적용되지 않고 실제 메모리 부분에만 적용됩니까?

답변1

주소 공간 격리는 권한 있는 프로세스에 대해 작동하지만 어떤 경우에는 메모리에 저장된 데이터가 권한 있는 프로세스에 의해 로터리 방식으로 액세스될 수 있습니다.

데이터가 교환 상태가 되면 충분한 권한을 가진 모든 프로세스(기본 파일이나 장치를 읽을 수 있는 충분한 권한을 가지고 실행하는 사람은 누구나 스왑 저장소를 직접 읽고 거기에 있는 데이터에 액세스할 수 있습니다. 메모리 하위 시스템 이외의 수단을 통해 데이터에 액세스할 수 있기 때문에 주소 공간 격리가 여기서 무너집니다.

이전 커널 또는 구성된 커널에서 /dev/kmem충분한 읽기 권한이 있는 프로세스는 메모리에 있는 모든 프로세스의 데이터를 읽을 수 있으며, 이는 또한 주소 공간 격리를 깨뜨립니다. 이번에는 가상 메모리 계층을 통하지 않고 실제 메모리를 읽습니다.

관련 정보