Bagaimana cara menonaktifkan Requiretty untuk satu perintah dalam sudoers?

44

Saya ingin menonaktifkan keharusan kecil sehingga saya bisa sudo dalam skrip, tapi saya lebih suka hanya menonaktifkannya untuk satu perintah daripada segalanya. Apakah itu mungkin dalam konfigurasi sudoers?

artbristol
sumber

Jawaban:

55

Anda dapat mengganti pengaturan default untuk opsi seperti requirettyuntuk pengguna tertentu atau untuk perintah tertentu (atau untuk run-as-user atau host tertentu), tetapi tidak untuk perintah tertentu ketika dijalankan sebagai pengguna tertentu.

Sebagai contoh, dengan asumsi yang requirettydiatur dalam opsi kompilasi-default, sudoersfile berikut ini memungkinkan keduanya artbristoldan bobmengeksekusi /path/to/programsebagai root dari skrip. artbristoltidak memerlukan kata sandi padahal bobharus memasukkan kata sandi (mungkin tty_ticketsmati dan bobmemasukkan kata sandinya pada beberapa terminal baru-baru ini).

artbristol ALL = (root) NOPASSWD: /path/to/program
bob ALL = (root) /path/to/program
Defaults!/path/to/program !requiretty

Jika Anda ingin mengubah pengaturan untuk perintah dengan argumen tertentu, Anda harus menggunakan alias perintah (ini adalah batasan sintaksis). Sebagai contoh, fragmen berikut memungkinkan artbristoluntuk dijalankan /path/to/program --optiondalam skrip, tetapi tidak /path/to/programdengan argumen lain.

Cmnd_Alias MYPROGRAM = /path/to/program --option  
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty
Gilles 'SANGAT berhenti menjadi jahat'
sumber
31

Sesuatu seperti ini:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty
JRFerguson
sumber
Ini mungkin berfungsi /etc/sudoerstetapi tampaknya tidak berfungsi dalam /etc/sudoers.d/file
8bitjunkie
Untuk apa nilainya, bagi saya, pengeditan ini berhasil ketika ditambahkan ke /etc/sudoers.d/file. CentOS 7.1
John Erck
Itu tidak berfungsi untuk saya saat menggunakan /etc/sudoers.d/. CentOS 7.5 :(
Stefan Lasiewski
4

Saya menemukan hasil yang baik bagi saya menggunakan file di /etc/sudoers.d. Cukup sederhana untuk memverifikasi.

Pertama, saya buat /etc/sudoers.d/01builddengan isinya:

build    ALL=(ALL)    NOPASSWD:/bin/date
Defaults:build !requiretty

Kemudian diuji apakah itu berhasil:

ssh host sudo -n /bin/date
Mon Nov 16 16:04:27 CST 2015

Kemudian saya memodifikasi /etc/sudoers.d/01builddan menghapus Defaults:baris, dan setelah itu, saya mendapatkan:

ssh host sudo -n /bin/date
sudo: sorry, you must have a tty to run sudo
Quanah Gibson-Mount
sumber