Cara memperbaiki / mengembalikan ubuntu 10.04 setelah 'sudo chmod / 777'

12

Lihat Juga:
Mengapa “chmod -R 777 /” destruktif?

Saya mengubah izin file secara rekursif pada direktori root /dengan mengeksekusi sudo chmod -R / 777, dan setelah itu sistem saya tidak bisa boot (saya mendapatkan banyak kesalahan "izin ditolak").

Tolong bantu.

Marcin
sumber
Mungkin Anda bisa menggunakan sistem Ubuntu langsung. Instal paket yang telah Anda instal pada sistem normal Anda dan kemudian tulis skrip untuk 'mengkloning' mereka? Ini hanya sebuah ide. Mungkin orang lain bisa mengatakan kalau ini bagus.
Darokthar
Ikuti ini dengan hati-hati: Buka dalam mode pemulihan> Mount Drive> Buka shell interaktif> cd ke hard drive yang terpasang (bagi saya itu ada di / mnt / [direktori])> chmod -R 755 ./**> #cd ./etc/ ssh / #chmod 600 modulus #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
Saya tidak memiliki reputasi yang cukup untuk mengirim jawaban di StackExchange tetapi saya ingin membantu Anda.
Smit Patel

Jawaban:

23

Anda melihat tujuan yang hilang. Simpan data yang Anda butuhkan, dan instal ulang sistem operasi.

blueben
sumber
Ya. Jumlah waktu yang Anda habiskan untuk melakukan ini akan menjadi gila dan Anda tidak akan pernah tahu pasti bahwa Anda melakukannya dengan benar. Mulai bersihkan, kembalikan data Anda dari cadangan.
ThatGraemeGuy
1
Ini adalah salah satu langkah mundur dan belajar dari hal-hal itu. Area terpenting Anda adalah konten folder rumah, perubahan konfigurasi yang Anda buat /etc, /var/wwwkonten server web , dan basis data. Raih hard drive lain, aktifkan sebagai drive utama dan instal. Itu mempertahankan drive Anda yang lain sebagai cadangan hingga Anda dapat mentransfernya.
Fiasco Labs
Saya melakukan hal yang sama (dan, ya, saya tahu lebih baik) dan mencoba beberapa ide di sini tetapi akan butuh berminggu-minggu bagi saya untuk mendapatkan mesin kembali ke keadaan yang layak. Alih-alih mencoba untuk membuat cadangan data Anda dan instal ulang Ubuntu.
MikeHoss
4

Saya tahu dpkg menyimpan izin di basis data dan saya menemukan skrip google berikut yang dapat membantu.

Sunting: Saya sebenarnya melihat sekilas skrip dan sepertinya ada sedikit keajaiban yang beralih dari PERMS ke MODE misalnya dpkg -c memberi contoh "-rw-r - r--" tetapi Anda ingin 0644, saya sedang bekerja sekarang jadi saya tidak yakin saya punya waktu untuk melakukan konversi pada saat ini tetapi saya dapat kembali lagi nanti jika tidak ada orang lain yang ikut menambahkan bit itu.

Ada skrip di sini yang terlihat menarik

#!/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
James
sumber
apakah ini juga menangani file 04555?
Dering Ø
4

Hal ini dimungkinkan untuk kembali dari situasi yang berantakan , tanpa menginstal ulang sistem. Nah, lebih tepatnya menjalankan sistem baru baik dari kunci USB atau dalam Kotak Virutal (atau lebih) jika Anda memiliki sistem dual boot.

Saya menjalankan lagi jenis yang sama pada masalah (beberapa bug dalam skrip yang saya tulis) dan menyelesaikannya, tetapi Anda perlu meminta bantuan beberapa ahli. Berhati-hatilah!

Pertama, situasi saya lebih mudah untuk diselesaikan karena saya memiliki sistem dual boot (ubuntu dan instalasi fedora lama saya), tetapi menjalankan sistem untuk kunci USB (atau mungkin CD / DVD) harus melakukan hal yang sama.

MPOINT = / mount / ubuntu

Pertama saya memasang sistem file saya seperti ini (jangan lupa untuk membuat poin mount): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Kemudian saya menjalankan perintah berikut (masalah saya hanya ada di beberapa direktori kritis) untuk menyalin izin dari sistem yang sedang berjalan ke sistem yang berantakan (sebenarnya, dalam kasus saya, saya menginstal sistem ubuntu di Virtual Box di bawah fedora di bawah fedora dan mendapat izin di sana):

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

Dan kemudian saya menjalankan skrip restoreperms.sh.

Saya bisa boot lagi di ubuntu.

Isi dari restoreperms.sh akan menjadi seperti:

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

Saya tidak mengujinya tetapi harus bekerja untuk pemilik dan grup pemilik juga. Sesuatu seperti:

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

Tentu saja, Anda harus berhati-hati di sini, bahwa UID dan GID adalah sama di kedua sistem, tetapi untuk pengguna dan grup yang terkait dengan sistem, ini seharusnya tidak menjadi masalah.

Rk:

Yang penting untuk ini adalah menjaga agar disk instalasi tetap disinkronkan dengan versi yang Anda gunakan, atau setidaknya berfungsi dengan versi ubuntu saat ini. Sekarang, saya memiliki perintah ini di cronjob, berjalan setiap hari (bisa berminggu-minggu) untuk menyimpan informasi itu. Ini akan membuat solusinya lebih mudah di lain waktu tetapi, tentu saja, karena saya memiliki ini sekarang, itu tidak akan pernah terjadi lagi. ;-) Sesuatu seperti ini:

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: untuk mendukung tautan, perintah gabungan adalah:

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

Skyhawk
sumber
4

Saya memodifikasi skrip dari atas dan terlihat seperti ini:

#!/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
pengguna102453
sumber
3

Setuju dengan blueben, hanya menginstal ulang mungkin lebih cepat daripada menganalisis file / direktori mana yang memerlukan izin. Tetapi jika menginstal ulang bukanlah suatu pilihan, inilah ide:

  1. Instal instalasi Ubuntu default di komputer lain
  2. Jalankan perintah ini untuk mendapatkan izin dari setiap file / direktori pada sistem: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Salin file chmod.shke komputer dengan izin yang salah
  4. Jalankan file itu chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Berharap sebagian besar hal berfungsi (saya yakin tidak semuanya akan berhasil)
berat
sumber
2

ERRATUM ke posting saya diposkan sebagai pengguna user100740: untuk mendukung tautan, perintah gabungannya adalah:

/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
jlovi
sumber
2

Jika Anda masih bisa meluncurkan /usr/sbin/synaptic , itu sering diperbaiki.

Urutkan paket berdasarkan status (paket yang diinstal di bagian atas), pilih semua paket yang diinstal, klik kanan dan pilih instal ulang. Kemudian terapkan, itu akan memintadpkg untuk mengekstraksi ulang semua file untuk paket-paket itu. (Anda akan kehilangan modifikasi lokal apa pun (tetapi tidak mengonfigurasi perubahan file).)

Mungkin tidak semuanya diperbaiki.
Hal lainnya adalah jika Anda masuk /var/cache, Anda dapat menelepon dpkg -x <package name> /untuk setiap paket yang diinstal, lalu menelepon dpkg --reconfigure -a. Juga, jika Anda menggunakan Ubuntu, Anda dapat melakukan upgrade dist yang sering memperbaiki banyak kesalahan (dengan asumsi Anda belum pada rilis terbaru). Secara umum ketika saya mencoba untuk memperbaiki kesalahan seperti ini, saya mencoba perbaikan sederhana ini dan jika mereka tidak membuatnya berfungsi lagi, maka sekarang saatnya untuk menginstal ulang.

Perkins
sumber
-2

boot dari live CD. lalu mulai shell, lalu sudo -s. Kemudian chmod 777 / *, lalu chmod 600 / etc / passwd. kernel akan panik jika init gagal yang akan terjadi jika skrip / lib / init tidak dapat dieksekusi. boot ke mode pengguna tunggal, untuk Lilo Linux 1, dan jalankan skrip user102453 di atas. Ini membuat sistem sytem boot ke prompt. Masih perlu menjalankan X.

Wiley
sumber
3
Wow, itu ide yang sangat buruk yang Anda miliki di sana.
HopelessN00b
-3

Pengaturan izin / ke 755 bekerja untuk saya.

Jadi, periksa dulu dengan

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

Izin harus "drwxr-xr-x" (755).

Stefan
sumber
1
Ini tidak membahas bagian rekursif dari pertanyaan.
kasperd
Tidak, dan itu juga tidak membantu dengan 4755 2755 dan 6755. Jika hanya / usr (seringkali) Anda dapat secara rekursif ls -al sistem yang sama dan mengecualikan 755, ini dapat meninggalkan daftar kurang dari 1000 file yang dapat ditangani secara manual. Tentu saja src dan header tidak terlalu penting.
mckenzm