/usr/bin/chmod 없이 chmod를 수행하는 방법은 무엇입니까?

/usr/bin/chmod 없이 chmod를 수행하는 방법은 무엇입니까?

오늘 유닉스 트레이너가 루트 비밀번호가 학생들에게 유출되었고 그 중 한 명이 /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권한을 변경하기 위해 시스템 호출을 하면 여러 가지 방법으로 해당 시스템이 자신을 호출하도록 할 수 있습니다.

관련 정보