나는 데비안 6 chroot 감옥과 함께 데비안 9를 설치했습니다. 저는 최근까지 감옥에서 잘 작동했던 독점 앱을 사용하고 있습니다. 하지만 새 버전을 실행하면 libc에서 충돌이 발생합니다. 새로운 Debian Jail(Debian 8)을 만드는 데 지쳤는데 여전히 충돌이 발생합니다. 기본 Debian 8에서 실행하면 작동합니다. Docker에서 Debian 6/8 감옥을 가져오면 여전히 작동합니다.
앱이 chroot에서 충돌하는 이유를 아는 사람이 있지만 순진하게 실행하거나 Docker에서 chroot 디렉터리를 가져오고 실행할 때는 그렇지 않습니까?
답변1
커널 사용자는 사용자 공간 ABI에 호환되지 않는 변경을 피하려고 노력하지만 때로는 (보통 보안상의 이유로) 이를 수행해야 하며 그런 다음 그러한 문제가 발생할 수 있습니다. 사용자 공간 바이너리의 갑작스러운 손상을 방지하기 위해 처음에는 이전 ABI가 계속 활성화되지만 잠시 후에는 기본적으로 비활성화됩니다. 이때 이런 문제가 발생하게 됩니다.
실패를 방지하려면 다음 두 가지 옵션이 있습니다.
- 이전 커널을 사용하여 VM(chroot 아님)에 이전 소프트웨어를 설치합니다. 이것은 항상 작동해야합니다
- 현재 커널에 여전히 필요한 기능이 있지만 기본적으로 활성화되어 있지 않은 경우 잠시 동안 활성화할 수 있습니다. 그러나 이렇게 하면 환경의 보안이 저하될 수 있으므로 안전이 중요한 환경에서는 이 작업을 수행하지 마십시오.
특정 문제의 경우 가장 가능성이 높은 원인은 vsyscall 에뮬레이션입니다. 이는 최근 배포판에서는 기본적으로 비활성화되어 있지만 커널 부팅 시간 매개변수를 지정하여 활성화할 수 있습니다 vsyscall=emulate
.