File Sudoers, Aktifkan NOPASSWD untuk pengguna, Semua perintah

Kata pengantar

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

%sudo ALL=(ALL) NOPASSWD: ALL untuk kelompok.

Untuk satu pengguna, tambahkan baris ini di akhir sudoers file menggunakan sudo visudo perintah:

superuser ALL=(ALL) NOPASSWD:ALL

Untuk grup

%supergroup  ALL=(ALL) NOPASSWD:ALL

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

  1. /etc/sudoers kadang-kadang dimodifikasi oleh pembaruan sistem, sedangkan file dalam /etc/sudoers.d tidak
  2. 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:

RUN \  useradd -U foo -m -s /bin/bash -p foo -G sudo && passwd -d foo && passwd -d root && \  sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \  sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \  sed -i /etc/sudoers -re 's/^#includedir.*/## Removed the #include directive! ##"/g' && \  echo "Customized the sudoers file for passwordless access!" && \  echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \  echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \  echo "foo user:";  su foo -c 'whoami && id' && \  echo "root user:"; su root -c 'whoami && id'

Apa yang terjadi dengan kode di atas:

  • Pengguna dan grup foo diciptakan.
  • Pengguna foo ditambahkan ke kedua foo dan sudo kelompok.
  • Direktori home diatur ke /home/foo.
  • Shell diatur ke /bin/bash.
  • The sed perintah melakukan pembaruan sebaris ke /etc/sudoers file untuk memungkinkan foo dan root pengguna passwordless akses ke sudo kelompok.
  • The sed perintah menonaktifkan #includedir direktif yang akan memungkinkan file apa pun dalam subdirektori untuk menimpa pembaruan sebaris ini.

As Vince memiliki disebutkan dalam komentar, Anda dapat menggunakan baris ini:

%sudo ALL=NOPASSWD: ALL

(Ini berbeda dari garis yang ditunjukkan pada mereka jawaban, dan itu memecahkan masalah bagi saya.)

Seseorang dapat menyisipkan string dalam satu baris tanpa pemformatan EOF di akhir file sudoers atau menghapus dengan sed -i:

cat >> /etc/sudoers <<<'PaSe ALL=(ALL:ALL) NOPASSWD:ALL'

Referensi:https://stackoverflow.com/questions/41298208/how-to-append-a-line-at-the-end-of-etc-sudoers-file-using-shell-script-without/70039824#70039824

catatan: semua = NOPASSWD: semua harus semua=(semua) NOPASSWD: Semua atau tidak bekerja…

Kemungkinan duplikat dari [mengapa opsi sudoers NOPASSWD tidak berfungsi?] (sudo - Why is sudoers NOPASSWD option not working? - Ask Ubuntu)

lihat juga jawaban ini : sudo does not ask for password - Ask Ubuntu