저는 감옥에 처음 왔습니다 chroot
. 지금까지 bash를 사용하여 설정했습니다.이 튜토리얼ssh
, 공개 키로 보호되는 사용자를 통해 로그인 할 수 있었습니다 .
SSH 구성은 chroot Jail 실행을 담당합니다.
AllowUsers <username>
Match User <username>
ChrootDirectory "/home/<username>"
/etc/sshd_config
기본적으로 나열된 모든 종속성을 가져와 /home/username/<rest-of-the-path-to-dependency-file>
실행 파일에 복사하고 실행 파일에도 동일한 작업을 수행했습니다.
나는 linux-vdso
아무것도 하지 않았다같은 규칙을 따르지 않습니다.
감옥에서 내가 할 수 있는 유일한 일은 cd
프로그램을 실행하는 것뿐입니다. 내 쉘 프롬프트는 다음과 같습니다:
-bash-4.4$
다른 프로그램을 추가하고 ldd
위의 튜토리얼과 같은 방식으로 종속성을 추가하고 실행 파일을 IU가 찾은 디렉터리에 복사했습니다.
/.config/taskell/config.ini
프로그램을 실행하면 여러 다른 파일과 함께 디렉토리와 폴더가 생성됩니다 .
하지만 프로그램이 실행되면 나에게인코딩 관련 오류file /home/username/.config/taskell/config.ini: hGetContents: invalid argument (invalid byte sequence)
이지만 내 컴퓨터의 bash 쉘에서 직접 실행하면 제대로 작동합니다.
chroot 감옥을 설정하면 쉘이나 프로그램이 읽고 있는 파일을 해석하는 방식이 바뀌나요? 프롬프트 -bash-4.4$
는 일반 프롬프트를 사용하여 처음 로그인했을 때 존재하지 않았던 일종의 기본 설정이 있음을 나타내는 것 같습니다.
또한 WSL Ubuntu 18.08에서 이 작업을 수행하려고 하는데, 이는 제가 연결한 인코딩 문제와 관련이 있는 것 같습니다.
제가 실행할 수 있는 유일한 세 가지 명령은 실행하려는 명령인 , git
및 입니다 vim
. 하지만 이 명령으로 시작하는데 운이 좋지 않습니다.
답변1
docker와 같은 chroot 대신 컨테이너를 사용하십시오(다른 것도 많이 있음).
- chroot, 네임스페이스 격리, cgroup 등 훨씬 더 많은 작업을 수행합니다.
- 그것은 당신을 위해 그것을 관리합니다.
- Docker의 경우 사전 빌드된 이미지가 있습니다.
그러나 귀하께서 요구하시는 내용은 알겠습니다만 간단한 사용자 격리(각 사용자에 대해 별도의 계정)를 사용하면 더 쉽게 해결할 수 있습니다. 그런 다음 Application Armor와 같은 필수 액세스 제어를 사용하여 이를 향상시킬 수 있습니다.
그러나 WSL을 사용하면 이 모든 것이 복잡해집니다. WSL은 MS-Windows의 Gnu/Linux입니다. WSL은 Gnu/Linux를 Linux로 대체합니다. WSL2가 훨씬 더 나은지 잘 모르겠습니다. 우리가 논의하고 있는 모든 것은 Gnu/Linux의 Linux 부분 내에서 이루어지며, 실제 Gnu/Linux 시스템을 실행하지 않으면 가장 쉽게 작동하지 않습니다(또는 다르게 작동합니다). 공유 파일 시스템은 비호환성의 큰 영역입니다. 사용자를 격리하기 위해 파일 권한을 사용하기가 어렵습니다.
docker가 MS-Windows에서 작동한다고 들었는데, Gnu/Linux를 가상 머신에 넣어서 작동하는 것 같아요(하지만 확실하지는 않습니다).