Ini adalah pertanyaan yang cukup kompleks terkait dengan file sudoers dan perintah sudo secara umum.
Catatan: saya telah membuat perubahan ini pada mesin khusus yang menjalankan Ubuntu Desktop 13.04, yang saya gunakan murni untuk tujuan pembelajaran. Saya mengerti ini adalah risiko keamanan yang sangat besar untuk mengaktifkan nopasswd sudo.
Pertanyaan
Awalnya, satu-satunya perubahan saya ke file sudoers (/etc/sudoers) adalah satu baris, SPESIFIKASI pengguna yang seharusnya mengaktifkan nicholsonjf untuk menjalankan semua perintah dengan sudo tanpa harus memasukkan kata sandi (lihat baris yang dimulai dengan nicholsonjf):
# This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults env_resetDefaults mail_badpassDefaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# Host alias specification# User alias specification# Cmnd alias specification# User privilege specificationroot ALL=(ALL:ALL) ALLnicholsonjf ALL=NOPASSWD: ALL# Members of the admin group may gain root privileges%admin ALL=(ALL) ALL# Allow members of group sudo to execute any command%sudo ALL=(ALL:ALL) ALL# See sudoers(5) for more information on "#include" directives:#includedir /etc/sudoers.d
Namun ini tidak berhasil, dan saya masih diminta untuk kata sandi saya setiap kali saya menjalankan perintah sebagai nicholsonjf. Saya hanya dapat mulai menjalankan perintah sudo sebagai nicholsonjf setelah saya menghapus nicholsonjf dari grup sudo dan admin.
Ada yang bisa menjelaskan mengapa ini berhasil?
Apakah karena pengguna nicholsonjf mewarisi hak sudo dari dua spesifikasi kelompok admin dan sudo ( lihat di bawah dalam file sudoers), yang mengesampingkan SPESIFIKASI pengguna nicholsonjf karena mereka lebih jauh ke bawah dalam file konfigurasi?
Baris yang Anda tambahkan telah diganti. Dari man sudoers:
Ketika beberapa entri cocok untuk pengguna, mereka diterapkan secara berurutan. Di mana ada beberapa pertandingan, pertandingan terakhir digunakan (yang belum tentu pertandingan yang paling spesifik).
Dalam kasus Anda nicholsonjf adalah anggota kelompok sudo jadi baginya baris ini diterapkan:
%sudo ALL=(ALL:ALL) ALL
Jika Anda ingin mengganti entri di /etc/sudoers hanya menempatkan entri baru setelah mereka.
Entri baru akan terlihat seperti
myuser ALL=(ALL) NOPASSWD: ALL untuk pengguna tunggal, atau
Untuk tidak pernah meminta pengguna saat ini untuk password ketika pengguna yang menggunakan sudo jalankan perintah ini:
echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-sudo-password
Ini menciptakan sebuah file bernama /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-password dengan isi sebagai berikut:
<YOUR USERNAME> ALL=(ALL:ALL) NOPASSWD: ALL
Keuntungan melakukannya dengan cara ini secara manual menambahkan baris itu ke /etc/sudoers menggunakan sudo visudo (seperti yang disarankan oleh jawaban lainnya) adalah
/etc/sudoers kadang-kadang dimodifikasi oleh pembaruan sistem, sedangkan file dalam /etc/sudoers.d tidak
the sudo visudo metode rentan terhadap kesalahan (sebagaimana dibuktikan oleh pertanyaan ini), sedangkan menyalin dan menempelkan perintah lebih sulit untuk mengacaukan
Perhatikan bahwa Anda mungkin masih diminta untuk password dalam konteks lain, seperti menginstal hal-hal dari Perangkat Lunak Ubuntu aplikasi grafis.
Menurut sudo cat /etc/sudoers.d/README fitur ini (menempatkan file sudoer tambahan di /etc/sudoers.d) telah diaktifkan secara default sejak Debian 1.7 . 2p1-1, yang keluar pada akhir 1990-an Ubuntu adalah berdasarkan Debian).
Ketika saya meneliti ini, saya menyadari bahwa ada garis di /etc/sudoers file yang tidak Komentar, Tapi direktif yang membuat file atau folder di bawah direktori /etc/sudoers/* menimpa isi dari /etc/sudoers.
Ini adalah arahan kecil yang licik, karena tampaknya merupakan baris komentar pada pandangan pertama. Ini terlihat seperti ini:
#includedir /etc/sudoers.d
Ini adalah bagaimana saya menerapkan pengguna non-root, tanpa kata sandi dalam gambar Docker singkat untuk digunakan dalam pipeline CICD dengan gambar dasar ubuntu: 18.04: