"chmod -x chmod"에서 복구하는 방법은 무엇입니까? [복사]

"chmod -x chmod"에서 복구하는 방법은 무엇입니까? [복사]

인터넷에 접속할 수 없고 컴퓨터를 다시 시작할 수 없는 경우 어떻게 복구할 수 있나요?

chmod -x chmod

?

답변1

1 - 프로그래밍 언어를 사용하여 구현chmod

루비:

ruby -e 'require "fileutils"; FileUtils.chmod 0755, “chmod"'

파이썬:

python -c "import os;os.chmod('/bin/chmod', 0755)”

진주:

perl -e 'chmod 0755, “chmod”'

노드.js:

require("fs").chmod("/bin/chmod", 0755);

씨:

$ cat - > restore_chmod.c 
#include <sys/types.h>
#include <sys/stat.h>

int main () {
    chmod( "/bin/chmod", 0000755 );
}
^D

$ cc restore_chmod.c

$ ./a.out

2 - chmod를 사용하여 다른 실행 파일 만들기

실행 파일을 생성하여:

$ cat - > chmod.c 
int main () { }
^D

$ cc chmod.c

$ cat /bin/chmod > a.out

실행 파일을 복사하여:

$ cp cat new_chmod

$ cat chmod > new_chmod

3 - BusyBox 시작(내부에 chmod 포함)

4 - Gnu Tar 사용

특정 권한이 있는 아카이브를 생성하고 이를 사용하여 chmod를 복원합니다.

$ tar --mode 0755 -cf chmod.tar /bin/chmod

$ tar xvf chmod.tar

파일을 생성하지 않고도 즉시 동일한 작업을 수행할 수 있습니다.

tar --mode 755 -cvf - chmod | tar xvf -

다른 머신에 대한 소켓을 열고 아카이브를 생성한 후 로컬로 복원합니다.

$ tar --preserve-permissions -cf chmod.tar chmod

$ tar xvf chmod.tar

또 다른 가능성은 주기적으로 아카이브를 생성한 다음 편집하여 권한을 변경하는 것입니다.

5 -cpio

cpio아카이브를 조작할 수 있습니다. 를 실행할 때 cpio file처음 21바이트 뒤에는 파일 권한을 나타내는 3바이트가 있습니다.

echo chmod |
  cpio -o |
  perl -pe 's/^(.{21}).../${1}755/' |
  cpio -i -u

6 - 동적 로더

/bin/ld.so chmod +x chmod

(실제 경로는 다를 수 있음)

7 - /proc마법(테스트되지 않음)

단계별:

  • inode를 캐시( 등)에 강제로 넣기 위해 몇 가지 작업을 수행 attrib합니다 ls -@.
  • kcore의 VFS 구조 확인
  • sed커널이 인식하지 못한 채 실행 비트를 변경하기 위해 또는 유사한 방법을 사용
  • chmod +x chmod한 번 실행

8 - 시간 여행(git, 아직 테스트되지 않음)

먼저, 우리는 다른 요인의 영향을 받지 않는지 확인하고 싶습니다.

$ mkdir sandbox
$ mv chmod sandbox/
$ cd sandbox

이제 저장소를 만들고 반환할 수 있는 콘텐츠로 표시해 보겠습니다.

$ git init
$ git add chmod
$ git commit -m '1985'

이제 시간 여행에 대해 이야기해 보겠습니다.

$ rm chmod
$ git-update-index --chmod=+x chmod
$ git checkout '1985'

git 기반 솔루션이 많이 있어야 하지만 실제로 시스템을 사용하려고 시도하는 git 스크립트를 접할 수도 있음을 경고해야 합니다.chmod

9 - 불로 불을 진압하라

하나의 운영 체제를 다른 운영 체제와 비교할 수 있다면 좋을 것입니다. 즉, 머신 내부에서 운영 체제를 부팅하고 외부 파일 시스템에 대한 액세스 권한을 부여할 수 있는 경우입니다. 안타깝게도 시작하는 거의 모든 운영 체제는 일종의 Docker, 컨테이너, Jail 등 내부에 있습니다. 따라서 안타깝게도 이는 불가능합니다.

아니면 그럴까요?

이것이 EMAC의 솔루션입니다:

Ctrl+x b > *scratch* 
(set-file-modes "/bin/chmod" (string-to-number "0755" 8))
Ctrl+j

10 - 윔

EMAC 솔루션의 유일한 문제점은 제가 실제로 Vim 유형의 사람이라는 것입니다. 처음 이 주제를 다루었을 때 Vim에서는 이를 수행할 수 있는 방법이 없었지만 최근 몇 년 동안 누군가가 우주를 수정했기 때문에 이제 다음과 같은 작업을 수행할 수 있습니다.

vim -c "call setfperm('chmod', 'rwxrwxrwx') | quit"

관련 정보