인터넷에 접속할 수 없고 컴퓨터를 다시 시작할 수 없는 경우 어떻게 복구할 수 있나요?
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"