Bagaimana cara mengembalikan perintah chown?

17

Jika saya menjalankan:

sudo chown -R user:user /

Bisakah saya mengembalikannya ke tempat sebelum saya menjalankannya?

fronthem
sumber
1
Sama seperti peringatan kepada orang lain: Perintah berikut ini sudo chown -R user:user ..dapat memiliki efek yang sama dengan yang disebutkan di sini jika Anda satu tingkat di bawah root sistem file. Jangan mencoba hal seperti ini.
Passerby51

Jawaban:

22

Singkatnya: tidak.

Anda harus memulihkan dari cadangan. (Beberapa alat cadangan mungkin memiliki opsi untuk hanya mengembalikan izin saja, yang lain dapat membuat daftar file yang didukung dengan izin mereka dan Anda dapat menggunakannya untuk memperbaiki sistem Anda.)

Jika Anda tidak memiliki cadangan, Anda harus memperbaiki semua itu secara manual.

Tikar
sumber
Setelah sudo chown -R user:user /itu, kemungkinan sistem disemprot sangat buruk sehingga Anda tidak dapat memulihkan dari cadangan.
Keith Thompson
1
Jika Anda tidak dapat memulihkan bagian penting dari data pengguna Anda dalam skenario ini dari cadangan, "cadangan" Anda sebenarnya bukan salah satu. Jika Anda tidak dapat memulihkan seluruh OS, Anda masih harus menginstal ulang basis dan kemudian memulihkan dari cadangan. Sangat mungkin membutuhkan live CD atau boot jaringan dalam kasus ini, tetapi jika strategi cadangan Anda tidak dapat pulih dari ini, itu tidak benar-benar cukup baik.
Mat
Komentar saya sebelumnya mungkin tidak jelas. Sistem yang berfungsi dapat dipulihkan dengan menggunakan sistem itu sendiri. Setelah Anda selesai chownmenjelaskan, kemungkinan Anda tidak akan dapat melakukan apa pun sebelum menginstal keseluruhan sistem dari awal; sistem bahkan tidak memiliki rootakun, dan sudotidak akan berfungsi. Mungkin patut mencoba untuk boot ke shell pengguna tunggal, tetapi jangan berharap itu berfungsi.
Keith Thompson
1
Akun root tidak hilang (masih UID 0); hanya tidak memiliki file lagi, tetapi root mem-bypass izin normal. Apakah sudoatau bahkan suakan terus berfungsi ketika semua file yang relevan dimiliki oleh useradalah masalah yang berbeda (mungkin bukan karena antara lain bit SUID pada exe akan hilang).
jw013
6

Hanya jika Anda mengetahui kepemilikan pengguna dan grup dari setiap file dan direktori di bawah Anda / direktori .

Bahkan kemudian, Anda sudah menghancurkan kepemilikan file sistem kritis yang perlu dimiliki oleh root, termasuk sudo perintah. Anda mungkin perlu memasang hard drive di sistem lain - dan perhatikan bahwa sistem lain kemungkinan tidak akan memiliki pemetaan UID dan GID yang sama dengan yang baru saja Anda musnah.

Buat salinan seluruh hard drive jika Anda bisa, lalu instal ulang sistem operasi Anda. Setelah Anda selesai melakukannya, Anda dapat mencoba menyalin file kembali ke sistem yang baru dihapus dan mengembalikan kepemilikannya. Anda mungkin dapat berasumsi (walaupun tidak 100% andal) bahwa semua yang ada di bawah /home/fooadalah milik pengguna foo, dan bahwa setiap file spool di bawah /var/maildimiliki oleh pengguna yang sesuai (jika Anda memiliki email pada sistem). Anda mungkin dapat pergi tanpa mengembalikan sebagian besar file yang tidak ada di bawah /home, tergantung pada apa yang telah Anda lakukan dengan sistem.

Dan kemudian mulailah menumbuhkan kebiasaan memeriksa ulang setiap perintah yang Anda jalankan sudo sebelum Anda menekan Enter.

Keith Thompson
sumber
6

Jika distro Anda berbasis RPM, Anda HANYA dapat mengembalikan file yang diinstal oleh paket rpm.

Untuk mengembalikan semua izin paket:

rpm --setperms -a

Untuk mengembalikan semua pemilik paket (pengguna / grup):

rpm --setugids -a

Jika -a tidak berjalan, Anda bisa menjalankan bash loop:

Untuk izin:

for x in $(rpm -qa); do rpm --setperms $x; done

Untuk pemilik:

for x in $(rpm -qa); do rpm --setugids $x; done

Diambil dari: http://www.sysadmit.com/2016/10/linux-restaurar-permisos-de-un-paquete.html

Egon Spengler
sumber
1

Anda dapat menyimpan versi saat ini dan kemudian menguraikannya untuk kembali dengan menggunakan opsi -v.

chown -R nobody:nobody -v /tmp/some_file > /tmp/chown.log
cat /tmp/chown.log

Isinya adalah:

changed ownership of `/tmp/some_file' from me:users to nobody:nobody

Dengan menggunakan bahasa skrip favorit Anda dan ekspresi reguler, Anda dapat menjalankan proses menyakitkan untuk mengembalikannya (jika harus).

Saya sangat merekomendasikan tidak melakukan chown rekursif pada / karena Anda akan mengekspos / etc / shadow atau file penting lainnya.

SailorCire
sumber
0

jika distro berbasis rpm:

rpm -a --setperms
shcherbak
sumber