Cách sửa chữa / khôi phục Ubuntu 10.04 sau 'sudo chmod / 777'


12

Xem thêm:
Tại sao là chmod -R 777 / hung phá hoại?

Tôi đã thay đổi quyền truy cập tệp theo cách đệ quy trên thư mục gốc /bằng cách thực thi sudo chmod -R / 777và sau đó hệ thống của tôi sẽ không khởi động (tôi nhận được rất nhiều lỗi "quyền bị từ chối").

Xin vui lòng giúp đỡ.


Có lẽ bạn có thể sử dụng một hệ thống Ubuntu trực tiếp. Cài đặt các gói bạn đã cài đặt trên hệ thống bình thường của bạn và sau đó viết một tập lệnh để 'sao chép' chúng? Đây chỉ là một ý tưởng. Có lẽ người khác có thể nói nếu điều này là tốt.
Darokthar

Thực hiện theo cách này một cách cẩn thận: Mở trong chế độ khôi phục> Mount Drive> Mở vỏ tương tác> cd vào ổ cứng được gắn (đối với tôi nó nằm trong / mnt / [thư mục])> chmod -R 755 ./**> #cd ./etc/ ssh / #chmod 600 môđun #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

Tôi không có đủ danh tiếng để đăng câu trả lời trong StackExchange nhưng tôi muốn giúp bạn.
Smit Patel

Câu trả lời:


23

Bạn đang nhìn vào một nguyên nhân bị mất. Lưu dữ liệu bạn cần và cài đặt lại hệ điều hành.


Vâng Lượng thời gian bạn dành cho việc này sẽ rất điên rồ và bạn sẽ không bao giờ biết chắc rằng mình đã làm đúng. Bắt đầu làm sạch, khôi phục dữ liệu của bạn từ bản sao lưu.
ThatGraemeGuy

1
Đây là một trong những bước lùi và học hỏi từ nó mọi thứ. Các lĩnh vực quan trọng nhất của bạn là nội dung thư mục nhà của bạn, thay đổi cấu hình bạn đã thực hiện /etc, /var/wwwnội dung máy chủ web và cơ sở dữ liệu. Lấy một ổ cứng khác, kích hoạt nó làm chính và cài đặt. Điều đó bảo tồn ổ đĩa khác của bạn như là bản sao lưu cho đến khi bạn có thể chuyển nó.
Phòng thí nghiệm Fiasco

Tôi đã làm điều tương tự (và, vâng, tôi biết rõ hơn) và đã thử một vài ý tưởng ở đây nhưng phải mất vài tuần để tôi đưa máy trở lại trạng thái tốt. Thay vào đó hãy cố gắng sao lưu dữ liệu của bạn và cài đặt lại Ubuntu.
MikeHoss

4

Tôi biết dpkg lưu trữ các quyền trong cơ sở dữ liệu và tôi đã tìm thấy đoạn mã sau google có thể giúp ích.

Chỉnh sửa: Tôi thực sự đã xem nhanh kịch bản và có vẻ như nó thiếu một chút phép thuật chuyển từ PERMS sang MODE, ví dụ dpkg -c đưa ra ví dụ "-rw-r - r--" nhưng bạn muốn 0644, tôi đang làm việc ngay bây giờ vì vậy tôi không chắc mình có thời gian để thực hiện chuyển đổi ngay lập tức nhưng tôi có thể quay lại sau nếu không có ai khác nhảy vào để thêm bit đó.

Có một kịch bản ở đây có vẻ thú vị

#!/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

Nó cũng đối phó với các tập tin 04555?
Đổ chuông

4

thể quay lại từ một tình huống lộn xộn như vậy , mà không cần cài đặt lại hệ thống. Chà, chính xác hơn là chạy một hệ thống mới mới từ khóa USB hoặc trong Hộp Virutal (hoặc hơn) nếu bạn có hệ thống khởi động kép.

Tôi đã chạy lại cùng loại về vấn đề (một số lỗi trong kịch bản tôi đang viết) và đã giải quyết nó, nhưng bạn cần phải nhờ một số chuyên gia giúp đỡ. Hãy thật thận trọng!

Đầu tiên, tình huống của tôi dễ giải quyết hơn vì tôi có hệ thống khởi động kép (cài đặt Ubuntu và fedora cũ), nhưng chạy hệ thống cho khóa USB (hoặc có thể là CD / DVD) cũng sẽ làm điều tương tự.

MPOINT = / mount / ubfox

Đầu tiên tôi gắn các hệ thống tệp của mình như thế này (đừng quên tạo các điểm gắn kết): mount / dev / ubfox / root $ MPOINT mount / dev / ub Ubuntu / home $ MPOINT / home

Sau đó, tôi đã chạy lệnh sau (vấn đề của tôi chỉ nằm ở một vài thư mục quan trọng) để sao chép các quyền trên từ hệ thống đang chạy sang hệ thống lộn xộn (thực tế, trong trường hợp của tôi, tôi đã cài đặt một hệ thống Ubuntu trong Virtual Box trong fedora và có quyền ở đó):

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

Và sau đó tôi chạy tập lệnh restoreperms.sh.

Tôi đã có thể khởi động lại trên Ubuntu.

Nội dung của restoreperms.sh sẽ giống như:

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

Tôi đã không kiểm tra nó nhưng nó cũng phải hoạt động cho chủ sở hữu và nhóm chủ sở hữu. Cái gì đó như:

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

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

Tất nhiên, bạn phải lưu ý ở đây, rằng UID và GID giống nhau trên cả hai hệ thống, nhưng đối với người dùng và nhóm liên quan đến hệ thống, điều này không phải là một vấn đề.

Rk:

Một điều quan trọng cho việc này là giữ cho đĩa cài đặt được đồng bộ hóa với phiên bản bạn đang sử dụng hoặc ít nhất là hoạt động với phiên bản Ubuntu hiện tại. Bây giờ, tôi có các lệnh này trong một cronjob, chạy mỗi ngày (có thể là vài tuần) để giữ thông tin đó. Nó sẽ làm cho giải pháp dễ dàng hơn vào lần tới, nhưng, tất nhiên, như tôi có điều này bây giờ, nó sẽ không bao giờ xảy ra nữa. ;-) Một cái gì đó như thế này:

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

EDIT: để hỗ trợ các liên kết, lệnh kết hợp là:

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


4

Tôi đã sửa đổi tập lệnh từ phía trên và nó trông như thế này:

#!/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

Đồng ý với blueben, chỉ cần cài đặt lại có thể nhanh hơn phân tích tệp / thư mục nào cần sự cho phép. Nhưng nếu cài đặt lại không phải là một tùy chọn, đây là một ý tưởng:

  1. Cài đặt cài đặt Ubuntu mặc định trên máy khác
  2. Chạy lệnh này để có được quyền của mọi tệp / thư mục trên hệ thống: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Sao chép tệp chmod.shvào máy tính với quyền sai
  4. Thực hiện tập tin đó chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Hy vọng hầu hết mọi thứ hoạt động (không phải mọi thứ tôi sẽ làm việc)

2

ERRATUM cho bài đăng của tôi được đăng dưới dạng người dùng user100740: để hỗ trợ các liên kết, lệnh kết hợp là:

/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

Nếu bạn vẫn có thể khởi chạy /usr/sbin/synaptic, nó thường có thể sửa được.

Sắp xếp các gói theo trạng thái (các gói đã cài đặt ở trên cùng), chọn tất cả các gói đã cài đặt, nhấp chuột phải và chọn cài đặt lại. Sau đó áp dụng, điều đó sẽ nhắc dpkggiải nén lại tất cả các tệp cho các gói đó. (Bạn sẽ mất mọi sửa đổi cục bộ (nhưng không thay đổi tệp cấu hình).)

Nó có thể không nhận được mọi thứ cố định mặc dù.
Một điều khác là nếu bạn đi vào /var/cache, bạn có thể gọi dpkg -x <package name> /cho mọi gói đã cài đặt, sau đó gọi dpkg --reconfigure -a. Ngoài ra, nếu bạn đang sử dụng Ubuntu, bạn có thể thực hiện nâng cấp dist, thường sửa rất nhiều lỗi (giả sử bạn chưa có bản phát hành mới nhất). Nói chung, khi tôi đang cố gắng sửa một lỗi như thế này, tôi sẽ thử các cách khắc phục đơn giản này và nếu chúng không làm cho nó hoạt động trở lại, thì đã đến lúc cài đặt lại.


-2

khởi động từ đĩa CD trực tiếp. sau đó bắt đầu shell, sau đó sudo -s. Sau đó chmod 777 / *, rồi chmod 600 / etc / passwd. kernel sẽ hoảng loạn nếu init thất bại sẽ xảy ra nếu tập lệnh / lib / init không được thực thi. khởi động sang chế độ người dùng đơn, cho Lilo Linux 1 và chạy tập lệnh của người dùng 102453 ở trên. Điều này được sytem khởi động để nhắc. Vẫn cần để X chạy.


3
Wow, đó là một ý tưởng khá khủng khiếp mà bạn có ở đó.
HoplessN00b

-3

Đặt quyền cho / đến 755 làm việc cho tôi.

Vì vậy, kiểm tra đầu tiên với

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

Quyền phải là "drwxr-xr-x" (755).


1
Điều này không giải quyết phần đệ quy của câu hỏi.
kasperd

Không, và nó cũng không giúp được gì với 4755 2755 và 6755. Nếu chỉ là / usr (thường là vậy), bạn có thể đệ quy ls -al một hệ thống tương tự và loại trừ 755, điều này có thể để lại một danh sách ít hơn 1000 tệp có thể được xử lý thủ công. Tất nhiên src và tiêu đề không thực sự quan trọng.
mckenzm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.