ดูเพิ่มเติม:
เหตุใดจึงเป็น "chmod -R 777 /" การทำลายล้าง
ฉันเปลี่ยนการอนุญาตไฟล์ซ้ำในไดเรกทอรีราก/
ด้วยการดำเนินการsudo chmod -R / 777
และหลังจากนั้นระบบของฉันจะไม่บูต (ฉันได้รับข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ" จำนวนมาก)
กรุณาช่วย.
ดูเพิ่มเติม:
เหตุใดจึงเป็น "chmod -R 777 /" การทำลายล้าง
ฉันเปลี่ยนการอนุญาตไฟล์ซ้ำในไดเรกทอรีราก/
ด้วยการดำเนินการsudo chmod -R / 777
และหลังจากนั้นระบบของฉันจะไม่บูต (ฉันได้รับข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ" จำนวนมาก)
กรุณาช่วย.
คำตอบ:
คุณกำลังมองหาสาเหตุที่หายไป บันทึกข้อมูลที่คุณต้องการและติดตั้งระบบปฏิบัติการใหม่
/etc
, /var/www
เนื้อหาเว็บเซิร์ฟเวอร์และฐานข้อมูล หยิบฮาร์ดไดรฟ์อื่นเปิดใช้งานเป็นอุปกรณ์หลักและติดตั้ง ที่เก็บไดรฟ์อื่นไว้เป็นข้อมูลสำรองจนกว่าคุณจะสามารถถ่ายโอนได้
ฉันรู้ว่า 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
เป็นไปได้ที่จะกลับมาจากสถานการณ์ที่ยุ่งเหยิงเช่นนี้โดยไม่ต้องติดตั้งระบบใหม่ ดีกว่าการใช้ระบบใหม่ที่สดใหม่อย่างแน่นอนไม่ว่าจะเป็นคีย์ 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" {}
ฉันแก้ไขสคริปต์จากด้านบนและเป็นดังนี้:
#!/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
ข้อผิดพลาดในโพสต์ของฉันโพสต์ในฐานะผู้ใช้ 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
หากคุณยังคงสามารถเปิดตัว/usr/sbin/synaptic
ได้มักจะแก้ไขได้
เรียงลำดับแพ็คเกจตามสถานะ (แพ็คเกจที่ติดตั้งด้านบน) เลือกแพ็คเกจที่ติดตั้งทั้งหมดคลิกขวาและเลือกติดตั้งใหม่ จากนั้นนำไปใช้ซึ่งจะแจ้งdpkg
ให้แตกไฟล์ทั้งหมดสำหรับแพ็คเกจเหล่านั้นอีกครั้ง (คุณจะสูญเสียการดัดแปลงใด ๆ ในท้องถิ่น (แต่ไม่ใช่การเปลี่ยนแปลงไฟล์กำหนดค่า))
มันอาจไม่ได้รับการแก้ไขทุกอย่างแม้ว่า
สิ่งอื่น ๆ คือถ้าคุณไปเป็น/var/cache
คุณสามารถเรียกสำหรับแพคเกจติดตั้งทุกสายแล้วdpkg -x <package name> /
dpkg --reconfigure -a
นอกจากนี้หากคุณใช้งาน Ubuntu คุณสามารถอัปเกรด dist ซึ่งมักจะแก้ไขข้อผิดพลาดจำนวนมาก (สมมติว่าคุณยังไม่ได้เปิดตัวล่าสุด) โดยทั่วไปเมื่อฉันพยายามที่จะแก้ไขข้อผิดพลาดเช่นนี้ฉันลองแก้ไขอย่างง่ายเหล่านี้และหากพวกเขาไม่เพียงทำให้มันทำงานอีกครั้งก็ถึงเวลาติดตั้งใหม่
บูตจากซีดีสด จากนั้นเริ่มต้นเชลล์แล้ว sudo -s จากนั้น chmod 777 / * จากนั้น chmod 600 / etc / passwd เคอร์เนลจะตื่นตระหนกหาก init ล้มเหลวซึ่งจะเกิดขึ้นหากสคริปต์ / lib / init ไม่สามารถเรียกใช้งานได้ บู๊ตเป็นโหมดผู้ใช้เดี่ยวสำหรับ Lilo Linux 1 และเรียกใช้สคริปต์ของ user102453 ด้านบน สิ่งนี้จะได้รับการบูตระบบให้พร้อมท์ ยังคงต้องเรียกใช้ X
การตั้งค่าการอนุญาตจาก / เป็น 755 ใช้ได้สำหรับฉัน
ดังนั้นตรวจสอบก่อนด้วย
root@ubuntu:/# cd /
root@ubuntu:/# ls -ld
สิทธิ์ควรเป็น "drwxr-xr-x" (755)