File Sudoers, aktifkan NOPASSWD untuk pengguna, semua perintah

142

Kata pengantar

Ini adalah pertanyaan yang cukup rumit 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 sudo NOPASSWD.

Pertanyaan

Awalnya, perubahan saya hanya pada 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_reset
Defaults        mail_badpass
Defaults        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 specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    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 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.

Adakah yang bisa menjelaskan mengapa ini berhasil?

Apakah karena pengguna 'nicholsonjf' mewarisi hak sudo dari dua spesifikasi grup 'admin' dan 'sudo' (terlihat di bawah dalam file sudoers), yang mengesampingkan spesifikasi pengguna 'nicholsonjf' karena mereka lebih jauh turun dalam file konfigurasi?

James Nicholson
sumber
7
note: ALL = NOPASSWD: ALL harus ALL = = (ALL) NOPASSWD: SEMUA atau tidak berfungsi ...
André Verwijs
5
Kemungkinan rangkap dari opsi Mengapa sudoers NOPASSWD tidak berfungsi?
Anwar

Jawaban:

164

Baris yang Anda tambahkan diganti. Dari man sudoers:

Ketika beberapa entri cocok dengan pengguna, mereka diterapkan secara berurutan. Di mana ada beberapa pertandingan, pertandingan terakhir digunakan (yang belum tentu pertandingan paling spesifik).

Dalam kasus Anda nicholsonjfadalah anggota grup sudosehingga baginya baris ini berlaku:

%sudo   ALL=(ALL:ALL) ALL

Jika Anda ingin mengganti entri, /etc/sudoerscukup masukkan entri baru setelahnya.

Entri baru akan terlihat seperti

myuser ALL=(ALL) NOPASSWD: ALL untuk satu pengguna, atau

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

pabouk
sumber
6
Untuk solusi lengkap, saya ingin melihat sesuatu tentang NOPASSWDjawaban ini ...
Daniel Alder
22
Saya pikir, solusinya adalah:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder
3
@DanielAlder: Baris spesifikasi dari pertanyaan nicholsonjf ALL=NOPASSWD: ALLsudah benar. Itu hanya di tempat yang salah seperti yang saya jelaskan dalam jawaban. ------ RunasSpesifikasi - dalam kasus Anda (ALL)- adalah opsional. Jika Anda menghilangkan spesifikasi, Anda dapat menjalankan perintah sebagai rootdan Anda tidak dapat menggunakan -udan -gopsi sudo.
pabouk
Ini adalah risiko keamanan yang lebih buruk karena memberikan beberapa pengguna akses tanpa kata sandi. Jika itu PC pribadi Anda, maka itu tidak signifikan - mungkin. Saya hanya memindahkan garis pribadi, ke yang terakhir.
Mark Williams
4
Tambahan, alih-alih koreksi, jika menggunakan sesuatu berbasis debian / ubuntu (mungkin diterapkan secara umum, tidak melihatnya di tempat lain) Taruhan praktik terbaik Anda adalah menambahkan perintah khusus ke file di /etc/sudoers.d/ dan tinggalkan sudoers itu sendiri untuk dikelola oleh manajer paket.
Aquarion
120

Untuk satu pengguna, tambahkan baris ini di akhir sudoersfile Anda menggunakansudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Untuk grup

%supergroup  ALL=(ALL) NOPASSWD: ALL
Fedir RYKHTIK
sumber
8
Sebelum saya membaca jawaban ini saya lakukan %sudo ALL=NOPASSWD: ALLdan berhasil. Apakah saya satu-satunya yang menemukan Formulir Extended Backus-Naur benar-benar sulit untuk dipahami?
Vince
4
@Vince Ketika menggunakan perintah Anda, saya tidak bisa sudotanpa kata sandi sebagai pengguna tanpa hak sudo. Misalnya sudo -u root -iberhasil, tetapi sudo -u git -itidak.
NeverEndingQueue
Ini adalah jawaban yang jauh lebih bermanfaat daripada yang diterima, yang walaupun menjawab pertanyaan OP, mungkin bukan apa yang kebanyakan orang mencapai halaman ini melalui pencarian Google.
Mahmoud Al-Qudsi
3

Untuk tidak pernah meminta pengguna saat ini untuk kata sandi saat pengguna itu sudomelakukannya

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

ini akan membuat file bernama /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passworddan akan berarti bahwa pengguna yang Anda jalankan perintah itu tidak akan diminta kata sandi ketika menjalankan sudoperintah. Anda masih akan dimintai kata sandi dalam konteks lain, seperti menginstal hal-hal dari aplikasi grafis Perangkat Lunak Ubuntu .

Keuntungan melakukannya dengan cara ini daripada menambahkan baris dalam echoperintah untuk /etc/sudoersmenggunakan sudo visudo(seperti yang disarankan oleh jawaban lain) adalah

  1. /etc/sudoerskadang-kadang dimodifikasi oleh pembaruan sistem, sedangkan file di /etc/sudoers.dtidak
  2. yang sudo visudometode adalah rentan terhadap kesalahan (yang dibuktikan dengan pertanyaan ini), sedangkan copy / paste sebuah perintah jauh lebih sulit untuk mengacaukan

Menurut sudo cat /etc/sudoers.d/READMEfitur ini (memasukkan file sudoer tambahan /etc/sudoers.d) telah diaktifkan secara default sejak Debian 1.7.2p1-1, yang keluar pada akhir 1990-an (Ubuntu didasarkan pada Debian ).

Boris
sumber
(jangan ragu untuk mengedit jawaban saya jika Anda dapat membuat nama file yang lebih baik)
Boris
0

Seperti Vince telah disebutkan dalam komentar , Anda dapat menggunakan baris ini:

%sudo ALL=NOPASSWD: ALL

(Hal ini berbeda dari garis yang ditunjukkan dalam mereka jawaban , dan memecahkan masalah bagi saya.)

E. Fortes
sumber
@ Elia ini tidak jauh berbeda dari jawaban lainnya. Yang dilakukannya hanyalah mengganti placeholder supergroupdalam jawaban Fedir dengan sudo. Bagaimana selanjutnya, pengguna lain untuk grup wheel? Atau grup lain yang kebetulan digunakan pengguna?
muru
1
@muru "Yang dilakukannya hanyalah mengganti placeholder supergroupdalam jawaban Fedir dengan sudo." Apa? Mengganti supergroupdengan sudodalam garis %supergroup ALL=(ALL) NOPASSWD:ALLmenghasilkan %sudo ALL=(ALL) NOPASSWD:ALL, bukan %sudo ALL=NOPASSWD: ALL.
Eliah Kagan
Yang bisa dibilang lebih buruk, karena sekarang NOPASSWD hanya untuk root sebagai pengguna target. Jadi, itu bahkan tidak menjawab pertanyaan dengan benar!
muru
@uru Apa yang bahkan tidak bisa dibantah , adalah substitusi supergroupdengan sudo. Ini adalah jawabannya sendiri, bukan posting terima kasih atau salinan dari jawaban lain. Tapi ya, saya setuju: kecuali mereka bermaksud demikian , ini tidak akan sebaik bagi kebanyakan pengguna seperti metode dalam jawaban lainnya. (Tapi, terutama mengingat pertanyaannya mengatakan "semua perintah," bukan "semua pengguna target," Saya tidak berpikir ini berlaku bahkan tidak berusaha untuk menjawab pertanyaan yang diajukan.)
Eliah Kagan
Ini bekerja untuk saya dan saya ingin berbagi dengan pengguna lain :) (hapus komentar saya jika diinginkan).
E. Fortes