Mengapa opsi NOPASSWD sudoers tidak berfungsi?

75

Saya memiliki baris NOPASSWD di / etc / sudoers (diedit dengan visudo)

gatoatigrado    ALL=(ALL) NOPASSWD: /bin/set-slow-cpufreq

Namun, outputnya adalah,

gatoatigrado@coral:~> sudo -n /bin/set-slow-cpufreq
sudo: sorry, a password is required to run sudo

Perintah semacam ini bekerja pada mesin OpenSuSE, tetapi tidak pada Ubuntu 11.10. Apa yang saya lakukan salah?

Catatan : Saya tidak dapat menemukan pesan log sistem yang relevan, misalnya via tail -f /var/log/syslog.

sunting

Inilah / etc / sudoers.

Defaults    env_reset

# things I've tried copying from an opensuse machine
Defaults always_set_home
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

root    ALL=(ALL:ALL) ALL
gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
gatoatigrado
sumber
2
Bisakah Anda menunjukkan penuh sudoers, urutan aturannya tidak relevan.
enzotib

Jawaban:

117

Anda harus meletakkan baris itu setelah baris dengan aturan untuk sudogrup, karena, seperti yang sudoersdinyatakan halaman manual:

   When multiple entries match for a user, they are applied in order.
   Where there are multiple matches, the last match is used (which is not
   necessarily the most specific match).
enzotib
sumber
5
sebagai catatan tambahan, ini berlaku untuk pengguna dalam beberapa grup juga: misalnya pengguna dalam admin grup dan grup sudo jika aturan untuk sudo adalah setelah admin maka aturan untuk sudo mengesampingkan aturan admin untuk pengguna di kedua grup.
Populus
2
Terima kasih! Saya menambahkan baris saya ke akhir /etc/sudoersdan sekarang berfungsi. Penjelasan lengkap di sini untuk orang-orang yang tertarik: techglimpse.com/ubuntu-sudoers-nopasswd-option-not-working
elimisteve
4

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.

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

Masukkan izin pemberian baris Anda: gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq

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
Saya setuju dengan ini. Beberapa logika dalam mengedit file / etc / sudoers tampak berlawanan dengan intuisi - Saya tidak bisa mendapatkan% wheel ALL = (ALL) NOPASSWD: ALL untuk bekerja seperti ditulis dalam sudoers sampai saya membaca sebuah posting di mana seseorang mengatakan #includedir /etc/sudoers.d baris harus sebelum baris lain seperti% SUDO dan% WHEEL. Ketika saya menempatkan dir #include di atas izin grup lainnya, mereka mulai berfungsi. Jadi saya membuat file untuk setiap grup di /etc/sudoers.d/ bernomor dengan urutan yang sama dengan yang ada di file sudoers, tetapi root ALL = (ALL) ALL harus tetap sudoers di bawah baris #includedir. Aneh.
AveryFreeman
Sebenarnya saya pikir yang disertakan harus tetap di ujung sudoers. Apa yang mungkin Anda lihat adalah salah satu file lain di sudoers Anda. Sedang membatalkan perubahan Anda. Anda mungkin juga memiliki garis lebih jauh ke bawah di file utama Anda yang membatasi grup roda. Perlu diingat bahwa sudoers diproses di mana aturan terakhir yang berlaku untuk perintah atau grup menang sehingga menjadi lebih spesifik membantu tetapi jika perintah APAPUN umum datang di akhir dan tidak memiliki NOPASSWD itu akan menimpa pengecualian Anda sebelumnya. Inilah sebabnya mengapa Anda harus memiliki aturan dalam file yang terpisah sehingga mereka diproses nanti.
dragon788
Saya rasa tidak, itu adalah instalasi lengkungan yang benar-benar baru. Yang saya lakukan adalah mencoba dan menghapus komentar pada satu baris itu. Tapi itu pasti hal yang baik untuk diperiksa, terima kasih.
AveryFreeman
Beberapa sistem tidak benar-benar menggunakan roda dan sebaliknya menggunakan grup yang disebut sudo atau adm atau admin. Saya tidak dapat mengingat perilaku Arch tetapi Anda dapat menjalankan iddan melihat grup mana yang Anda ikuti.
dragon788
Arch menggunakan roda.
AveryFreeman
4

Hanya berlari ke ini juga.

Situasi saya adalah saya menyiapkan sistem jarak jauh yang akan berjalan tanpa kepala. Saya telah mengaktifkan enkripsi disk lengkap (jika tidak, seorang penyerang dengan akses fisik dapat melakukan apa saja yang dia inginkan) Saya ingin mengotorisasi hanya dengan kunci pub (saya akan menghapus kata sandi sehingga skema "memiliki sesuatu, tahu sesuatu" akan menjadi kata sandi keypair yang dilindungi - login root tentu saja dinonaktifkan sepenuhnya)

Pemasang Ubuntu meminta pengguna admin non-root yang ditambahkan ke grup sudo. Saya kemudian secara manual menambahkan diri ke sudoersfile menggunakan sudo visudo:

my_username ALL=(ALL:ALL) NOPASSWD:ALL

CATATAN: jika Anda menggunakan nopasswd di laptop Anda, Anda harus selalu mengunci komputer Anda saat Anda berjalan pergi atau penyerang biasa dapat banyak kompromi saat Anda bangun untuk meletakkan krim dalam kopi Anda

Saya masih harus mengautentikasi kata sandi.

Jawaban enzotib adalah kunci untuk apa yang terjadi. Grup sudo muncul di sudoers setelah entri untuk nama pengguna saya.

Daripada memindahkan entri saya di bawah garis sudo saya hanya menghapus baris yang saya tambahkan sebelumnya dan kemudian ditambahkan NOPASSWDke entri untuk%sudo

Itu sepertinya berhasil. Sekali lagi hanya menggunakan nopasswd jika Anda benar-benar membutuhkannya (Dalam kasus saya justru itulah yang saya butuhkan, untuk sebagian besar pengguna yang membutuhkan kata sandi untuk aktivitas sudo adalah yang terbaik)

PERINGATAN Tambahan: Selalu edit sudoers dengan visudo. (sudo visudo) Selain itu, memiliki jendela lain terbuka beralih ke pengguna root memungkinkan Anda untuk memulihkan kesalahan yang mungkin Anda buat saat mengubah file sudoers.

jorfus
sumber
Tidak pernah merupakan ide yang baik untuk mengaktifkan NOPASSWD terhadap semua / semua perintah, ini berarti bahwa siapa pun yang masuk ke sistem Anda dan mengelola untuk mendapatkan pengguna ke grup sudo akan dapat melakukan APA SAJA BURUK ke sistem Anda SANGAT cepat. Saya dapat dengan mudah melakukan ini dengan hanya beberapa menit akses menggunakan LiveCD atau dengan menipu pengguna Anda untuk menjalankan cmd yang disebut sudoyang menggunakan izin Anda sendiri untuk menambahkan pengguna lain ke grup sudo selain menjalankan perintah yang Anda minta.
dragon788
2
Jangan membuat pernyataan selimut seperti ini. Pada sistem tanpa kepala itu tidak diinginkan untuk mengatur kata sandi login sama sekali (mengandalkan keypairs sebagai gantinya) Saya telah mengaktifkan enkripsi disk penuh jadi semoga sukses dengan live cd itu. (yang omong-omong akan memungkinkan Anda untuk melakukan segala macam hal menyenangkan pada sistem yang tidak terenkripsi terlepas dari file sudoers) Juga Anda tidak dapat menulis ke salah satu lokasi di PATH saya dan saya tidak memberi Anda shell untuk memulai dengan kecuali saya percaya Anda untuk tidak mencoba menumbangkan sistem. Masalah keamanan Anda tidak valid, itu sudah ketinggalan zaman dan tidak berlaku secara universal seperti yang Anda maksudkan.
jorfus
Bagi mereka yang tidak memiliki pemahaman yang mendalam tentang keamanan seperti Anda, rekomendasi semacam ini mungkin lebih baik daripada alternatifnya tapi saya setuju itu tidak ideal.
dragon788
@ dragon788 Cukup benar, mungkin kita bisa mengedit tanggapan untuk membantu pengguna dari semua tingkatan mengambil langkah menuju keamanan yang lebih baik. Saya akan menambahkan peringatan untuk mengaktifkan enkripsi disk penuh untuk mencegah kompromi ketika penyerang memiliki akses fisik dan catatan bahwa jika pengguna laptop lupa mengunci komputernya di depan umum, sudo nopasswd dapat menyebabkan kompromi cepat. (Meskipun saya akan mengusulkan pengaturan lima menit kunci dan kunci layar kunci cepat sebenarnya bisa mengarah pada keamanan yang lebih baik.)
jorfus
Pembaruan luar biasa, jawaban saya tidak memiliki rekomendasi kuat selain dari komentar-komentar ini di sini, dan ironisnya di tempat kerja saya memang menggunakan enkripsi disk penuh, saya akhirnya mengaktifkan NOPASSWD karena saya memiliki kata sandi yang sangat aman sehingga sulit untuk mengetik. berulang kali, dan saya menggunakan xautolock untuk mengunci mesin saya setelah waktu idle yang singkat.
dragon788
0

Pada sistem jarak jauh, lepaskan enkripsi, tetapi biarkan semuanya dimiliki oleh root seperti dalam grup "Administrator" - itu bukan 0!
Anda dapat mengubah #sudo -g Administrators mereka yang membutuhkan akses penuh - bukan di sudo file, tetapi .loginprofil. Setiap skrip standar sekarang dapat memiliki akses ke remote sebagai "root" dan Anda dapat melindungi file yang harus dilindungi.
"Grup" praktis lainnya adalah "Sandbox" dengan direktori login di cache browser dan dapat membaca ini dengan bebas dan tidak ada yang lain. Gunakan karakter pertama huruf besar.

Knut H
sumber