sudo error, adalah mode 0777, harusnya 0440

26

Saya mendapatkan kesalahan sudo, bagaimana cara memperbaiki kesalahan ini?

sudo: /etc/sudoers is mode 0777, should be 0440
sudo: no valid sudoers sources found, quitting 
pengguna20698
sumber
Seperti yang telah dicatat oleh pengguna sebelumnya, menggunakan "chmod 0440 / etc / sudoers" ketika file sudoers.d / README memiliki chmod yang salah, TIDAK BEKERJA.
kentfx
Apakah Anda menyarankan bahwa ketika masalahnya adalah izin menyala /etc/sudoers.d/README, kesalahan itu masih bisa dikatakan sudo: /etc/sudoers is mode 0777, should be 0440?
Eliah Kagan

Jawaban:

26

Pilihan pertama

Mengikuti posting ini :

  1. Mulai ulang PC
  2. Saat layar pemilihan boot GRUB muncul, pilih Recovery Mode. (Jika tidak muncul, tekan Shifttombol ketika Anda melihat loader GRUB di bagian bawah).
  3. Terminal hitam akan muncul, pada titik ini Anda dapat menjalankan perintah ini (Anda harus memiliki hak akses root):

    chmod 0440 /etc/sudoers
    

kalau tidak

Anda harus meletakkan Ubuntu ke LiveCD, boot ke LiveCD, pasang Partisi Ubuntu Anda di Hard Drive (Buka browser file, seperti Nautilus, dan klik Partisi Ubuntu Anda, atau klik Tempat -> "xxGB Partition / Partisi Ubuntu Anda ").

Kemudian, buka terminal dalam sesi LiveCD dan ketik dua perintah ini:

cd /media/<name of permanent ubuntu partition>/etc
sudo chmod 0440 sudoers

Masalah Ekstra

Jika ada kesalahan (seperti yang diposting di bawah), ikuti prompt kesalahan dan sesuaikan setiap file sesuai dengan menggunakan salah satu dari dua langkah di atas:

sudo apt-get update sudo: /etc/sudoers.d/README adalah mode 0777, seharusnya 0440 sudo: / var / lib / sudo dapat ditulis oleh bukan pemilik (040777), harus menjadi mode 0700 [sudo] kata sandi untuk

Perbaiki dengan menindaklanjuti dengan:

chmod 0440 /etc/sudoers.d/README
chmod 0700 /var/lib/sudo

Kedua perintah ini harus digunakan dengan tepat dengan langkah-langkah yang dijelaskan di atas. Mereka akan mengubah izin file yang terkait dengan file itu. 0440 akan memberikan pemilik (root) dan grup membaca izin dan 0700 akan memberikan pemilik (root), membaca, menulis, dan mengeksekusi izin.

Alex Stevens
sumber
Saya dapat menggunakan perintah sudo tetapi terbatas. sudo apt-get update sudo: /etc/sudoers.d/README is mode 0777, should be 0440 sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700 [sudo] password for
user20698
@Alex: ESC adalah untuk warisan GRUB kan? Shift harus ditekan untuk GRUB2.
Lekensteyn
@ user20698: Anda tidak perlu sudountuk yang pertama, yang kedua harus dilakukan dari Live CD.
Lekensteyn
Jika sudoers adalah 0777, bukankah seharusnya pengguna dapat menjalankan chmod 0440 /etc/sudoerstanpa sudo karena sudoers dapat ditulis oleh semua orang?
Seppo Erviälä
2
@Seppo: tidak, hanya pemilik file yang dapat mengubah izin file.
Lekensteyn
16

sudorusak dalam situasi ini, tetapi pkexec(antarmuka baris perintah ke PolicyKit ) masih berfungsi, sehingga Anda dapat memperbaikinya dengan satu perintah. Tidak perlu me-reboot.

pkexec chmod 0440 /etc/sudoers

Ini mengasumsikan PolicyKit diinstal. Jika ini adalah sistem desktop (bukan server tanpa GUI), itu adalah.

Eliah Kagan
sumber
4

Boot ke mode pemulihan, pilih shell root, dan:

chmod 0440 /etc/sudoers

Atau jika Anda tidak ingin memulai kembali Anda dapat menggunakan alternatif ini:

pkexec chmod 0440 /etc/sudoers
pkexec chmod 0440 /etc/sudoers.d/README

itu akan mengubah izin. Coba saja itu akan berhasil.

Atul Makwana
sumber
1
Mengapa Anda chmodmenyimpan beberapa file 440dan yang lainnya 0440? Bukankah seharusnya Anda menggunakan 0440seragam? Dan mengapa Anda mengubah izin /etc/sudoers.d/READMEsaat Anda menggunakan pkexecjalan, tetapi tidak sebaliknya? Dan bagaimana dengan file lain yang mungkin ada /etc/sudoers.d?
Eliah Kagan
1

Apa yang Anda lakukan untuk mendapatkan kesalahan ini?

  • Jika Anda melakukannya:, sudo chmod -R 777 /etcAnda memerlukan Live CD untuk memperbaikinya.

    1. Boot ke Live CD dan pilih "Cobalah"
    2. Pasang partisi Ubuntu Anda (atau partisi yang berisi /etcjika Anda telah meletakkan /etcdi partisi yang terpisah). Ini dapat dilakukan dengan menggunakan browser file seperti Nautilus atau menu Places
    3. Buka Terminal dengan masuk ke Applications => Accessories => Terminal
    4. Tentukan folder partisi Ubuntu Anda, Anda bisa daftar isi partisi yang dipasang dengan menggunakan ls -l /media. Itu mungkin bernama ubuntuatau disk. Pada langkah selanjutnya, saya akan berasumsi ubuntu.
    5. Di Terminal, atur izin restriktif secara default:

      sudo find /media/ubuntu/etc -type f -exec chmod g-wx,o-rwx {} \;
      sudo find /media/ubuntu/etc -type d -exec chmod g-w,o-rwx {} \;
      
    6. Selanjutnya, gunakan Live CD sebagai titik referensi untuk mengembalikan izin file. Perintah di bawah ini akan mengubah izin file untuk /etc/media/ubuntumenggunakan /etcfolder pada Live CD sebagai titik referensi. Itu hanya akan mengubah izin pada file ( -type f) dan direktori ( -type d) pada sistem file yang sama ( -xdev). Setiap kesalahan ditulis ke ~/errors.logKesalahan seperti "file tidak ditemukan" menunjukkan bahwa file pada sistem diinstal, tetapi tidak ditemukan pada Live CD. Perintah dari langkah 5 harus mengatur izin yang tepat untuknya, tetapi untuk hasil terbaik, Anda sebaiknya menginstal ulang paket.

      cd /media/ubuntu && sudo find etc -xdev \( -type f -o -type d \) -f -exec chmod --reference=/{} {} \; 2>~/errors.log
      
    7. Sekarang aman di ~/errors.logsuatu tempat (seperti http://paste.ubuntu.com/ ) sehingga Anda dapat menambahkannya sebagai komentar untuk jawaban ini jika Anda memiliki masalah dengan aplikasi.
Lekensteyn
sumber
1

Di Ubuntu, Anda dapat menyerang Ctrl+ Alt+ terlebih dahulu Tyang membuka terminal. Setelah itu Anda dapat menyalin-tempel perintah di bawah ini dengan Ctrl+ Cdan tempel terminal dengan Ctrl+ Shift+ V.

pkexec chmod 0440 /etc/sudoers
K. Kilian Lindberg
sumber
0

Bagi saya, saya harus menambahkan satu langkah lagi pkexecsaran - sarannya, karena ini , saya beruntung bahwa saya memiliki 2 sesi ssh ketika saya melakukan kesalahan bodoh:

  1. Buka 2 terminal
  2. Di terminal 2, jalankan echo $$untuk mendapatkan PID
  3. Jalankan pkttyagent --process PID_FROM_STEP2di terminal 2
  4. Di terminal 1, jalankan pkexec chmod 0440 /etc/sudoers
  5. Dalam kasus saya, saya juga harus lari pkexec chown root:root /etc/sudoers
4oo4
sumber