Saya tidak sengaja berlari
sudo chmod 755 -R /
dari pada
sudo chmod 755 -R ./
Saya menghentikannya setelah beberapa detik, tetapi sekarang ada beberapa masalah seperti
sudo: must be setuid root
Bagaimana saya bisa mengembalikan izin?
permissions
sudo
chmod
fl00r
sumber
sumber
sudo
berarti, bahwa Anda telah berpikir dua kali apa yang akan Anda lakukan!Upgrade from Ubuntu 11.04 to Ubuntu 11.04
. Terima opsi ini, dan itu akan menginstal ulang Ubuntu secara efektif untuk Anda, dengan cara yang paling tidak menyakitkan./
di akhir nama direktori untuk menentukan direktori sebagai target. Itu kebiasaan buruk , jangan lakukan itu, jangan pernah ! Itu.
dengan sendirinya nama direktori yang valid, tidak perlu menambahkannya/
. Jika semua orang mengikuti aturan ini, maka banyaksudo
operasi yang salah ketik tidak akan berpengaruh pada direktori root, jadi tidak ada salahnya dilakukan pada sistem mereka. Jangan lakukan itu!cd .
, misalnya, tidak melakukan apa pun.ls .
sama denganls
. Juga,..
ini adalah nama direktori yang berarti "induk.
", dan Anda mungkin sudah mengetahuinya./
di akhir. Jika Anda ingin melakukan ekspansi pathname hanya untuk direktori. Contoh daftar direktori di dalam direktori saat ini:echo */
Jawaban:
Singkatnya: Anda tidak bisa, instal ulang sistem Anda.
Maksud saya, izin Posix digunakan dan sangat diandalkan; ada banyak tempat di sistem file di mana izin yang salah akan merusak OS (SUID flags) atau bahkan lebih buruk, membuatnya terkena keamanan-bijaksana (
/etc/ssh/ssh_host_rsa_key
) sementara tampaknya berfungsi dengan baik.Karenanya, pemulihan seperti itu sulit dilakukan dengan benar. Kehilangan satu hal - dan Anda mengacaukannya. Anda telah mengacaukan
sudo chmod
perintah Anda (jika itu teman Anda dan bukan Anda, dia mungkin juga belajar beberapa pelajaran Linux) - dan itu perintah yang sangat sederhana. Pemulihan yang tepat akan menuntut lebih banyak perintah dan lebih banyak kewaspadaan. Bahkan jika Anda menggunakan skrip seseorang.Jadi percayalah, instal ulang. Ini adalah taruhan yang aman dan dijamin untuk membuat Anda keluar dari masalah.
Akhirnya, beberapa tips relevan di sini.
Pertama: menginstal ulang tidak akan terlalu menyakitkan jika Anda membuat
/home
partisi lain di lain waktu. Sebenarnya, mereka akan sangat mudah.Kedua: pertimbangkan untuk melakukan ilmu Linux gila di mesin virtual seperti VirtualBox, dan lakukan snapshot Anda.
Ketiga:
chmod -R .
bekerja. Titik dengan sendirinya.
adalah nama direktori yang valid. Tidak perlu menambahkan garis miring itu. Anda bisa menghindari risiko bencana melewatkan titik masuk;hanya
chmod: missing operand after ‘755’
VS sistem yang hancur.sumber
sudo
berarti Anda harus memeriksa dua kali.Saya menulis dan telah menggunakan selama beberapa tahun beberapa skrip Ruby untuk
rsync
izin dan kepemilikan. Scriptget-filesystem-acl
mengumpulkan semua informasi dengan secara rekursif melintasi semua file dan memasukkannya ke dalam file.acl
. Script.acl-restore
akan membaca.acl
dan menerapkan semuachown
's danchmod
' s.Anda dapat menjalankan
get-filesystem-acl
pada instalasi Ubuntu yang serupa dan kemudian menyalin.acl
file ke kotak chmod-rusak Anda, letakkan.acl
dan.acl-restore
di /, dan jalankan.acl-restore
.Anda harus memiliki root, jadi perbaiki
sudo
seperti yang disarankan Marco Ceppi.Saya dapat membuat dan memberi Anda
.acl
file untuk Ubuntu saya.get-filesystem-acl
.acl-restore
sumber
owner_id
yang tidak ditentukanfind SOME_DIR -depth -printf 'chmod %m %p\n' > saved_permission
Panjang: Anda bisa. Anda harus memasang sistem file dari Live CD dan mulai mengembalikan izin di tempat yang sesuai. Minimal untuk mendapatkan kembali sudo Anda akan ingin menjalankan
sudo chmod u+s /usr/bin/sudo
sementara di sesi LiveCD - yang akan memperbaiki harus setuid root.Namun, sepertinya akan lebih mudah untuk menginstal ulang sistem.
sumber
Saya akan mencoba menginstal ulang semua paket dengan
apt-get install --reinstall
, mungkin menggunakan keluarandpkg --get-selections | grep install
untuk mendapatkan daftar mereka.sumber
sudo apt-get autoremove
?autoremove
hanya menghapus paket yang belum Anda instal secara manual.apt-mark auto $pkg
/apt-mark manual $pkg
yang memungkinkan Anda untuk mengubah status "secara manual diinstal / diinstal secara otomatis" per-paket.Baiklah, saya belum menguji ini (jadi gunakan dengan risiko Anda sendiri), tetapi masih mungkin berhasil. Saya Akan menguji ini di mesin virtual ketika saya mendapat kesempatan untuk:
Pertama, dalam sistem yang masih berfungsi, saya melakukan yang berikut untuk mendapatkan semua izin file dalam daftar, melewatkan
/home/
direktori:Ini akan mencetak izin dan nama file untuk setiap file atau direktori pada sistem, diikuti oleh
\0
karakter (ini diperlukan nanti untuk menangani nama file aneh seperti yang berisi baris baru).Kemudian, pada sistem di mana izin file telah dikompromikan:
Ini akan membaca setiap baris
fileper.log
, menyimpan izin sebagai$perm
dan nama file sebagai$file
dan kemudian akan mengatur izin file (atau direktori) untuk apa pun yang tercantum dalamfileper.log
Beberapa hal yang perlu diperhatikan di sini:
/tmp/fileper.log
Anda mungkin mencantumkan pengaturan khusus, dan proc, dll.Apa yang saya sarankan adalah boot LiveCD dengan versi Linux yang Anda miliki di disk, jalankan perintah, modifikasi path ke tempat Anda memasang disk lokal, dan jalankan perintah kedua!
Saya telah menguji bahwa ketika di-boot dari CD / USB Ubuntu, saya dapat memilih untuk tidak memformat disk, artinya akan mengganti semua yang ada di
/
direktori, TAPI lewati/home/
direktori. Berarti pengguna Anda akan memiliki konfigurasi aplikasi / DATA (Musik, Video, Dokumen) masih utuh. Dan dengan mengganti file sistem,chmod
diatur ke nomor yang tepat di sana.sumber
chmod $(echo $LINE)
bukannya adilchmod $LINE
? Juga, Anda dapat menggunakan hanyafind
tanpastat
:find … -printf "%#m %p\n"
. Lebih baik lagi, Anda dapat membuat seluruh perintahfind … -printf "chmod %#m %p\n"
:, lalu jalankan file sebagai skrip.michael@NEXUS-TWO:~$ sudo find / -name '*' -exec stat -c "%a %n" {} \; >> /tmp/fileper.log
tetapi kemudian juga melewati/proc
dan beberapa tempat lain yang mungkin tidak Anda inginkan dalam daftar Anda.(Saya tahu saya tidak harus berkomentar dalam jawaban, tetapi tidak memiliki reputasi yang cukup untuk berkomentar.)
Jawaban blade19899 bekerja untuk saya kecuali untuk symlink. Misalnya itu diterapkan 755 ke / bin / bash, tetapi kemudian diterapkan 777 ke symlink / bin / rbash, secara efektif 777-ing / bin / bash.
Karena saya sudah memiliki file fileper.log, saya baru saja memodifikasi perintah tujuan-akhir:
sumber
chmod
.... effectively 777-ing /bin/bash
- tidak; bukan itu cara kerjanya. Apakah Anda mengatakan saya dapat mengganti/usr/bin/apt
dengan hal saya sendiri sebagai pengguna non-root , hanya dengan menulis melalui 777 symlink? :) Latihanlah beberapa pemikiran kritis; symlink tidak bisa, dan tidak, bekerja seperti itu. 777 izin untuk symlink adalah umum dan normal.Anda dapat mencoba mengembalikan izin dengan
apt-get
.Jika Anda tidak dapat menjalankan perintah ini dengan sudo, Anda mungkin perlu menjalankan boot ke mode pemulihan dan menjalankannya sebagai root.
Untuk boot ke mode pemulihan lihat https://wiki.ubuntu.com/RecoveryMode .
Dari http://hyperlogos.org/page/Restoring-Permissions-Debian-System
Catatan: Ini awalnya diposting di Forum Ubuntu tetapi saya tidak dapat menemukan posting asli.
Coba, secara berurutan,
Jika gagal:
Dan akhirnya, sebagai pilihan terakhir,
Menggunakan apt-get
Berikut snip yang relevan, DIedit UNTUK KELEBIHAN dan diformat ulang:
sumber
Saya punya masalah yang sama, saya bisa memperbaikinya. Dalam kasus saya Ubuntu 19.10
Buka terminal Anda dan ketik kode sederhana di bawah ini
buka terminal lain dan periksa perintah di bawah ini.
sumber