Perché le direttive #include e #includedir in sudo sono precedute dal carattere cancelletto (#)


36

Durante l'impostazione di un sudoambiente ho notato che la direttiva include è preceduta dal carattere cancelletto (#).

Solaris lo mostra come:

## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

Il manuale (Linux e Solaris) afferma:

Includere altri file dall'interno dei sudoers È possibile includere altri file dei sudoers all'interno del file dei sudoers attualmente analizzati usando le direttive #include e #includedir.

E:

Altri caratteri speciali e parole riservate Il cancelletto (`# ') viene utilizzato per indicare un commento (a meno che non faccia parte di una direttiva #include o a meno che non si presenti nel contesto di un nome utente e sia seguito da una o più cifre, nel qual caso viene trattato come uid). Sia il carattere di commento che qualsiasi testo dopo di esso, fino alla fine della riga, vengono ignorati.

Qualcuno sa perché è stata fatta la scelta di utilizzare il carattere cancelletto nelle direttive #includee #includedir?

Come nota a margine: uso spesso qualcosa del genere egrep -v '^#|^$' configfileper ottenere le impostazioni configurate non predefinite / attive, e questo ovviamente non funziona per il sudoersfile.

Risposte:


38

#includeè stato aggiunto nel 2004 . Doveva essere compatibile con ciò che era già lì. Non penso che include /path/to/filesarebbe stato ambiguo, però, ma avrebbe potuto essere un po 'più difficile da analizzare, perché il parser avrebbe dovuto distinguere include /path/to/file(include direttiva) da include = foo(consentire all'utente includedi eseguire il comando foo).

Ma penso principalmente che il motivo sia stato quello di assomigliare al preprocessore C, che il manuale cita esplicitamente come fonte di ispirazione.


1
Bella cattura e spiegazione, purtroppo quelle spiegazioni sono rimosse dai manuali (almeno su Ubuntu, RedHat, OpenBSD e Solaris).
Lambert,

2
La prima volta che ho analizzato il mio sudoersfile ho pensato che fosse includeuna direttiva ed #includeè stata commentata . La regola della minima sorpresa è stata violata violentemente. Secondo me è un cattivo design.
Kamil Maciorowski il
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.