Bagaimana cara memperbaiki sudo setelah “chmod -R 777 / usr / bin”?

15

Saya masuk chmod -R 777 /usr/bindan sekarang sudo tidak berfungsi.

Dikatakan sudo must be setuid root.

Beberapa saran online dikatakan berjalan chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo.

Saat memasukkannya chown root:root /usr/bin/sudomenunjukkan opened in readonly modekesalahan.

Manojkumar
sumber
1
Anda harus melakukan root untuk menjalankan perintah itu
Manoj Kumar: Apakah yang pkexecmetode dalam jawaban saya (yang telah Anda tandai sebagai diterima) memecahkan masalah ini untuk Anda? Saya menjadi yakin bahwa, seperti yang dikomentari Damien Roche dan Oli, metode ini tidak benar-benar berfungsi setelah sebuah sudo chmod -R 777 /usr/binperintah berhasil diselesaikan. Seperti sudo, pkexecharus setuid root untuk bekerja. (Saya tidak yakin mengapa, karena menggunakan layanan polkit , tetapi itu benar.) Namun, saya pikir saya pernah mendengar orang lain mengatakan ini bekerja untuk mereka, yang aneh! Apakah Anda menekan Ctrl + C sebelum 777perintah chmod selesai?
Eliah Kagan
Halo. Metode ini sebenarnya telah bekerja untuk saya setelah saya tidak sengaja berhasil berlari sudo chmod -R 777 /usr/bin, tetapi hanya setelah masuk ke rootakun.
iHowell

Jawaban:

10

Terlepas dari status yang diterima, saya sekarang yakin jawaban ini salah . (Saya berharap segera memperbaikinya, setelah berkonsultasi dengan OP tentang penerimaan.) Saya pikir saya ingat orang lain mengatakan ini berhasil, tapi saya percaya masalah mereka setidaknya sedikit berbeda. Metode yang dijelaskan di sini tetap berharga untuk beberapa situasi di mana chmod -R 777 /usr/binterganggu dengan Ctrl+ Catau tidak lengkap. Tetapi begitu hal itu terjadi, pkexectidak akan ditetapkan juga dan itu tidak akan bekerja lebih baik daripadasudo , seperti Damien Roche dan Oli telah benar berkomentar.

Pada sistem desktop Ubuntu, PolicyKit diinstal, sehingga pkexecdapat digunakan untuk memperbaiki patah sudoexecutable atau sudoersfile yang . Anda tidak perlu boot ke mode pemulihan dan Anda tidak perlu boot dari live CD. Anda bahkan tidak perlu memulai ulang.

Dalam hal ini, jalankan perintah berikut:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

Lihat pertanyaan ini untuk informasi lebih lanjut.

Eliah Kagan
sumber
9
pkexec must be setuid root! Sungguh mimpi buruk!
Damien Roche
1
Seperti yang ditunjukkan oleh Damien, masalah dengan pendekatan ini pkexecpersis sama dengan kesulitan sudo. Ini biasanya setuid dan tinggal di /usr/bin. Saya sudah mengujinya dan ini tidak berhasil setelahnya chmod -R 777 /usr/bin.
Oli
@DamienRoche, Oli: Saya minta maaf karena tidak memperbaiki cara ini lebih cepat! Anda berdua benar. Saya tidak yakin mengapa pkexecharus setuid root untuk bekerja (bukankah itu bekerja melalui daemon polkit seperti proses non-setuid lainnya?), Tetapi memang perlu itu. Saya telah mengomentari pertanyaan untuk melihat apakah OP (yang menerima ini) dapat menjelaskan apa, jika ada, yang benar atau membantu tentang jawaban ini. Dan saya telah menambahkan spanduk sementara ke bagian atas posting ini jadi saya tidak menyesatkan lebih lanjut. Jika jawaban ini terus ada, formulir yang diperbaiki mungkin akan memasukkan beberapa info yang saat ini ada di spanduk itu.
Eliah Kagan
Anda bisa menggunakan su, yang terletak di bawah / bin
FliiFe
@FliiFe Memperbaiki izin (atau kepemilikan) file di /usr/binmembutuhkan hak akses root, tetapi Anda tidak dapat sumelakukan root pada sebagian besar sistem Ubuntu karena login root dinonaktifkan secara default. Berbeda sudodan pkexec, ketika Anda menggunakan suuntuk mendapatkan root shell atau untuk menjalankan perintah sebagai root, Anda harus memberikan kata sandi root, bukan milik Anda. Tetapi root tidak memiliki kata sandi secara default di Ubuntu (yang mengatakan bahwa otentikasi berbasis kata sandi untuk root akan selalu gagal, bukan berarti memasukkan kata sandi kosong akan berhasil). Lihat RootSudo untuk detailnya.
Eliah Kagan
4

Bahkan ketika menjalankan dari live CD / Flashdisk, Anda harus mengawali chmodperintah Anda dengan sudo. Jadi langkah Anda akan seperti berikut:

  1. boot dari live CD / Flashdisk
  2. periksa apakah disk Anda sudah diautomatiskan (dan ke mana). Jika tidak, pasang (lihat di bawah)
  3. gunakan sudo chmod 0755 <path>untuk menyesuaikan izin

Cara mengetahui di mana disk Anda dipasang: dari jendela terminal, jalankan mount(tanpa argumen). Ini akan mencantumkan semua perangkat yang dipasang. Periksa yang typeterdaftar - Anda dapat melewati semua yang tidak menggunakan "sistem file nyata" (disk Anda mungkin menggunakan ext3 atau ext4 - Anda pasti dapat melewatkan hal-hal seperti proc, sysfs dan sejenisnya). Jika sesuatu terdengar menjanjikan (terlihat seperti /dev/sda1 on /media/sda1 type ext3), periksa isinya menggunakan ls /media/sda1untuk melihat apakah itu itu.

Jika tidak dipasang, Anda dapat memeriksa /deventri di mana disk tersebut berada (gunakan ls /dev/ |grep '/dev/sduntuk memeriksa perangkat yang tersedia; disk Anda akan terlihat seperti /dev/sdaX, /dev/sdbXatau sejenisnya - dengan X menjadi angka). Bandingkan ini dengan daftar perangkat yang dipasang. Jika tidak ada di sana, coba pasang dan periksa isinya (seperti yang ditunjukkan di atas). Untuk memasangnya, pertama-tama buat titik mount, misalnya sudo mkdir /mnt/mydisk, lalu coba pasang perangkat menggunakan mount /dev/sda1 /mnt/mydiskdan periksa isinya menggunakanls /mnt/mydisk .

Setelah Anda mendapatkan disk yang tepat di sana, Anda dapat mengubah kembali izin pada dir usr Anda: sudo chmod 0755 /mnt/mydisk/usr .

Sekarang Anda mungkin masih dalam kesulitan jika Anda awalnya menjalankan chmodperintah secara rekursif, menggunakan -Rparameter. Dalam hal ini Anda dapat mencoba memperbaiki setiap entri secara manual - atau Anda dapat langsung menginstal baru ...

Izzy
sumber
Saya mencoba membuat mount point, tetapi saya mendapat kesalahan yang membaca mount point mnt / mydisk tidak ada adalah mydisk untuk diganti dengan beberapa hal dan hanya untuk catatan saya menulis mount /dev/sda /mnt/mydiskdariroot@Ubuntu:/dev#
vin
Anda melakukan a) membuat titik mount (direktori) sebelum mengeluarkan perintah mount (seperti yang dijelaskan) dan b) merawat slash terkemuka juga? Coba mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(saya pikir Anda tidak memiliki partisi /dev/sda, jadi Anda pasti telah melewatkan nomor partisi juga. Pastikan Anda menentukan perangkat yang benar (atau pemasangan akan gagal).
Izzy
1

Saya pikir Mat benar, Anda harus root untuk menambahkan bit ke / usr / bin, tetapi tentu saja sudo rusak. Jika Anda memiliki kata sandi root, Anda dapat menggunakannya untuk masuk sebagai root dan kemudian perbaiki izin dengan perintah di atas. Namun, jika tidak, (dan saya juga tidak), mungkin yang terbaik adalah:

  • boot dari CD live Linux
  • menjadi root di sana
  • pasang partisi dengan sistem di atas
  • kemudian luruskan izin pada sistem file tersebut menggunakan terminal.

Root selalu nomor pengguna 0 sehingga root pada sistem apa pun dapat membuat perubahan diizinkan untuk melakukan root pada sistem file lain.

John S Gruber
sumber
1

Saya tidak memiliki banyak pengetahuan. Tetapi langkah-langkah ini menyelesaikan masalah saya bahkan tanpa me-restart mesin saya. Ikuti langkah ini:

su root
<enter root password>
cd /usr
chmod -R 755 *
Manu Mohan Thekkedath
sumber
1
Anda kehilangan setidaknya satu perintah "cd". Jika Anda melakukannya seperti ini, Anda melakukan "chmod" pada direktori home untuk root. Itu akan memperburuk keadaan.
Rinzwind
thaks ... mengedit jawaban saya ... saya berada di folder / usr
Manu Mohan Thekkedath
2
Ini hanya berfungsi, jika kata sandi ditetapkan root, yang bukan merupakan konfigurasi default Ubuntu.
David Foerster
1

Dalam upaya untuk mengatur izin untuk skrip lokal saya, saya melanggar izin sudo dan mengubah kepemilikan, karena kesalahan. Saya dapat mengubah kembali kepemilikan sudo menjadi root dengan melakukan hal berikut:

Langkah 1: Beralih ke mode pemulihan ubuntu . Jika Anda tidak mengetahui prosesnya, Anda dapat merujuk jawaban di sini: /ubuntu//a/172346/223901

Langkah 2: Setelah dalam mode pemulihan, pilih root - Drop to root shell prompt

Langkah 3: Lakukan perintah berikut

mount -o remount,rw /
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
reboot

Tunggu sistem Anda untuk boot secara normal dan Anda akan melihat kepemilikan sudo kembali ke root.

ramsudharsan
sumber