Sudoers NOPASSWD per singolo eseguibile ma permettendo ad altri


5

Sistema operativo: Arch Linux

Versione Linux: 4.16.11

Versione Sudo: 1.8.23

Di cosa ho bisogno :

  • essere in grado di eseguire any executablecon una sudorichiesta di password
  • essere in grado di eseguire un eseguibile /home/username/script.sh, senza una richiesta di password.

Quando configuro in questo modo

username ALL=(ALL) NOPASSWD: /home/username/script.sh

Ho l'effetto desiderato sul script.sh, ma non posso eseguirne nessun altro executablecon sudo.

Esempio

$ sudo ./script.sh # runs fine!

Tenta qualcos'altro

$ sudo nano /etc/sudoers
[sudo] password for username: 
Sorry, user username is not allowed to execute '/usr/bin/nano 
/etc/sudoers' as root on hostname.

Sembra che questo sia il risultato della sostituzione ALLcon NOPASSWD, e sembra che io abbia bisogno di entrambi. Se il sudoersfile ha ALLper l'utente, posso eseguire quello che voglio con la richiesta della password

username ALL=(ALL) ALL

Ho provato a combinare ALL e NOPASSWD ma non ho avuto risultati

username ALL=(ALL) ALL, NOPASSWD: /home/username/script.sh

In questo modo richiede password script.sh.

Posso avere entrambi?


1
Se l'utente dispone delle autorizzazioni di scrittura sul file, può ignorare facilmente il controllo della password modificandolo. Le NOPASSWDopzioni dovrebbero essere utilizzate per gli eseguibili che non possono essere modificati dagli utenti, ad esempio ifconfigper un amministratore di rete.
NieDzejkob,

Risposte:


14

man 5 sudoers dice (sezione "Formato file Sudoers"):

Quando più voci corrispondono per un utente, vengono applicate in ordine. In caso di più corrispondenze, viene utilizzata l'ultima corrispondenza (che non è necessariamente la corrispondenza più specifica).

Quindi dovresti avere queste righe esattamente in questo ordine:

username ALL=(ALL) ALL
username ALL=(ALL) NOPASSWD: /home/username/script.sh

e qualsiasi riga che corrisponda anche (come ad esempio %sudo ALL=(ALL:ALL) ALL) dovrebbe essere prima della NOPASSWDriga.


3

Troverai spesso una linea come questa in /etc/sudoers:

# Allow members of group sudo to execute any command
%wheel   ALL=(ALL:ALL) ALL

Ciò consentirà a qualsiasi utente appartenente al gruppo " wheel " di avvalersi di sudoun'idonea prova dell'identità (ad esempio: la sua password). Il gruppo nominato può anche essere " sudo ", " admin " o altri ... (es. La linea inizia con %sudo)

Se questo è presente nel file, esegui idper vedere in quali gruppi ti trovi:

$ id
uid=1000(attie) gid=1000(attie) groups=1000(attie),27(sudo),117(docker)

Se l'utente non fa parte del gruppo appropriato, è necessario aggiungere l'utente a quel gruppo.


Un'alternativa sarebbe quella di elencare entrambe le tue regole una per una, con l'ultima regola corrispondente ad avere effetto (cioè: l'ordine è importante):

username ALL=(ALL) ALL
username ALL=(ALL) NOPASSWD: /home/username/script.sh

Vedi la pagina ArchWiki su sudo: https://wiki.archlinux.org/index.php/sudo#Example_entries


1
Grazie. Sebbene tu abbia risposto per primo, Kamil è stato il primo a fornire la risposta più adatta a me, quindi la risposta accettata è quella di Kamil.
Yaroslav Mytkalyk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.