วิธีการซ่อมแซม / กู้คืนอูบุนตู 10.04 หลังจาก 'sudo chmod / 777'


12

ดูเพิ่มเติม:
เหตุใดจึงเป็น "chmod -R 777 /" การทำลายล้าง

ฉันเปลี่ยนการอนุญาตไฟล์ซ้ำในไดเรกทอรีราก/ด้วยการดำเนินการsudo chmod -R / 777และหลังจากนั้นระบบของฉันจะไม่บูต (ฉันได้รับข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ" จำนวนมาก)

กรุณาช่วย.


บางทีคุณอาจใช้ระบบ Ubuntu สด ติดตั้งแพคเกจที่คุณติดตั้งบนระบบปกติแล้วเขียนสคริปต์เพื่อ 'โคลน' พวกเขาหรือไม่ นี่เป็นเพียงความคิด บางทีคนอื่นอาจพูดได้ว่านี่เป็นสิ่งที่ดี
Darokthar

ทำตามนี้อย่างระมัดระวัง: เปิดในโหมดการกู้คืน> Mount Drive> เปิดเชลล์แบบโต้ตอบ> 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
Smit Patel

ฉันไม่มีชื่อเสียงพอที่จะโพสต์คำตอบใน StackExchange แต่ฉันต้องการช่วยคุณ
Smit Patel

คำตอบ:


23

คุณกำลังมองหาสาเหตุที่หายไป บันทึกข้อมูลที่คุณต้องการและติดตั้งระบบปฏิบัติการใหม่


ได้. ระยะเวลาที่คุณใช้ในการทำเช่นนี้จะบ้าและคุณจะไม่มีทางรู้แน่ว่าคุณทำให้ถูกต้อง เริ่มต้นใหม่ทั้งหมดคืนค่าข้อมูลของคุณจากการสำรองข้อมูล
ThatGraemeGuy

1
นี่เป็นหนึ่งในขั้นตอนเหล่านั้นและเรียนรู้จากมัน พื้นที่ที่สำคัญที่สุดของคุณเป็นเนื้อหาของโฟลเดอร์ที่บ้านของคุณ, การตั้งค่าการเปลี่ยนแปลงที่คุณได้ทำใน/etc, /var/wwwเนื้อหาเว็บเซิร์ฟเวอร์และฐานข้อมูล หยิบฮาร์ดไดรฟ์อื่นเปิดใช้งานเป็นอุปกรณ์หลักและติดตั้ง ที่เก็บไดรฟ์อื่นไว้เป็นข้อมูลสำรองจนกว่าคุณจะสามารถถ่ายโอนได้
Fiasco Labs

ฉันทำสิ่งเดียวกัน (และใช่ฉันรู้ดีกว่า) และลองใช้ความคิดหลาย ๆ อย่างที่นี่ แต่ใช้เวลาหลายสัปดาห์กว่าจะได้เครื่องกลับสู่สภาวะที่เหมาะสม พยายามสำรองข้อมูลของคุณและติดตั้ง Ubuntu ใหม่
MikeHoss

5

ฉันรู้ว่า dpkg จัดเก็บสิทธิ์ในฐานข้อมูลและฉันพบgoogle script ต่อไปนี้ซึ่งอาจช่วยได้

แก้ไข: จริง ๆ แล้วฉันได้ดูสคริปต์อย่างรวดเร็วและดูเหมือนว่ามันหายไปเล็กน้อยของเวทมนตร์ที่เปลี่ยนจาก PERMS เป็น MODE เช่น dpkg -c ยกตัวอย่างเช่น "-rw-r - r--" แต่คุณต้องการ 0644, ฉันกำลังทำงานอยู่ตอนนี้ดังนั้นฉันไม่แน่ใจว่าฉันมีเวลาที่จะทำ Conversion ในทันทีนี้ แต่ฉันอาจกลับมาใหม่ในภายหลังหากไม่มีใครกระโดดเข้ามาเพื่อเพิ่มบิตนั้น

มีสคริปต์ที่นี่ซึ่งดูน่าสนใจ

#!/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 (หรือมากกว่านั้น) หากคุณมีระบบบูทคู่

ฉันพบปัญหาเดิมอีกครั้ง (ข้อผิดพลาดบางอย่างในสคริปต์ที่ฉันเขียน) และแก้ไขได้ แต่คุณต้องขอความช่วยเหลือจากผู้เชี่ยวชาญ ระวังตัวมาก!

ก่อนอื่นสถานการณ์ของฉันนั้นง่ายกว่าที่จะแก้เพราะฉันมีระบบบูทคู่ (อูบุนตูและ fedora เก่าของฉันติดตั้ง) แต่การรันระบบสำหรับคีย์ USB (หรืออาจเป็นซีดี / ดีวีดี) ควรทำสิ่งเดียวกัน

MPoint = / mount / อูบุนตู

ครั้งแรกที่ฉันติดตั้งระบบไฟล์ของฉันเช่นนี้ (อย่าลืมที่จะสร้างจุดเชื่อมต่อ): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

จากนั้นฉันก็รันคำสั่งต่อไปนี้ (ปัญหาของฉันมีเพียงไม่กี่ - สำคัญ - ไดเรกทอรี) เพื่อคัดลอกสิทธิ์จากระบบที่ทำงานไปยังยุ่งหนึ่ง (อันที่จริงในกรณีของฉันฉันติดตั้งระบบ Ubuntu ในกล่องเสมือนภายใต้ fedora และได้รับอนุญาตที่นั่น):

ค้นหา / etc / usr / bin -exec stat - รูปแบบ "chmod% a $ {MPOINT}% n" {} \; > /tmp/restoreperms.sh

จากนั้นฉันก็รันสคริปต์ 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 - จัดรูปแบบ '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. ติดตั้ง Ubuntu เริ่มต้นติดตั้งบนเครื่องอื่น
  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: เพื่อสนับสนุนลิงก์คำสั่งแบบรวมคือ:

/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นอกจากนี้หากคุณใช้งาน Ubuntu คุณสามารถอัปเกรด dist ซึ่งมักจะแก้ไขข้อผิดพลาดจำนวนมาก (สมมติว่าคุณยังไม่ได้เปิดตัวล่าสุด) โดยทั่วไปเมื่อฉันพยายามที่จะแก้ไขข้อผิดพลาดเช่นนี้ฉันลองแก้ไขอย่างง่ายเหล่านี้และหากพวกเขาไม่เพียงทำให้มันทำงานอีกครั้งก็ถึงเวลาติดตั้งใหม่


-2

บูตจากซีดีสด จากนั้นเริ่มต้นเชลล์แล้ว sudo -s จากนั้น chmod 777 / * จากนั้น chmod 600 / etc / passwd เคอร์เนลจะตื่นตระหนกหาก init ล้มเหลวซึ่งจะเกิดขึ้นหากสคริปต์ / lib / 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 สิ่งนี้สามารถเก็บรายการไฟล์ที่น้อยกว่า 1,000 ไฟล์ซึ่งสามารถจัดการได้ด้วยตนเอง แน่นอน src และส่วนหัวไม่สำคัญจริงๆ
mckenzm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.