Jak wyłączyć Requtty dla pojedynczego polecenia w sudoers?

44

Chcę wyłączyć Requtty, aby móc sudo w skryptach, ale wolę wyłączyć go tylko dla jednego polecenia, a nie dla wszystkich. Czy jest to możliwe w konfiguracji sudoers?

artbrystol
źródło

Odpowiedzi:

55

Możesz zastąpić domyślne ustawienie opcji, takich jak requirettydla konkretnego użytkownika lub określonego polecenia (lub określonego użytkownika uruchamianego jako użytkownik lub host), ale nie dla określonego polecenia, gdy jest wykonywane jako określony użytkownik.

Na przykład, zakładając, że requirettyjest ustawiony w opcjach kompilacji domyślnie następujące sudoersplików umożliwia zarówno artbristoli bobwykonać /path/to/programjako root ze skryptu. artbristolnie potrzebuje hasła, ale bobmusi wprowadzić hasło (prawdopodobnie tty_ticketsjest wyłączone i bobostatnio wprowadziło swoje hasło w niektórych terminalach).

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

Jeśli chcesz zmienić ustawienie polecenia z określonymi argumentami, musisz użyć aliasu polecenia (jest to ograniczenie składniowe). Na przykład poniższy fragment pozwala artbristolna uruchomienie /path/to/program --optionw skrypcie, ale nie /path/to/programz innymi argumentami.

Cmnd_Alias MYPROGRAM = /path/to/program --option  
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty
Gilles „SO- przestań być zły”
źródło
31

Coś takiego:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty
JRFerguson
źródło
Może to działać, /etc/sudoersale wydaje się, że nie działa w /etc/sudoers.d/pliku
8bitjunkie
Jak dla mnie warto, ta edycja działała po dodaniu do /etc/sudoers.d/pliku. CentOS 7.1
John Erck
Nie działa dla mnie podczas używania /etc/sudoers.d/. CentOS 7.5 :(
Stefan Lasiewski
4

Odkryłem, że działa dobrze dla mnie przy użyciu pliku w /etc/sudoers.d. Jest to dość proste do zweryfikowania.

Najpierw stworzyłem /etc/sudoers.d/01buildz zawartością:

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

Następnie przetestowałem, że to działa:

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

Następnie zmodyfikowałem /etc/sudoers.d/01buildi usunąłem Defaults:linię, a następnie otrzymuję:

ssh host sudo -n /bin/date
sudo: sorry, you must have a tty to run sudo
Quanah Gibson-Mount
źródło