Menambahkan NOPASSWD di / etc / sudoers tidak berfungsi

47

Pada 14,04 di sini. Saya SSH ke mesin saya, menambahkan baris berikut ke /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

Dan kemudian mencoba menjalankan:

sudo mkdir /etc/blah

... dan saya dimintai kata sandi. Mengapa?!?

Saya tidak ingin dimintai kata sandi ketika melakukan operasi ini. Harap dicatat bahwa ketika saya menjalankan ls -ltr /saya mendapatkan:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Tapi saya tidak berpikir ini penting karena saya telah mengatur diri saya sebagai "sudoer", kan?

Lebih penting lagi, apa yang harus saya lakukan agar saya dapat berjalan sudo mkdir /etc/blahsebagai pengguna saya saat ini ( myuser) tanpa diminta kata sandi?

Inilah seluruh /etc/sudoersfile saya :

#
# 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
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   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
Zac
sumber
Bisakah Anda memposting file sudoers Anda? Arahan itu benar, tetapi itu tidak bisa bekerja karena konteksnya.
Lety
Terima kasih @ Lizia - silakan lihat pembaruan saya, ada yang melompat keluar pada Anda?
Zac
Saya kira saya juga harus mencatat bahwa saya tidak menggunakan visudonamun setiap pengeditan manual untuk file ini bukan pekerjaan copy-n-paste, saya mengetik semuanya apa adanya. Tetapi apakah visudomengedit file lain selain yang ini? Mungkin itu ...
Zac
2
Kemungkinan rangkap dari opsi Mengapa sudoers NOPASSWD tidak berfungsi?
Anwar
Juga, periksa semua file di /etc/sudoers.d/, mereka mungkin mengesampingkan hal-hal dari/etc/sudoers
tokland

Jawaban:

69

Ini adalah urutan / urutan aturan yang menyebabkan ini. Aturan terakhir mengambil preferensi.

Untuk memperbaiki masalah Anda, cukup pindahkan garis Anda,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

dari sudoersfile ke

sudo visudo -f /etc/sudoers.d/myOverrides 

Ini adalah pendekatan yang lebih baik daripada mengedit sudoersfile dengan editor teks biasa. Jika Anda secara tidak sengaja memasukkan kesalahan ke dalam file, Anda mungkin tidak lagi dapat menjalankannya sudo. Selalu gunakan visudo, sehingga sintaks diperiksa dan Anda menerima peringatan tentang kesalahan!

Arahan Anda tidak berfungsi karena ditimpa oleh:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Jika Anda menjalankan groupsperintah, Anda akan melihat bahwa pengguna Anda termasuk dalam grup ini.

Lety
sumber
Nama file harus mengikuti konvensi nn-somename, misalnya/etc/sudoers.d/20-myoverrides
shimatai
Ya, tentu saja, jika Anda memiliki lebih dari satu file, ini diuraikan dalam urutan leksikal yang diurutkan, jadi itu adalah praktik yang baik untuk menggunakan nomor dan akan mudah untuk mengetahui urutan itu.
Lety
22

Jika myuser berada dalam grup sudo , maka urutan baris ini tidak akan memberikan akses tanpa kata sandi (seperti dicatat oleh Florian Diesch), karena baris ke-3 menimpa yang pertama.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Jadi masukkan saja garis-garis ke dalam urutan ini:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

Di bawah myuser penggunaan akun sudo -luntuk memeriksa apa hak akses myuser memiliki.

Kostyantyn
sumber
11

Jika beberapa entri cocok dengan pengguna, yang terakhir digunakan. Jadi jika fizzbuzzdan chadminadalah anggota kelompok adminatau sudomereka masih akan diminta kata sandi.

Letakkan dua baris di akhir sudoersfile setelah #includedirbaris.

Florian Diesch
sumber
Memang, kombinasi @ Letizia dan jawaban Anda adalah yang terbaik, karena #includedirini adalah entri terakhir sudoerssecara default.
muru
0

Idealnya jika Anda mengkustomisasi perintah apa yang dapat dijalankan melalui sudoAnda harus membuat perubahan ini dalam file terpisah di bawah /etc/sudoers.d/alih-alih mengedit sudoersfile secara langsung. Anda juga harus selalu menggunakan visudountuk mengedit file. Anda harus PERNAH memberikan NOPASSWDpada ALLperintah.

Contoh: sudo visudo -f /etc/sudoers.d/mynotriskycommand

Masukkan izin pemberian baris Anda: myuser ALL= NOPASSWD: /bin/mkdir

Kemudian simpan dan keluar dan visudoakan memperingatkan Anda jika Anda memiliki kesalahan sintaksis.

Anda dapat berlari sudo -luntuk melihat izin yang telah diberikan oleh pengguna Anda, jika ada NOPASSWDperintah khusus pengguna yang muncul SEBELUM %groupyouarein ALL=(ALL) ALLperintah apa pun dalam output, Anda akan dimintai kata sandi.

Jika Anda menemukan diri Anda membuat banyak file sudoers.d ini, maka mungkin Anda ingin membuatnya bernama per pengguna sehingga lebih mudah untuk divisualisasikan. Perlu diingat bahwa urutan NAMA FILE dan ATURAN dalam file sangat penting, yang TERAKHIR yang dimuat menang, baik LEBIH atau KURANG permisif daripada entri sebelumnya.

Anda dapat mengontrol urutan nama file dengan menggunakan awalan 00-99 atau aa / bb / cc, meskipun perlu diingat bahwa jika Anda memiliki file APA PUN yang tidak memiliki awalan numerik, mereka akan memuat setelah file bernomor, menimpa pengaturan. Ini karena tergantung pada pengaturan bahasa Anda, "pengurutan leksikal" shell menggunakan nomor urut pertama dan kemudian dapat interleave huruf besar dan kecil ketika mengurutkan dalam urutan "naik".

Coba jalankan printf '%s\n' {{0..99},{A-Z},{a-z}} | sortdan printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortuntuk melihat apakah bahasa Anda saat ini mencetak AaBbCcdll atau ABCkemudian abcuntuk menentukan apa awalan huruf "terakhir" terbaik yang akan digunakan.

dragon788
sumber