저는 우분투 12.04(32비트)를 사용하고 있습니다. 오늘 실수로 다음 명령을 실행했습니다.
경고하다
다음 명령을 실행하지 마십시오.
sudo find / -type d -exec chmod -Rf a-wr {} \;
시스템에 로그인할 수 없습니다. 시스템에 사용자가 한 명뿐이고 루트가 비활성화되어 있습니다. 해결 방법 아시는 분 계신가요?
답변1
시스템의 모든 디렉터리에서 읽기 및 쓰기 권한을 제거하면 분명히 모든 배포판 작동이 중단됩니다. 이것은 말도 안되는 소리입니다.
편집 1
CD/DVD/USB 스틱에서 다른 Linux를 부팅하고 영향을 받는 모든 볼륨의 액세스 권한을 올바르게 설정하면 시스템을 복구할 수 있습니다. 원래 상태로 복원하는 것은 복잡할 수 있지만 다시 작동시키는 것은 더 쉽습니다. 사용자가 한 명뿐이고 네트워크를 서비스하는 데몬이 없다면 문제나 보안 위험이 없습니다.
mount -t auto /dev/whatever /mnt/targetvolume
find /mnt/targetvolume -type d -exec chmod 755 {} \;
find /mnt/targetvolume -type f -exec chmod 644 {} \;
chmod -R a+x /mnt/targetvolume/bin /mnt/targetvolume/sbin \
/mnt/targetvolume/lib /mnt/targetvolume/lib64 /mnt/targetvolume/sbin \
/mnt/targetvolume/usr/ /mnt/targetvolume/usr/bin \
/mnt/targetvolume/usr/lib /mnt/targetvolume/usr/lib64 \
/mnt/targetvolume/usr/sbin
/etc에서 올바른 권한을 복원하는 것이 중요합니다. 내 제안은 동일한 배포판을 사용하는 사람(설치한 모든 소프트웨어를 설치한 사람이 바람직함)에게 다음을 제공하도록 요청하는 것입니다.
# on a working system
getfacl --recursive /etc > acl-etc.txt
# on your system
setfacl --restore=acl-etc.txt /etc
# or from the rescue system
setfacl --restore=acl-etc.txt /mnt/targetvolume/etc
이는 다음을 통해 더욱 개선될 수 있습니다.
- /etc의 모든 파일과 디렉터리가 참조 시스템에 있는지 확인합니다.
- 패키지 관리자가 설치된 패키지에 대한 액세스 권한을 확인하도록 합니다(예: rpm --verify package).
답변2
무슨 일이 일어났는지, 그리고 그에 대해 어떤 조치를 취할 수 있는지 살펴보겠습니다.
sudo find / -type d -exec chmod -Rf a-wr {} \;
이는 상당히 간단한 부분으로 나눌 수 있습니다.
sudo find / -type d
그 자체로는 무해합니다. 이는 -type d
파일 시스템의 모든 디렉터리 목록을 생성합니다(이것이 바로 그 용도입니다).
-exec
목록의 각 항목에 대해 주어진 명령을 실행하십시오.
chmod -Rf a-wr {}
이제 우리는 진지해집니다. {}
현재 목록 항목으로 확장되므로 각 디렉토리에 대해 실행되는 명령은 입니다 chmod -Rf a-wr $DIRNAME
. chmod의 경우 -R
이는 재귀 작업, -f
오류 메시지 출력 억제, 모든 사용자( 예: 비소유자와는 다른 대표) 에 대한 a-wr
쓰기 및 읽기 권한 제거를 의미합니다. .a
all
o
\;
실행할 명령줄이 끝났습니다.
따라서 (chmod에 -R 인수를 전달하고 디렉토리를 제공하면 그 아래의 모든 항목에 대해 모드 변경이 수행되기 때문에) 실행하는 명령은 실제로 이해하기 쉬운 명령과 동일합니다
chmod --recursive --quiet a-wr /
시스템의 거의 모든 내용을 읽을 수 있어야 하고 대부분 쓰기가 가능해야 한다고 말할 필요가 있는지 의심스럽습니다.누구일을 원활하게 진행하세요. 또한 디렉토리에 대한 읽기 권한을 제거하면 일반적인 방법을 사용하여 디렉토리 목록을 가져올 수 없게 되어 다른 곳에서 혼란을 초래할 수 있습니다.
그것가능한설치된 패키지를 다시 설치하여 복구할 수 있지만 이는 홈 디렉터리에 아무런 도움이 되지 않으며 제대로 작동한다는 보장도 없습니다. 적절하게 구성된 라이브 CD(사용 중인 운영 체제와 동일한 라이브 CD를 권장함)가 필요하며, 이를 사용하여 부팅하고 루트 파일 시스템을 마운트한 후 셸에 넣습니다. 그런 다음 chroot /mnt /bin/bash
/mnt는 시스템 루트 파일 시스템의 마운트 지점이고 mount -a
나머지 파일 시스템이 마운트됩니다.
일단 dpkg -u --reinstall install '.+'
모든 패키지를 다시 설치하여 대부분의 손상을 수정해야 합니다. 이 작업을 완료하는 데 시간이 좀 걸립니다.
다음으로, 홈 디렉터리를 확인하고 적절한 권한을 설정하세요. 다음부터 시작하면 최소한 기본적으로 속도를 높일 수 있습니다.
find /home/me -not -type d -exec chmod 640 {} \;
find /home/me -type d -exec chmod 750 {} \;
이는 모든 디렉터리를 사용자 읽기/쓰기/실행, 그룹 읽기/실행 및 다른 사람의 액세스로 설정하고, 디렉터리가 아닌 디렉터리를 사용자 읽기/쓰기, 그룹 읽기 및 다른 사람의 액세스로 설정하는 것이 합리적인 기준입니다.
다시 말하지만, 이 수정 후에 모든 것이 제대로 작동할 것이라는 보장은 없습니다(또는 수정이 전혀 작동할 것이라는 보장은 없습니다. 정확한 명령을 시도하지 않았으며 확실히 여러분이 만든 조건에서는 시도하지 않았습니다). 하지만 작동한다면 다음과 같습니다.~해야 한다최소한 시스템이 부팅되도록 허용하십시오. 부팅 가능한 시스템이 있으면 추가 복구를 수행하기가 더 쉬워집니다.
더 간단한 대안, 있는 경우 백업 복구 방법을 연습하세요.
답변3
John은 당신에게 상기시켜 주려고 노력했지만 당신은 그것을 무시했습니다. 이제 손상을 입었다면 시스템을 단일 모드로 부팅하고 로그를 확인하십시오. /tmp에 대한 권한을 drwxrwxrwt - 'chmod o+t /tmp'로 변경하고 확인해보세요.