오늘 유닉스 트레이너가 루트 비밀번호가 학생들에게 유출되었고 그 중 한 명이 /usr/bin/chmod
자신의 실행 권한을 제거했다는 이야기를 들려주었습니다. 이 경우 복구 chmod
하고 다시 실행 가능하게 만드는 방법은 무엇입니까? 외부 소스에서 가져오거나 다시 컴파일하는 것이 더 나은 선택이 아니라고 가정하면, 자체적으로 복원할 수 있는 영리한 해킹이 있습니까 chmod
?
이것은 오래 전에 일어났으며 현재 문제에 대한 해결책을 찾고 있는 것이 아니라 Unix가 그러한 문제를 해결하기 위해 어떤 해결책을 제공했는지 궁금합니다.
답변1
실행하려는 명령을 전달하여 로더를 직접 실행할 수 있습니다.
/lib/ld-linux.so /bin/chmod +x /bin/chmod
로더 경로는 다를 수 있습니다. 64비트 시스템에서는 chmod
컴파일된 방식에 따라 올바른 버전을 선택 해야 합니다 ./lib64/ld-linux-x86-64.so.2
답변2
이 유틸리티는 시스템 호출 chmod
에 의존합니다 (참고자료 참조 ). 따라서 몇 줄의 C 또는 래퍼가 있는 다른 언어(대부분)를 사용하여 이 작업을 수행할 수 있습니다. C 컴파일러와 Perl 인터프리터가 없는 *nix 시스템은 거의 없습니다. 대부분의 Linux 배포판에서는 후자가 작동해야 합니다.chmod()
man 2 chmod
perl -e 'chmod 0755, "foobar.file"'
답변3
일부 시스템에는 busybox
이 기능이 설치되어 있으며, 이 경우 다음을 실행할 수 있습니다.
busybox chmod +x /bin/chmod
당신이 해킹을 요청했기 때문에 다른 해킹밖에 생각이 나지 않습니다.
mv /bin/chmod /bin/chmod.orig
cp -a /bin/chown /bin/chmod
이제 실행 파일이 생겼지 만 실제로는 (즉, 다른 바이너리) 파일 /bin/chmod
입니다 . chown
이제 우리가 해야 할 일은 원본 바이너리로 덮어쓰는 것뿐입니다.
dd if=/bin/chmod.orig of=/bin/chmod
+x 플래그를 유지하므로 해당 파일에 대해 다른 파일의 +x를 훔칠 수 있습니다.
물론, 모든 대체 바이너리(로더, Perl, Python, gcc 등 포함)가 chmod -xed라면 복구 시스템에서 이를 수정하는 것이 유일한 옵션일 수 있습니다.
답변4
가장 먼저 내 마음에 스쳐가는 것은,
- 다른 소스(웹북, CD 등)에서 실행하고 해당 소스에서 chmod를 사용하여 권한을 설정하세요.
- 권한을 변경하는 작은 C 프로그램을 작성하십시오.
- 권한을 변경하려면 Perl 스크립트(Ruby, PHP, Python 등)를 작성하세요.
/usr/bin/chmod
권한을 변경하기 위해 시스템 호출을 하면 여러 가지 방법으로 해당 시스템이 자신을 호출하도록 할 수 있습니다.