/
을 실행 하여 루트 디렉토리에서 파일 권한을 재귀 적으로 변경 sudo chmod -R / 777
한 후 시스템이 부팅되지 않습니다 ( "권한 거부"오류가 많이 발생 함).
도와주세요.
/
을 실행 하여 루트 디렉토리에서 파일 권한을 재귀 적으로 변경 sudo chmod -R / 777
한 후 시스템이 부팅되지 않습니다 ( "권한 거부"오류가 많이 발생 함).
도와주세요.
답변:
당신은 잃어버린 원인을 찾고 있습니다. 필요한 데이터를 저장하고 운영 체제를 다시 설치하십시오.
/etc
, /var/www
웹 서버 내용 및 데이터베이스입니다. 다른 하드 드라이브를 잡고 기본 하드 드라이브로 활성화 한 후 설치하십시오. 다른 드라이브를 전송할 때까지 백업으로 유지합니다.
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
그런 지저분한 상황에서 돌아올 수 있습니다 시스템을 다시 설치하지 않고,. 듀얼 부팅 시스템을 사용하는 경우 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" {}
위에서 스크립트를 수정했으며 다음과 같습니다.
#!/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
blueben에 동의하면 다시 설치하는 것이 어떤 파일 / 디렉토리에 어떤 권한이 필요한지 분석하는 것보다 빠를 수 있습니다. 그러나 재설치가 옵션이 아닌 경우 다음과 같은 아이디어가 있습니다.
find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
chmod.sh
잘못된 권한으로 컴퓨터에 파일 을 복사하십시오.chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
여전히 시작할 수 있다면 /usr/sbin/synaptic
종종 고칠 수 있습니다.
상태별로 패키지를 정렬하고 (맨 위에 설치된 패키지) 설치된 모든 패키지를 선택하고 마우스 오른쪽 단추를 클릭 한 후 재설치를 선택하십시오. 그런 다음 적용하면 dpkg
해당 패키지의 모든 파일을 다시 추출 하라는 메시지 가 표시됩니다. (로컬 수정 사항은 손실되지만 구성 파일 변경 사항은 손실되지 않습니다.)
그래도 모든 것이 고정되지는 않을 것입니다.
다른 방법은에 들어가면 설치된 모든 패키지를 호출 한 다음에 전화 /var/cache
할 수 있다는 것입니다 . 또한 Ubuntu를 사용하는 경우 dist 업그레이드를 수행하여 많은 오류를 수정하는 경우가 많습니다 (최신 릴리스가 아닌 경우). 일반적으로 이와 같은 오류를 수정하려고 할 때 이러한 간단한 수정을 시도하고 다시 작동하지 않으면 다시 설치할 때입니다. dpkg -x <package name> /
dpkg --reconfigure -a
라이브 CD에서 부팅하십시오. 그런 다음 쉘을 시작하고 sudo -s를 실행하십시오. 그런 다음 chmod 777 / *, chmod 600 / etc / passwd를 차례로 입력하십시오. / lib / init 스크립트가 실행 가능하지 않으면 init이 실패하면 커널 패닉이 발생합니다. Lilo Linux 1의 경우 단일 사용자 모드로 부팅하고 위의 user102453의 스크립트를 실행하십시오. 그러면 시스템 부팅 프롬프트가 표시됩니다. 여전히 X를 실행해야합니다.
/의 권한을 755로 설정하면 나에게 도움이되었습니다.
먼저
root@ubuntu:/# cd /
root@ubuntu:/# ls -ld
권한은 "drwxr-xr-x"(755) 여야합니다.