Ch सोंठो चामोड / 777 ’के बाद ubuntu 10.04 की मरम्मत / पुनर्स्थापन कैसे करें


12

इसे भी देखें:
“chmod -R 777 /” विनाशकारी क्यों है?

मैंने फ़ाइल निर्देशिकाओं को रूट निर्देशिका में पुनरावर्ती रूप /से निष्पादित करके बदल दिया sudo chmod -R / 777, और उसके बाद मेरा सिस्टम बूट नहीं होगा (मुझे बहुत "अनुमति अस्वीकृत" त्रुटियां हो रही हैं)।

कृपया मदद कीजिए।


शायद आप एक लाइव उबंटू प्रणाली का उपयोग कर सकते हैं। अपने सामान्य सिस्टम पर आपके द्वारा इंस्टॉल किए गए पैकेजों को स्थापित करें और फिर उन्हें 'क्लोन' करने के लिए एक स्क्रिप्ट लिखें? यह सिर्फ एक विचार है। शायद कोई और कह सकता है कि क्या यह कोई अच्छा है।
द्रोणखार

इसे ध्यान से पालन करें: रिकवरी मोड में खोलें> माउंट ड्राइव> इंटरएक्टिव शेल> सीडी को माउंट किए गए हार्ड ड्राइव में खोलें (मेरे लिए यह / mnt / [डायरेक्टरी])> chmod -R 755 ./ye> #cd/etc/ में है। ssh / #chmod 600 moduli #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 में उत्तर पोस्ट करने के लिए मेरे पास पर्याप्त प्रतिष्ठा नहीं है लेकिन मैं आपकी मदद करना चाहता था।
स्मित पटेल

जवाबों:


23

आप एक खोए हुए कारण को देख रहे हैं। आपके द्वारा आवश्यक डेटा को सहेजें, और ऑपरेटिंग सिस्टम को फिर से इंस्टॉल करें।


हाँ। आप इसे करने में जितना समय लगाते हैं वह पागल हो जाएगा और आपको कभी भी यह पता नहीं चलेगा कि आपको यह बिल्कुल सही लगा। क्लीन शुरू करें, अपने डेटा को बैकअप से पुनर्स्थापित करें।
ThatGraemeGuy

1
यह उन कदमों में से एक है और इससे चीजें सीखते हैं। आपका सबसे महत्वपूर्ण क्षेत्रों के लिए अपने घर फ़ोल्डर की सामग्री हैं, विन्यास में परिवर्तन आप अपने द्वारा किए गए /etc, /var/wwwवेब सर्वर सामग्री और डेटाबेस। एक और हार्ड ड्राइव पकड़ो, इसे अपने प्राथमिक के रूप में सक्षम करें और इंस्टॉल करें। जब तक आप इसे स्थानांतरित कर सकते हैं तब तक आपकी अन्य ड्राइव को बैकअप के रूप में संरक्षित करता है।
फिस्को लैब्स

मैंने एक ही काम किया (और, हाँ, मुझे बेहतर पता है) और यहाँ पर कई विचारों की कोशिश की, लेकिन मशीन को एक सभ्य स्थिति में लाने में मुझे कई सप्ताह लगेंगे। इसके बजाय अपने डेटा का बैकअप लेने और Ubuntu को पुनर्स्थापित करने का प्रयास करें।
माइकहॉस

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 फाइलों से भी निपटता है?
रिंग Ring

4

यह है संभव इस तरह के एक गंदा स्थिति से वापस आने के लिए , प्रणाली फिर से स्थापित करने के बिना। ठीक है, अगर आप एक दोहरी बूट प्रणाली है, तो वास्तव में एक यूएसबी कुंजी से या वीरुटल बॉक्स में (या तो) एक नया नया सिस्टम चला रहे हैं।

मैं फिर से उसी तरह के मुद्दे पर भागा (एक स्क्रिप्ट में कुछ बग मैं लिख रहा था) और इसे हल किया, लेकिन आपको कुछ विशेषज्ञ की मदद लेने की आवश्यकता है। बहुत सतर्क रहें!

सबसे पहले, मेरी स्थिति को हल करना आसान था क्योंकि मेरे पास एक दोहरी बूट सिस्टम (ubuntu और मेरा पुराना फेडोरा इंस्टॉल) था, लेकिन एक यूएसबी कुंजी (या शायद एक सीडी / डीवीडी) के लिए सिस्टम चलाना एक ही काम करना चाहिए।

MPOINT = / माउंट / ubuntu

पहले मैंने अपनी फाइल सिस्टम को इस तरह से माउंट किया (माउंट पॉइंट बनाना न भूलें): माउंट / देव / ubuntu / root $ MPOINT माउंट / देव / ubuntu / home $ MPOINT / home

फिर मैंने निम्नलिखित कमांड को चलाया (मेरा मुद्दा केवल कुछ - महत्वपूर्ण - निर्देशिकाओं में) चल रहे सिस्टम से अनुमतियों को गन्दा एक पर कॉपी करने के लिए था (वास्तव में, मेरे मामले में, मैंने फेडोरा के तहत वर्चुअल बॉक्स में एक ubuntu प्रणाली स्थापित की थी और वहां पर अनुमति मिल गई):

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

और फिर मैंने रिस्टोरपर.श स्क्रिप्ट को चलाया।

मैं ubuntu पर फिर से बूट करने में सक्षम था।

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
(...)

बेशक, आपको यहां ध्यान रखना होगा, कि यूआईडी और जीआईडी ​​दोनों प्रणालियों पर समान हैं, लेकिन सिस्टम से संबंधित उपयोगकर्ताओं और समूहों के लिए, यह एक मुद्दा नहीं होना चाहिए।

आर:

इसके लिए एक महत्वपूर्ण बात यह है कि आपके द्वारा उपयोग किए जा रहे संस्करण के साथ इंस्टॉल डिस्क को चालू रखें, या कम से कम वर्तमान ubuntu संस्करण के साथ काम करें। अब, मेरे पास यह जानकारी रखने के लिए एक क्रोनजॉब में, हर दिन (सप्ताह हो सकता है) चल रहा है। यह अगली बार समाधान को आसान बना देगा, लेकिन निश्चित रूप से, जैसा कि मेरे पास अभी है, ऐसा फिर कभी नहीं होगा। ;-) कुछ इस तरह:

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

ब्लूबेन के साथ सहमत हों, बस पुनर्स्थापना विश्लेषण करने से अधिक तेज़ हो सकता है कि किस फ़ाइल / निर्देशिका को किस अनुमति की आवश्यकता है। लेकिन अगर पुनर्स्थापना एक विकल्प नहीं है, तो यहां एक विचार है:

  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

ERRATUM मेरे पोस्ट को user100740 के रूप में पोस्ट किया गया: लिंक का समर्थन करने के लिए, संयुक्त कमांड है:

/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, तो आप dpkg -x <package name> /हर स्थापित पैकेज के लिए कॉल कर सकते हैं , फिर कॉल करें dpkg --reconfigure -a। इसके अलावा, यदि आप उबंटू का उपयोग कर रहे हैं, तो आप एक डिस्टर्ब अपग्रेड कर सकते हैं जो अक्सर बहुत सारी त्रुटियों को ठीक करता है (यह मानते हुए कि आप नवीनतम रिलीज़ पर पहले से नहीं हैं)। आम तौर पर जब मैं इस तरह से एक त्रुटि को ठीक करने की कोशिश कर रहा होता हूं, तो मैं इन सरल सुधारों की कोशिश करता हूं और अगर वे इसे फिर से काम नहीं करते हैं, तो इसे पुनर्स्थापित करने का समय है।


-2

लाइव सीडी से बूट। फिर शेल शुरू करें, फिर सुडो-एस। फिर chmod 777 / *, फिर chmod 600 / etc / passwd। यदि यह विफल हो जाता है तो कर्नेल घबरा जाएगा जो कि होगा यदि / lib / init स्क्रिप्ट निष्पादन योग्य नहीं हैं। लिलो लिनक्स 1 के लिए एकल उपयोगकर्ता मोड में बूट करें, और उपर्युक्त उपयोगकर्ता 102453 की स्क्रिप्ट चलाएँ। इसे प्रॉम्प्ट करने के लिए sytem बूट मिलता है। अभी भी एक्स चलने की जरूरत है।


3
वाह, यह एक बहुत ही भयानक विचार है जो आपके पास है।
होपलेस एनबीबी

-3

/ 755 की अनुमति निर्धारित करने के लिए मेरे लिए काम किया।

इसलिए पहले से जांच लें

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

अनुमतियाँ "drwxr-xr-x" (755) होनी चाहिए।


1
यह प्रश्न के पुनरावर्ती भाग को संबोधित नहीं करता है।
कैस्परद

नहीं, और यह 4755 2755 के साथ 6755 में भी मदद नहीं करता है। यदि यह सिर्फ / usr (यह अक्सर होता है) तो आप एक समान सिस्टम को पुन: ls -al कर सकते हैं और 755 को बाहर कर सकते हैं, यह 1000 से कम फाइलों की सूची छोड़ सकता है जिन्हें मैन्युअल रूप से निपटाया जा सकता है। बेशक src और हेडर वास्तव में कोई फर्क नहीं पड़ता।
मैकेंज़्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.