Pertanyaan Bagaimana cara menjalankan perintah sudo tertentu tanpa kata sandi?


Pada satu mesin tertentu saya sering harus berlari sudo perintah setiap sekarang dan kemudian. Saya tidak keberatan memasukkan kata sandi sudo di sebagian besar kasus.

Namun ada tiga sudo perintah saya ingin berlari tanpa memasukkan kata sandi:

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

Bagaimana cara mengecualikan perintah-perintah ini dari proteksi kata sandi ke sudo?


187
2017-07-03 08:31


asal


Mirip dengan Bagaimana cara mengijinkan eksekusi tanpa menggunakan sudo? - fouric


Jawaban:


Menggunakan NOPASSWD direktif

Anda dapat menggunakan NOPASSWD direktif dalam Anda /etc/sudoers mengajukan.

Jika pengguna Anda dipanggil user dan tuan rumah Anda dipanggil host Anda bisa menambahkan baris-baris ini /etc/sudoers:

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

Ini akan memungkinkan pengguna user untuk menjalankan perintah yang diinginkan host tanpa memasukkan kata sandi. Semua yang lain sudoperintah ed akan tetap membutuhkan kata sandi.

Perintah yang ditentukan dalam sudoers mengajukan harus sepenuhnya memenuhi syarat (yaitu menggunakan jalur absolut ke perintah untuk dijalankan) sebagaimana dijelaskan dalam sudoers halaman manual. Menyediakan jalur relatif dianggap kesalahan sintaks.

Jika perintah berakhir dengan trailing / karakter 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 user dapat menjalankan perintah apa pun di direktori /home/someuser/bin/:

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

catatan: Selalu gunakan perintah visudo untuk mengedit sudoers file untuk memastikan Anda tidak mengunci diri Anda keluar dari sistem - hanya jika Anda tidak sengaja menulis sesuatu yang salah sudoers mengajukan. visudo akan menyimpan file Anda yang diubah ke lokasi sementara dan akan hanya menimpa yang asli sudoers file jika file yang dimodifikasi dapat diuraikan tanpa kesalahan.

Menggunakan /etc/sudoers.d bukannya memodifikasi /etc/sudoers

Sebagai alternatif untuk mengedit /etc/sudoers file, Anda bisa menambahkan dua baris ke file baru di /etc/sudoers.d misalnya /etc/sudoers.d/shutdown. Ini adalah cara yang elegan untuk memisahkan perubahan yang berbeda pada sudo hak dan juga meninggalkan yang asli sudoers file tidak tersentuh untuk peningkatan versi yang lebih mudah.

catatan: Sekali lagi, Anda harus menggunakan perintah visudo untuk mengedit file untuk memastikan Anda tidak mengunci diri sendiri keluar dari sistem:

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

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

Jika sudoers kacau

Jika Anda tidak menggunakannya visudo untuk mengedit file Anda dan kemudian secara tidak sengaja mengacaukan /etc/sudoers atau mengacaukan file /etc/sudoers.d maka Anda akan terkunci sudo.

Solusinya bisa dengan memperbaiki file menggunakan pkexec yang merupakan alternatif sudo.

Memperbaiki /etc/sudoers:

pkexec visudo

Memperbaiki /etc/sudoers.d/shutdown:

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

Jika kepemilikan dan / atau izin salah untuk apa pun sudoers file, file akan diabaikan oleh sudo jadi Anda mungkin juga menemukan diri Anda terkunci dalam situasi ini. Sekali lagi, Anda bisa menggunakannya pkexec untuk memperbaiki ini.

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

Menggunakan pkexec seperti ini untuk diperbaiki kepemilikan dan izin:

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

253
2017-07-03 08:43



Saya harap ini hanya akan berlaku untuk 2 perintah ini, dan saya tidak akan mengacaukan sistem lainnya atau perintah lainnya? - Z9iT
Kedua baris mengacu secara khusus pada dua perintah ini. Jika user tidak dengan cara lain yang diberikan sudo hak tidak ada perintah lain yang dapat disembuhkan oleh pengguna ini. Silahkan lihat man sudo dan man sudoers. - mgd
Awalnya saya menghadapi masalah chmod .. tambah latihan untuk ini dalam jawaban .. thanx @mgd - Z9iT
@StanKurdziel Saya mencoba dengan baris ini di Mac OS X Yosemite dan itu berfungsi dengan baik: mgd ALL=(root) NOPASSWD: /var/root/test. Saya adalah pengguna mgd dan ALL cara "dari semua host". /var/root/test adalah skrip shell "Hello World" sederhana dengan izin: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. saya membuat tidak perubahan lain ke sistem. - mgd
@Michael silakan baca halaman manual. Itu semua tertulis di sana. Untuk mengutipnya: Namun, Anda juga dapat menentukan argumen baris perintah (termasuk wildcard). Bergantian, Anda dapat menentukan "" untuk menunjukkan bahwa perintah hanya dapat dijalankan tanpa argumen baris perintah. - mgd