Ubuntu 10.04 'sudo chmod / 777' 'den sonra onarım / geri yükleme


12

Ayrıca Bakınız:
“chmod -R 777 /” neden yıkıcıdır?

Dosya izinlerini özyinelemeyi kök dizinde /yürüterek değiştirdim sudo chmod -R / 777ve bundan sonra sistemim önyükleme yapmıyor ("izin reddedildi" hataları alıyorum).

Lütfen yardım et.


Belki canlı bir Ubuntu sistemi kullanabilirsiniz. Yüklediğiniz paketleri normal sisteminize yükleyin ve 'klonlamak' için bir komut dosyası yazmak ister misiniz? Bu sadece bir fikir. Belki başka biri bunun iyi olup olmadığını söyleyebilir.
Darokthar

Bunu dikkatlice izleyin: Kurtarma modunda aç> Sürücüyü Bağla> Etkileşimli kabuğu aç> takılı sabit sürücüye cd (benim için / mnt / [dizin] içinde)> chmod -R 755 ./**> #cd ./etc/ sSH / #chmod 600 modülü #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

Cevabı StackExchange'te göndermek için yeterli itibarım yok ama size yardımcı olmak istedim.
Smit Patel

Yanıtlar:


23

Kayıp bir nedene bakıyorsunuz. İhtiyacınız olan verileri kaydedin ve işletim sistemini yeniden yükleyin.


Evet. Bunu yapmak için harcadığınız zaman deli olacak ve tam olarak doğru yaptığınızdan emin olmayacaksınız. Temizlemeye başlayın, verilerinizi yedekten geri yükleyin.
ThatGraemeGuy

1
Bu geri adım atıyor ve ondan bir şeyler öğreniyor. En önemli alanlarınız ana klasör içeriğiniz, yaptığınız yapılandırma değişiklikleri /etc, /var/wwwweb sunucusu içeriği ve veritabanlarıdır. Başka bir sabit disk alın, birincil sürücünüz olarak etkinleştirin ve yükleyin. Bu, diğer sürücünüzü aktarabilinceye kadar yedek olarak korur.
Fiasco Labs

Aynı şeyi yaptım (ve evet, daha iyi biliyorum) ve burada birkaç fikir denedim ama makineyi tekrar iyi bir duruma getirmem haftalar alacaktı. Bunun yerine verilerinizi yedeklemeyi ve Ubuntu'yu yeniden yüklemeyi deneyin.
MikeHoss

5

Ben dpkg veritabanlarında izinleri depolar biliyorum ve yardımcı olabilir aşağıdaki komut dosyası google bulundu .

Düzenleme: Aslında senaryoya hızlı bir göz vardı ve sanki PERMS MODE gider sihirli biraz eksik gibi görünüyor örneğin dpkg -c örneğin "-rw-r - r--" verir ama istediğiniz 0644, şu anda işteyim, bu yüzden bu anda dönüşümü yapmak için zamanım olduğundan emin değilim ama bu parçayı eklemek için başka kimse atlamamışsa daha sonra geri gelebilirim.

Burada ilginç görünen bir senaryo var

#!/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 dosyalarıyla da ilgileniyor mu?
Yüzük Ø

4

Öyle mümkün Böyle dağınık bir durumdan geri gelmek için sistemin yeniden olmadan. Peki, daha yeni bir sistemi bir USB anahtarından ya da bir Virutal Box'da (ya da benzeri) çift önyükleme sisteminiz varsa çalıştırıyor.

Yine aynı tür bir konuda (yazdığım bir senaryoda bazı hata) koştum ve çözdüm, ancak bazı uzmanların yardımını sormanız gerekiyor. Çok dikkatli olun!

İlk olarak, durumumu çözmek daha kolaydı çünkü çift önyükleme sistemim (ubuntu ve eski fedora kurulumum) vardı, ancak sistemi bir USB anahtarı (veya belki bir CD / DVD) için çalıştırmak da aynı şeyi yapmalı.

MPOINT = / / ubuntu montaj

Önce dosya sistemlerimi şu şekilde monte ettim (bağlama noktalarını oluşturmayı unutmayın): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Daha sonra izinleri çalışan sistemden dağınık olana kopyalamak için aşağıdaki komutu çalıştırdım (benim sorunum sadece birkaç kritik dizinde) (aslında, benim durumumda, fedora altında Virtual Box'a bir ubuntu sistemi kurdum ve izinleri orada aldı):

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

Sonra restoreperms.sh betiğini çalıştırdım.

Yine ubuntu'da önyükleme yapabildim.

Restoreperms.sh içeriği aşağıdaki gibi olacaktır:

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

Ben test etmedi ama sahipleri ve sahibi grupları için de çalışması gerekir. Gibi bir şey:

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

Tabii ki burada, UID ve GID'nin her iki sistemde de aynı olmasına dikkat etmelisiniz, ancak sistemle ilgili kullanıcılar ve gruplar için bu bir sorun olmamalıdır.

Rk:

Bunun için önemli bir şey, bir yükleme diskini kullandığınız sürümle senkronize tutmak veya en azından geçerli ubuntu sürümüyle çalışmaktır. Şimdi, bu bilgileri bir cronjob içinde, her gün (hafta olabilir) çalışan bu bilgileri tutmak için var. Bir dahaki sefere çözümü kolaylaştıracak, ama tabii ki, şimdi sahip olduğum gibi, bir daha asla olmayacak. ;-) Böyle bir şey:

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: bağlantıları desteklemek için birleştirilmiş komut:

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


4

Komut dosyasını yukarıdan değiştirdim ve şöyle görünüyor:

#!/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 ile aynı fikirde olmak, sadece yeniden yükleme hangi dosya / dizinin hangi izne ihtiyacı olduğunu analiz etmekten daha hızlı olabilir. Ancak yeniden yükleme bir seçenek değilse, işte bir fikir:

  1. Başka bir makineye varsayılan bir Ubuntu yüklemesi yükleme
  2. Sistemdeki her dosya / dizinin izinlerini almak için bu komutu çalıştırın: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Dosyayı chmod.shyanlış izinlerle bilgisayara kopyalayın
  4. Bu dosyayı yürütün chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Umarım çoğu şey işe yarar (inandığım her şey işe yaramaz)

2

ERRATUM kullanıcı kullanıcısı olarak gönderilen gönderime100740: bağlantıları desteklemek için kombine komut:

/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

Hala başlatabiliyorsanız /usr/sbin/synaptic, genellikle düzeltilebilir.

Paketleri duruma göre sıralayın (üstte kurulu paketler), kurulu tüm paketleri seçin, sağ tıklayın ve yeniden yükle'yi seçin. Ardından uygulayın, dpkgbu paketler için tüm dosyaları yeniden çıkarmanızı isteyecektir . (Yerel değişiklikleri kaybedersiniz (ancak dosya değişikliklerini yapılandırmazsınız).)

Yine de her şeyi düzeltmeyebilir.
Diğer bir şey, içeri /var/cachegirerseniz, dpkg -x <package name> /yüklü her paketi arayabilir ve sonra arayabilirsiniz dpkg --reconfigure -a. Ayrıca, Ubuntu kullanıyorsanız, genellikle çok sayıda hatayı düzelten bir dağıtım yükseltme yapabilirsiniz (en son sürümde olmadığınızı varsayarak). Genellikle böyle bir hatayı düzeltmeye çalıştığımda, bu basit düzeltmeleri denerim ve sadece tekrar çalışmalarını sağlamazlarsa, yeniden yükleme zamanı.


-2

canlı CD'den önyükleme. sonra kabuk başlat, sonra sudo -s. Sonra chmod 777 / *, sonra chmod 600 / etc / passwd. init başarısız olduğunda çekirdek / lib / init komut dosyaları çalıştırılamazsa panik yapar. Lilo Linux 1 için tek kullanıcı moduna önyükleme yapın ve yukarıdaki user102453 komut dosyasını çalıştırın. Bu sistem önyükleme istemi alır. Hala X'i çalıştırmanız gerekiyor.


3
Vay canına, bu orada oldukça korkunç bir fikir.
HopelessN00b

-3

/ İçin 755 iznini ayarlamak benim için çalıştı.

Bu yüzden önce

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

İzinler "drwxr-xr-x" olmalıdır (755).


1
Bu sorunun özyinelemeli kısmını ele almaz.
kasperd

Hayır, 4755 2755 ve 6755 ile de yardımcı olmuyor. Sadece / usr ise (genellikle) benzer bir sistemi özyinelemeli olarak ls -al olabilir ve 755'i hariç tutabilirsiniz, bu elle ele alınabilen 1000'den az dosyanın bir listesini bırakabilir. Elbette src ve başlıklar gerçekten önemli değil.
mckenzm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.