'sudo chmod / 777'후 우분투 10.04를 복구 / 복원하는 방법


12

참조 :
왜 파괴 "-R 777 / chmod를"인가?

/을 실행 하여 루트 디렉토리에서 파일 권한을 재귀 적으로 변경 sudo chmod -R / 777한 후 시스템이 부팅되지 않습니다 ( "권한 거부"오류가 많이 발생 함).

도와주세요.


라이브 Ubuntu 시스템을 사용할 수 있습니다. 일반 시스템에 설치 한 패키지를 설치 한 다음 '복제'할 스크립트를 작성 하시겠습니까? 이것은 단지 아이디어입니다. 어쩌면 다른 사람이 이것이 좋은지 말할 수 있습니다.
Darokthar

복구 모드에서 열기> 드라이브 마운트> 대화식 쉘 열기> CD를 마운트 된 하드 드라이브에 넣으십시오 (/ mnt / [디렉토리]에 있음)> chmod -R 755 ./**> #cd ./etc/ SSH / #chmod 600 모듈러스 #chmod 644 ssh_config를 #chmod 644 ssh_host_dsa_key.pub #chmod 644 ssh_host_key.pub #chmod 644 ssh_host_rsa_key.pub #chmod 600 ssh_host_dsa_key #chmod 600 ssh_host_key #chmod 600 ssh_host_rsa_key #chmod 640 sshd_config에
스 미트 파텔

StackExchange에 답변을 게시 할만큼 평판이 좋지 않지만 도와 드리겠습니다.
Patel Smit

답변:


23

당신은 잃어버린 원인을 찾고 있습니다. 필요한 데이터를 저장하고 운영 체제를 다시 설치하십시오.


예. 이 작업을 수행하는 데 소요되는 시간은 미치며 정확히 맞는지 확실하지 않습니다. 정리를 시작하고 백업에서 데이터를 복원하십시오.
ThatGraemeGuy

1
이것은 뒤로 물러나서 그것으로부터 배우는 것 중 하나입니다. 가장 중요한 영역은 홈 폴더 내용, 구성 변경 사항 /etc, /var/www웹 서버 내용 및 데이터베이스입니다. 다른 하드 드라이브를 잡고 기본 하드 드라이브로 활성화 한 후 설치하십시오. 다른 드라이브를 전송할 때까지 백업으로 유지합니다.
Fiasco Labs

나는 똑같은 일을했고 (아, 더 잘 알고있다) 여기에 몇 가지 아이디어를 시도했지만 기계를 적절한 상태로 되 돌리는 데 몇 주가 걸릴 것입니다. 대신 데이터를 백업하고 Ubuntu를 다시 설치하십시오.
MikeHoss

5

dpkg가 데이터베이스에 권한을 저장한다는 것을 알고 다음 Google 스크립트를 찾았습니다. 도움이 될 수 있습니다.

편집 : 나는 실제로 스크립트를 간략히 살펴 보았고 PERMS에서 MODE로가는 약간의 마술이 빠져있는 것처럼 보입니다. dpkg -c는 예를 들어 "-rw-r--r--"를 제공하지만 원하는 것은 0644, 나는 지금 일하고있다. 그래서 나는이 순간에 변환을 할 시간이 있는지 확실하지 않지만, 그 비트를 추가하기 위해 다른 사람이 뛰어 들지 않으면 나중에 다시 올 수있다.

흥미로운 스크립트가 있습니다.

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms()
{
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=$1
    OWN=`echo $2 | /usr/bin/tr '/' ':'`
    PATHNAME=$3

    echo -e "$CHOWN $OWN $PATHNAME"
    #`$CHOWN $OWN $PATHNAME`
    #`$CHMOD $MODE $PATHNAME`

}

for PACKAGE in $PACKAGES;
do
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
        changePerms $FILE_DETAILS
    done
done

04555 파일도 처리합니까?
반지 Ø

4

그런 지저분한 상황에서 돌아올 있습니다 시스템을 다시 설치하지 않고,. 듀얼 부팅 시스템을 사용하는 경우 USB 키 또는 Virutal Box 등에서 새로운 시스템을보다 정확하게 실행할 수 있습니다.

나는 같은 종류의 문제 (필자가 작성한 스크립트의 버그)를 다시 실행하여 해결했지만 전문가의 도움을 요청해야합니다. 매우 조심하십시오!

첫째, 이중 부팅 시스템 (우분투 및 이전 페도라 설치)이 있었기 때문에 상황을 해결하기가 쉽지만 USB 키 (또는 CD / DVD)로 시스템을 실행하면 동일한 작업을 수행해야합니다.

MPOINT = / 마운트 / 우분투

먼저 다음과 같이 파일 시스템을 마운트했습니다 (마운트 지점을 만드는 것을 잊지 마십시오). mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

그런 다음 실행중인 시스템에서 지저분한 시스템으로 권한을 복사하기 위해 다음 명령 (내 문제는 몇 가지-중요-디렉토리에만 있음)을 실행했습니다 (사실 경우 페도라의 Virtual Box에 우분투 시스템을 설치했습니다 거기에 권한을 얻었습니다) :

/ etc / usr / bin -exec stat --format "chmod % a $ {MPOINT} % n"찾기 {} \; > /tmp/restoreperms.sh

그런 다음 restoreperms.sh 스크립트를 실행했습니다.

우분투에서 다시 부팅 할 수있었습니다.

restoreperms.sh의 내용은 다음과 같습니다.

(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)

나는 그것을 테스트하지 않았지만 소유자와 소유자 그룹에서도 작동해야합니다. 다음과 같은 것 :

/ etc / usr / bin -exec stat --format 'chown % U : % G $ {MPOINT} % n'{} \; > /tmp/restoreperms.sh^

(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)

물론 UID와 GID는 두 시스템에서 동일하지만 시스템 관련 사용자 및 그룹의 경우 문제가되지 않도록주의해야합니다.

Rk :

이를 위해 중요한 것은 설치 디스크를 사용중인 버전과 동기화하거나 최소한 현재 우분투 버전으로 작업하는 것입니다. 이제는 cronjob 에이 명령을 사용하여 해당 정보를 유지하기 위해 매일 (몇 주일 수 있음) 실행됩니다. 다음 번에는 솔루션을 더 쉽게 만들지 만 물론 지금은 가지고 있기 때문에 다시는 발생하지 않습니다. ;-) 이 같은:

0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2

0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2

편집 : 링크를 지원하기 위해 결합 된 명령은 다음과 같습니다.

/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}


4

위에서 스크립트를 수정했으며 다음과 같습니다.

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms() {
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g'  -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'`
    PERMS=`echo ${PERMS:1}`
    OWN=`echo $2 | /usr/bin/tr '/' '.'`
    PATHNAME=$3
    PATHNAME=`echo ${PATHNAME:1}`

#    echo -e "CHMOD: $CHMOD $PERMS $PATHNAME"    

#    result=`$CHOWN $OWN $PATHNAME`
#    if [ $? -ne 0 ]; then
#   echo -e $result
#        exit 123;
#    fi

    echo -e "CHOWN: $CHMOD $PERMS $PATHNAME"
    result=`$CHMOD $PERMS $PATHNAME`
    if [ $? -ne 0 ]; then
    echo -e $result
    fi
}

for PACKAGE in $PACKAGES;
do
    if [ -d $PACKAGE ]; then
    continue;
    fi
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        #FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
    echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line;
        do
            changePerms $line
        done
        #changePerms $FILE_DETAILS
    done
done

3

blueben에 동의하면 다시 설치하는 것이 어떤 파일 / 디렉토리에 어떤 권한이 필요한지 분석하는 것보다 빠를 수 있습니다. 그러나 재설치가 옵션이 아닌 경우 다음과 같은 아이디어가 있습니다.

  1. 다른 컴퓨터에 기본 우분투 설치 설치
  2. 시스템의 모든 파일 / 디렉토리의 권한을 얻으려면이 명령을 실행하십시오. find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. chmod.sh잘못된 권한으로 컴퓨터에 파일 을 복사하십시오.
  4. 그 파일을 실행 chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. 대부분의 것들이 작동하기를 바랍니다.

2

사용자 user100740로 게시 된 내 게시물에 ERRATUM : 링크를 지원하기 위해 결합 된 명령은 다음과 같습니다.

/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2

2

여전히 시작할 수 있다면 /usr/sbin/synaptic종종 고칠 수 있습니다.

상태별로 패키지를 정렬하고 (맨 위에 설치된 패키지) 설치된 모든 패키지를 선택하고 마우스 오른쪽 단추를 클릭 한 후 재설치를 선택하십시오. 그런 다음 적용하면 dpkg해당 패키지의 모든 파일을 다시 추출 하라는 메시지 가 표시됩니다. (로컬 수정 사항은 손실되지만 구성 파일 변경 사항은 손실되지 않습니다.)

그래도 모든 것이 고정되지는 않을 것입니다.
다른 방법은에 들어가면 설치된 모든 패키지를 호출 한 다음에 전화 /var/cache할 수 있다는 것입니다 . 또한 Ubuntu를 사용하는 경우 dist 업그레이드를 수행하여 많은 오류를 수정하는 경우가 많습니다 (최신 릴리스가 아닌 경우). 일반적으로 이와 같은 오류를 수정하려고 할 때 이러한 간단한 수정을 시도하고 다시 작동하지 않으면 다시 설치할 때입니다. dpkg -x <package name> /dpkg --reconfigure -a


-2

라이브 CD에서 부팅하십시오. 그런 다음 쉘을 시작하고 sudo -s를 실행하십시오. 그런 다음 chmod 777 / *, chmod 600 / etc / passwd를 차례로 입력하십시오. / lib / init 스크립트가 실행 가능하지 않으면 init이 실패하면 커널 패닉이 발생합니다. Lilo Linux 1의 경우 단일 사용자 모드로 부팅하고 위의 user102453의 스크립트를 실행하십시오. 그러면 시스템 부팅 프롬프트가 표시됩니다. 여전히 X를 실행해야합니다.


3
와우, 그것은 당신이 거기에 꽤 끔찍한 생각입니다.
HopelessN00b

-3

/의 권한을 755로 설정하면 나에게 도움이되었습니다.

먼저

root@ubuntu:/# cd /
root@ubuntu:/# ls -ld

권한은 "drwxr-xr-x"(755) 여야합니다.


1
이것은 질문의 재귀 부분을 다루지 않습니다.
kasperd

아니요, 4755 2755 및 6755에도 도움이되지 않습니다. 그것이 / usr 일뿐이라면 (종종 그렇습니다) 비슷한 시스템을 재귀 적으로 ls -al 할 수 있고 755를 제외하면 수동으로 처리 할 수있는 1000 개 미만의 파일 목록을 남길 수 있습니다. 물론 src와 header는 중요하지 않습니다.
mckenzm 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.