Bagaimana saya bisa mengembalikan chmod pada direktori dll?

9

Saya tidak sengaja menjalankan perintah berikut pada direktori dll:

sudo chmod -R 700 /etc

Saya tahu bahwa saya telah melakukan sesuatu yang sangat salah. Terminal saya sekarang mencetak:

I have no name!@ubuntu: /$

Bagaimana saya bisa mengembalikan direktori dll saya ke keadaan sebelumnya?

Saya mencoba mengubah izin tetapi gagal sekarang. Juga, akan sangat membantu jika seseorang dapat menjelaskan apa yang sebenarnya salah ketika saya menjalankan perintah itu dll. Itu hanya izin file. Lalu mengapa seluruh sistem tampaknya benar-benar meledak? Mengapa tidak ada kata sandi masuk yang berfungsi sekarang? Saya tahu bahwa ada file di direktori dll yang ada hubungannya dengan pengguna. Tapi bagaimana mengubah izin membahayakan segalanya? Beberapa detail teknis tentang ini akan sangat membantu.

Rafay
sumber
3
Anda memerlukan daftar direktori ( ls -laR) dari sistem lain yang berjalan. Versi apa milikmu? Anda dapat mengubah direktori menjadi 755 dan dan file menjadi 644, tetapi beberapa harus memiliki mode yang berbeda (seperti / etc / shadow misalnya).
ott--
4
Ketika Anda mengetik, sudoAnda harus membacanya kembali di kepala Anda sebagai "Saya memberikan diri saya kekuatan tertinggi atas sistem saya tanpa jaring pengaman, apakah saya yakin saya tahu apa yang saya lakukan? Apakah saya yakin bahwa saya mengetik apa yang saya maksud?" sebelum menekan kembali.
msw
1
Dengan sistem yang berfungsi, Anda dapat menggunakan find /etc -type d ! -perm 755 -exec ls -ld {} \;dan find etc -type f ! -perm -644 -exec ls -l {} \;menemukan direktori dan file dengan mode non-standar. Di Debian hanya ada 2 direktori dan 39 file
ott--
"Tapi bagaimana mengubah izin membahayakan segalanya?" - beberapa hal yang perlu membaca file-file itu sekarang tidak memiliki izin untuk membaca file-file itu.
user253751

Jawaban:

15

Satu hal yang salah: penggunaan sudodengan perintah itu. The -Rberalih mengatakan chmoduntuk secara rekursif mengatur hak akses ke direktori tersebut, yang, dalam setiap kasus, tindakan non-direkomendasikan (harus kita menyebutnya: bid'ah) jika Anda tidak tahu apa yang Anda lakukan (setelah ini terjadi pada saya, saya tidak mengeluarkan perintah tetapi GUI yang salah membuatnya, dan sistem saya masuk kawat).

Itu hanya izin file. Lalu mengapa seluruh sistem tampaknya benar-benar meledak?

GNU / Linux sangat sensitif terhadap izin file, karena ini dibangun dengan mempertimbangkan stabilitas dan keamanan . Hal yang sama berlaku untuk sebagian besar program yang berjalan di GNU / Linux (yaitu apache2menjatuhkan hak akses root dan menggunakan www-data, atau pengguna yang serupa, dan 700izin Anda tidak akan mengizinkannya untuk membaca / menulis file sendiri).

Mengapa tidak ada kata sandi masuk yang berfungsi sekarang?

Seperti yang sudah Anda sebutkan, kata sandi login disimpan dalam file /etc/passwddan hanya root (saya berasumsi Anda tidak mengubahnya) dapat membacanya, tetapi prompt login (atau login GUI) menggunakan akun non-privilege, sehingga tidak dapat membaca berkas.

Tapi bagaimana mengubah izin membahayakan segalanya?

Sama seperti yang dikatakan di atas, Linux sangat sensitif terhadap izin file. Beberapa program bahkan memeriksa izin file konfigurasi mereka dan jika tidak diharapkan mereka tidak akan berjalan sama sekali.

Bagaimana saya bisa mengembalikan direktori dll saya ke keadaan sebelumnya?

Jika Anda menggunakan distro berbasis RPM, ini dapat dilakukan menggunakan rpm --setpermsperintah, itu akan menyakitkan kembali satu per satu paket, pada sistem seperti Debian apt-get --reinstall installadalah teman Anda. Solusi lain mungkin tersedia, tetapi akan membutuhkan sistem kerja untuk itu.

Braiam
sumber
5

Mari kita lihat, apa yang telah Anda lakukan adalah mengatur izin di seluruh direktori / etc sebagai read / write / execute hanya diizinkan untuk pemilik file / dir, ditolak untuk semua orang. Jika Anda bingung dengan izin file, Anda dapat membaca lebih lanjut di Wikipedia: izin UNIX tradisional .

Alasan Anda telah meledakkan sistem Anda adalah karena banyak proses tidak dapat membaca pengaturannya lagi, karena tidak dapat mengakses / etc. Tidak akan mudah untuk memulihkan seluruh direktori / etc ke keadaan sebelumnya. Cara melakukannya tergantung pada distro Anda, tetapi pada dasarnya itu berarti menginstal ulang setiap paket yang menyimpan file apa pun di / etc.

Sebagai bantuan pita cepat untuk dapat menggunakan sistem, untuk memperbaikinya dengan benar (menginstal ulang semua paket dengan konten di dalam / etc, seperti yang dinyatakan di atas), Anda dapat melakukan:

    # sudo find /etc -type d -exec chmod 775 '{}' \;
    # sudo find /etc -type f -exec chmod 664 '{}' \;

Dengan dua baris itu Anda akan menetapkan izin liberal di semua direktori / etc, dengan baca / tulis diizinkan untuk pemilik dan grup, dan baca diizinkan untuk semua orang. Alasan kedua chmod adalah untuk mengatur bit eksekusi hanya pada dir. Beberapa proses akan mengeluh atau gagal, termasuk semua yang dapat dieksekusi di / etc, tetapi Anda harus dapat melakukan instal ulang yang saya uraikan di atas.

Perlu diketahui daripada sampai Anda memulihkan izin asli sistem Anda, paling tidak, dalam keadaan tidak aman.

Javier Marcet
sumber
2
Selain itu, beberapa program tidak akan berfungsi; SSH misalnya memerlukan izin terbatas pada file tertentu. /etc/sudoersadalah yang lain.
Mel Boyce
1
Tetapi beberapa file di dunia /etctidak harus dapat dibaca! Pulihkan dari cadangan, itu sebabnya Anda memilikinya (atau, itulah sebabnya orang mendesak Anda untuk membuat cadangan).
tripleee
0

700 telah menghapus akses ke banyak file untuk grup dan pengguna dunia (mis. File sekarang memiliki rwx------izin). Misalnya, semua pengguna harus dapat membaca /etc/passwd. Dengan pengaturan Anda, hanya root yang sekarang dapat membaca /etc/passwd. Banyak hal yang akan rusak jika Anda memutus izin pada file dengan /etc/cara yang tidak terduga.

Anda bisa mencoba dan membangun kembali izin (dengan asumsi Anda masih bisa beralih ke root) berdasarkan server yang berfungsi, tetapi itu cenderung kesalahan.

Saya sarankan memulihkan /etc/dari cadangan jika Anda memilikinya (pastikan pengembalian mengembalikan izin, atau, jika solusi cadangan Anda mendukungnya, pulihkan hanya izin).

EightBitTony
sumber