사용자 계정이 특정 폴더를 편집하거나 볼 수 없도록 샌드박스를 시도하고 있습니다. 즉, /home/user/test
계정은 시스템이 모든 명령을 허용하고 시스템을 어떤 방식으로든 수정하거나 편집할 수 없도록 하는 C++ 프로그램을 컴파일하고 실행합니다.
이는 해당 사용자의 전체 시스템에서 쓰기(및 일부 읽기) 권한을 비활성화 su
및 sudo
제거하고 프로그램을 자체 폴더에 잠그는(가두는) 것을 의미합니다. 뭔가 빠졌나요?
이제 구현을 위해.
와 를 별도로 입력하면 합계의 위치를 찾을 수 있다고 생각합니다 su
. 예를 들어, 바이너리가 다음 위치에 있다는 것을 알 수 있습니다.sudo
whereis su
whereis sudo
sudo
/usr/bin/sudo /usr/lib/sudo /usr/bin/X11/sudo /usr/share/man/man8/sudo.8.gz
이 사용자의 실행을 비활성화하기 위해 이러한 바이너리에 대한 권한을 변경하면 sudo
다른 수단(예: 다른 프로그래밍 언어)을 통한 작업이 금지됩니까?
chroot
특히 프로그램이 샌드박스 폴더 외부의 다른 리소스에 액세스해야 하는 경우에는 특정 폴더 내에 프로그램을 "가두는" 것이 효과적이지 않은 것 같습니다 . 그렇다면 가장 좋은 접근 방식은 무엇입니까?
답변1
백도어로 사용할 수 있는 항목을 잊어버린 것을 발견하는 것보다 chroot에 포함해야 할 항목을 찾는 것이 더 낫습니다. chrooted 구조 아래에서 필요한 자료에 연결하기만 하면 됩니다. 그리고 첫 번째 컴파일 실행에서 발견했지만 간과했던 모든 것.
2000년부터 저는 이러한 요구 사항이 있을 때마다 이러한 편집을 위해 가상 머신을 사용해 왔습니다. 그러한 계정이 수행할 수 있는 작업이나 시스템의 다른 활동(소프트웨어 설치 등)으로 인해 컴파일 프로세스가 중단될 수 있다는 점에 대해 걱정하지 마십시오. 업그레이드하기 전에 스냅샷 등을 찍는 것이 쉽습니다. 이러한 이유로 속도 저하 측면에서 가상 머신의 오버헤드는 지불해야 할 대가가 매우 적습니다.