Memecahkan masalah file sudoers


Halaman ini memberikan tips tentang cara menggunakan utilitas command line sudo, mengelola plugin sudoers, dan mencegah atau memperbaiki masalah yang muncul.

Penyebab masalah

Selama setiap eksekusi perintah sudo, proses berikut berlangsung untuk memvalidasi file sudoers:

  • Sintaks diperiksa keakuratannya.
  • Konten tersebut dianalisis untuk mengecualikan beberapa error logika.
  • Kepemilikan dan izin diperiksa.

Validasi file sudoers mungkin gagal karena salah satu error berikut:

Error sintaksis

Anda harus mengikuti aturan sintaksis tertentu saat membuat perubahan pada file sudoers. Setiap penyimpangan dari sintaksis ini, termasuk, tetapi tidak terbatas pada, karakter yang hilang atau tambahan, atau koma yang tidak sesuai, dapat membuat file tidak valid. File yang tidak valid membuat utilitas sudo tidak dapat digunakan.

Solusi

Solusinya adalah menggunakan utilitas visudo untuk mengedit file sudoers. Utilitas ini memvalidasi konten file sebelum menyimpan dan memberi tahu jika ada masalah. Utilitas visudo dibuat untuk mengedit file dengan cara yang aman.


Contoh berikut menunjukkan contoh sintaksis yang benar dan salah:

Sintaksis benar

user   ALL=(ALL) ALL

Sintaksis salah

user   ALL=(ALL), ALL

Contoh error sintaksis

$ sudo useradd username
/etc/sudoers:20:17: syntax error
user   ALL=(ALL), ALL
                ^

Error logika

Error jenis ini dapat disebabkan oleh salah satu hal berikut:

  • Kesalahpahaman tentang prinsip-prinsip plugin sudoers.
  • Penyimpangan dari sintaksis yang benar.

Namun, error logis tidak dikenali selama validasi, karena tidak melanggar aturan sintaksis sehingga sulit dideteksi.

Solusi

Anda harus membaca dokumentasi resmi dengan cermat dan mematuhi prinsipnya saat mengedit file.

Google juga merekomendasikan agar Anda menggunakan utilitas visudo untuk mengedit file sudoers, karena utilitas ini dapat mendeteksi beberapa jenis error logika, seperti:

  • Alias yang tidak ditentukan atau tidak digunakan
  • Referensi siklik
  • Entri duplikat

Jika ada masalah yang terdeteksi, Anda akan melihat pesan peringatan.


Contoh berikut menunjukkan contoh yang benar dan salah secara logis:

Benar secara logis

barbara   ALL=(ALL:ALL) /usr/bin/ls

Salah secara logis

barbara   ALL=(4LL:ALL) /usr/bin/ls
               ^
barbara   ALL=(ALL;ALL) /usr/bin/ls
                  ^
bar6ara   ALL=(ALL:ALL) /usr/bin/1s
   ^                             ^

Izin salah

Selain error yang disebabkan oleh konten file sudoers, izin file yang berlebihan atau kepemilikan yang salah juga dapat menyebabkan kegagalan utilitas sudo.

Solusi

Anda akan melihat deskripsi error ini dalam output perintah sudo yang gagal. Baca deskripsi pesan error dan buat koreksi yang diperlukan.


Berikut adalah contoh kepemilikan dan izin file yang benar

$ ls -l /etc/sudoers
-r--r----- 1 root root 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username

Contoh berikut menunjukkan error yang ditampilkan ketika ada izin redundan untuk grup izin semua pengguna:

$ ls -l /etc/sudoers
-r--r---w- 1 root root 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit

Contoh berikut menunjukkan error yang ditampilkan untuk kepemilikan yang salah. Dalam contoh ini, pengguna dengan ID yang bukan 0 (atau pengguna yang bukan root) adalah pemilik file:

$ ls -l /etc/sudoers
-r--r----- 1 user user 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit

Untuk mengetahui informasi selengkapnya tentang konfigurasi file sudoers, baca Panduan Sudoers.

Untuk mempelajari cara mengelola dan menggunakan editor visudo, baca Panduan Visudo.

Konsekuensi masalah

Masalah dalam file sudoers menyebabkan efek negatif dan dapat memengaruhi fungsi seluruh sistem.

  • Perintah sudo tidak lagi berfungsi.

    Ini adalah konsekuensi paling mudah terlihat dari masalah dalam file sudoers. Konsekuensi dari hal ini adalah ketidakmampuan untuk menggunakan hak istimewa yang ditingkatkan bagi pengguna, yang memblokir aktivitas mereka di server.

    Namun, konsekuensi yang lebih merusak dan tidak dapat diprediksi adalah kegagalan aplikasi yang mengandalkan perintah sudo. Dalam beberapa kasus, hal ini dapat menyebabkan aplikasi gagal sepenuhnya, sehingga menyebabkan perilaku yang tidak terduga, error, atau kehilangan data. Contoh lainnya adalah saat perintah sudo dipanggil oleh aplikasi selama urutan booting OS dan gagal. Hal ini dapat menyebabkan kegagalan OS atau menyebabkan urutan booting menjadi macet.

  • Kemungkinan akses yang tidak sah ke sistem.

    Konsekuensi berisiko lainnya adalah masalah dalam file sudoers dapat menyebabkan akses tidak sah ke sistem. Hal ini dapat terjadi karena error logika, saat aturan dalam file sudoers memberikan izin yang berlebihan kepada beberapa pengguna atau grup.

    Hal ini juga dapat terjadi karena pemilik sistem menonaktifkan atau melemahkan pertahanan sistem untuk sementara agar dapat login dan memperbaiki masalah.

Pemulihan jika terjadi masalah

Jika Anda kehilangan hak istimewa pengguna yang ditingkatkan atau tidak dapat menggunakan perintah sudo karena ada masalah pada file sudoers, gunakan akun superuser untuk pemulihan.

Dalam sistem operasi yang mirip dengan Unix, superuser adalah akun pengguna khusus dengan ID sama dengan 0, yang biasanya disebut root. Superuser memiliki akses penuh ke resource sistem, dan dapat melakukan tugas administratif apa pun tanpa batasan. Meskipun berinteraksi dengan OS atas nama superuser umumnya dianggap tidak aman, interaksi ini mungkin satu-satunya opsi untuk tugas tertentu seperti pemulihan file sudoers.

Login secara langsung sebagai superuser akan menimbulkan risiko terhadap OS. Untuk menghindari risiko ini, Google merekomendasikan agar Anda menggunakan fungsi skrip startup, karena skrip ini dieksekusi atas nama superuser.

Baca skrip startup Compute Engine selengkapnya.

Untuk memulihkan file sudoers dengan skrip startup, lakukan hal berikut:

  1. Buat salinan cadangan skrip startup saat ini jika sudah digunakan. Pendekatan pencadangan bergantung pada cara skrip startup dikonfigurasi.

    startup-script

    Jika konten skrip ditetapkan langsung di nilai metadata, Anda dapat menyalin konten skrip ke bucket Cloud Storage, file lokal, atau penyimpanan pribadi sementara lainnya.

    startup-script-url

    Jika konten skrip sudah berada di penyimpanan jarak jauh dan alamat URL-nya digunakan, Anda dapat menghapus sementara kunci metadata startup-script-url untuk menonaktifkan skrip startup saat ini.

  2. Perbarui skrip startup dengan urutan perintah berikut:

    mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") && echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && chown 0:0 /etc/sudoers && chmod 0440 /etc/sudoers
    

    Baca selengkapnya tentang fungsi perintah tersebut

    mv /etc/sudoers /etc/sudoers.backup.$(date +"%s")

    Perintah ini akan membuat salinan file /etc/sudoers dengan nama yang berbeda dan menghapus file aslinya. Nama file baru berisi stempel waktu di bagian akhir untuk keunikan (misalnya, sudoers.backup.1672527600).

    echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers

    Perintah ini membuat file /etc/sudoers yang sebelumnya dihapus dengan satu aturan yang mengizinkan pengguna Google Cloud yang diberi otorisasi dengan akses ke VM untuk menjalankan perintah apa pun atas nama pengguna sistem mana pun. Aturan ini selalu ada secara default dalam file tambahan /etc/sudoers.d/google_sudoers.

    chown 0:0 /etc/sudoers

    Perintah ini menetapkan pemilik file /etc/sudoers ke pengguna yang ID-nya adalah 0 dan grup pemilik ke grup yang ID-nya adalah 0.

    chmod 0440 /etc/sudoers

    Perintah ini menetapkan izin bagi file /etc/sudoers ke hanya baca dan hanya mengizinkan pemilik dan grup pemilik untuk membaca file tersebut.

  3. Hentikan VM, jika sedang berjalan. Mulai ulang VM untuk memicu eksekusi skrip startup.

  4. Hubungkan ke VM dan edit file sudoers yang rusak untuk memulihkannya.

    sudo visudo /etc/sudoers.backup.TIMESTAMP
    
  5. Simpan perubahan dan ganti file /etc/sudoers saat ini dengan file yang baru saja Anda edit.

    sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
    
  6. Pastikan masalah awal terkait penggunaan perintah sudo dan hak istimewa yang ditingkatkan telah diperbaiki.

  7. Hapus skrip startup sementara dan pulihkan yang asli jika digunakan.

Apa Langkah Selanjutnya?