Bagaimana cara menjalankan perintah sudo tertentu tanpa kata sandi?

211

Pada satu mesin tertentu saya sering perlu menjalankan sudoperintah setiap sekarang dan kemudian. Saya baik-baik saja dengan memasukkan kata sandi pada sudosebagian besar kasus.

Namun ada tiga sudoperintah yang ingin saya jalankan tanpa memasukkan kata sandi :

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

Bagaimana saya bisa mengecualikan perintah ini dari perlindungan kata sandi sudo?

Bhavesh Diwan
sumber

Jawaban:

283

Gunakan NOPASSWDarahan

Anda dapat menggunakan NOPASSWDarahan dalam /etc/sudoersfile Anda .

Jika pengguna Anda dipanggil userdan host hostAnda dipanggil, Anda bisa menambahkan baris ini ke /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Ini akan memungkinkan pengguna useruntuk menjalankan perintah yang diinginkan hosttanpa memasukkan kata sandi. Semua sudoperintah ed lainnya masih memerlukan kata sandi.

Perintah yang ditentukan dalam sudoersfile harus sepenuhnya memenuhi syarat (yaitu menggunakan jalur absolut ke perintah untuk menjalankan) seperti yang dijelaskan dalam sudoershalaman manual . Menyediakan jalur relatif dianggap sebagai kesalahan sintaksis.

Jika perintah berakhir dengan /karakter trailing dan menunjuk ke direktori, pengguna akan dapat menjalankan perintah apa pun di direktori itu (tetapi tidak dalam sub-direktori di dalamnya). Dalam contoh berikut, pengguna userdapat menjalankan perintah apa pun di direktori /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Catatan: Selalu gunakan perintah visudountuk mengedit sudoersfile untuk memastikan Anda tidak mengunci diri dari sistem - kalau-kalau Anda tidak sengaja menulis sesuatu yang salah ke sudoersfile. visudoakan menyimpan file Anda yang dimodifikasi ke lokasi sementara dan hanya akan menimpa sudoersfile asli jika file yang dimodifikasi dapat diuraikan tanpa kesalahan.

Menggunakan /etc/sudoers.dalih-alih memodifikasi/etc/sudoers

Sebagai alternatif untuk mengedit /etc/sudoersfile, Anda bisa menambahkan dua baris ke file baru di /etc/sudoers.dmis /etc/sudoers.d/shutdown. Ini adalah cara yang elegan untuk memisahkan berbagai perubahan pada sudohak dan juga membiarkan sudoersfile asli tidak tersentuh untuk peningkatan yang lebih mudah.

Catatan: Sekali lagi, Anda harus menggunakan perintah visudountuk mengedit file untuk memastikan Anda tidak mengunci diri dari sistem:

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

Ini juga secara otomatis memastikan bahwa pemilik dan izin file baru diatur dengan benar.

Jika sudoerskacau

Jika Anda tidak menggunakan visudountuk mengedit file Anda dan kemudian secara tidak sengaja mengacaukan /etc/sudoersatau mengacaukan file /etc/sudoers.dmaka Anda akan dikunci sudo.

Solusinya bisa dengan memperbaiki file menggunakan pkexecyang merupakan alternatif sudo.

Untuk memperbaiki /etc/sudoers:

pkexec visudo

Untuk memperbaiki /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Jika kepemilikan dan / atau izin tidak benar untuk sudoersfile apa pun , file tersebut akan diabaikan oleh sudosehingga Anda mungkin juga menemukan diri Anda terkunci dalam situasi ini. Sekali lagi, Anda dapat menggunakannya pkexecuntuk memperbaikinya.

Izin yang benar harus seperti ini:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Gunakan pkexecseperti ini untuk memperbaiki kepemilikan dan izin :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
mgd
sumber
2
Dua baris merujuk secara khusus pada dua perintah ini. Jika usertidak dengan cara lain diberikan sudohak, tidak ada perintah lain yang bisa di-sudo oleh pengguna ini. Lihatlah man sudodan man sudoers.
mgd
4
@StanKurdziel Aku mencoba dengan baris ini di Mac OS X Yosemite dan bekerja dengan baik: mgd ALL=(root) NOPASSWD: /var/root/test. Saya pengguna mgddan ALLberarti "dari semua host" . /var/root/testadalah sederhana "Hello World" shell skrip dengan izin: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Saya tidak membuat perubahan lain pada sistem.
mgd
2
Apa yang ada hostdi file sudoers?
user106563
1
Ini bukan jawaban, itu hampir panduan lengkap tentang arahan NOPASSWD. Terima kasih.
Eray
1
@Michael tolong baca halaman manual. Semuanya tertulis di sana. Mengutipnya: Namun, Anda juga dapat menentukan argumen baris perintah (termasuk wildcard). Sebagai alternatif, Anda dapat menentukan "" untuk menunjukkan bahwa perintah hanya dapat dijalankan tanpa argumen baris perintah.
mgd
3

Maaf tapi ada begitu banyak kebingungan tentang ini dan beberapa jawaban yang sangat rumit, sehingga saya merasa harus menimbang di sini sebelum seseorang salah paham dan melakukan sesuatu yang gila.

Menggunakan visudo !!

Tambahkan baris berikut ke konfigurasi:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Ini memungkinkan perintah, reboot dan shutdown dengan parameter apa saja untuk dieksekusi dari pengguna mana pun.

Tolong susun pertukaran, cukup berikan jawaban singkat yang sederhana.

Burung hantu
sumber