sudo szabályok (sudoers file) kezdőknek

A `sudoers` formátuma annyire felhasználóbarát és megkönnyített, hogy amikor évente egyszer hozzá kell nyúlnom, garantáltan fogalmam sincs, hogy melyik 'ALL' mit jelent, és ki kivel van. Most kiollóztam a manualból egy végtelenül leegyszerűsített leírást.

$rule:                $User_List $Host_List '=' $Cmnd_Spec_List_List

$User_List:           $User | $User_List ',' $User
$User:                $username | '%' $groupname | ...

$Host_List:           "ALL" | $Host | $Host_List ',' $Host
$Host:                $hostname | $ip | ...

$Cmnd_Spec_List_List: $Cmnd_Spec_List | $Cmnd_Spec_List_List ':' $Cmnd_Spec_List
$Cmnd_Spec_List:      $Cmnd_Spec | $Cmnd_Spec_List ',' $Cmnd_Spec_List

$Cmnd_Spec:           $Runas_Spec $Options $Command
$Command:             "ALL" | ...

$Runas_Spec:          |
                      | "(ALL)"
                      | '(' $Runas_User_List ')'
                      | '('                  ':' $Runas_Group_List ')'
                      | '(' $Runas_User_List ':' $Runas_Group_List ')'

$Runas_User_List:     $Runas_User  | $Runas_User_List  ',' $Runas_User
$Runas_Group_List:    $Runas_Group | $Runas_Group_List ',' $Runas_Group

$Runas_User:          $username  | ...
$Runas_Group:         $groupname | ...

$Opt_Options:         | $Opt_Options $Option
$Option:              "PASSWD:" | "NOPASSWD:" | "SETENV:" | "NOSETENV:" | ...

Quickstart:

freddie,%wheel  ALL=                NOPASSWD: ALL
ted,%developers ALL=(cvs_tech_user) NOPASSWD: /usr/bin/cvs

Szerk: a mintapéldában felesleges kettőspont volt. Nyilván azt bizonyítandó, hogy könnyű elrontani.

Hozzászólások

"sudoers", hogy még hasznosabb legyen. :)

Ezt is valami babzsákfejlesztő kreálta, az tuti! Most hajbival vagyok!

Szerkesztve: 2023. 05. 14., v – 00:13

Ja, ez ilyen, meg lehet szokni, de elég barom egy szintaxisa van, de ehhez hozzá kell venni, hogy egy 43 éves projekt, akkoriban az olvashatatlanságig tömör szintaxisra mentek rá, nem a felhasználóbarátságra. Ezért is szeretem jobban a doas-t, annak sokkal olvashatóbb, emberbarátabb a szintaxisa. Nem tökéletes, de a sudoers-t veri.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Meg aztán saját fejlesztési tapasztalat, hogy kitalálsz egy problémára egy infrastruktúrát, gyönyörűen implementálod, elégedett vagy, talán még pezsgőt is bontasz. Aztán jön egy újabb probléma, amelyet ezzel az infrastruktúrával célszerű megoldani, de nem egészen illik a koncepcióba. Nem baj, kitalálod a trükköt, hogyan erőszakolhatod bele, de már van a leírójában olyan valami, ami ebben az esetben kicsit mást jelent, mint ahogyan ez ki lett találva.

Aztán jön egy újabb probléma, amit ezzel az infrastruktúrával kellene megoldani, de már nagyon nem illik az eredeti koncepcióba, és elkezdesz gányolni, olyan egyedi, nem általános kódrészeket beleírni, amit két hét múlva komment nélkül te magad sem értesz már.

Kinőtted az infrastruktúrát, egyre nagyobb koloncként cipeled az egykor gyönyörű alkotásod torzóját, és egyre erősebb a kísértés, hogy teljesen újraírd az egészet, de akkor ugye borul az a környezet is, ahonnan ezeket a függvényeket hívod. Félsz hozzányúlni, feltúrni az egész kódot, nincs rá időd, a főnököd nem érti, miért fizessen olyan munkádért, aminek nem lesz látható eredménye az ügyfélnél, különben is, most is működik a berendezés.

Csak te szívsz, ha csak minimálisan hozzá kell nyúlni, és senki nem érti, mi a francot dolgozol már két napja azon a problémán, hogy egy mérés két másodperccel később kezdődjön el, és valahol gyulladjon ki egy LED.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Igen, én értettem mit akartál mondani, ezért kérdeztem, hogy nem torzulatot akartál-e írni, mert a torzó az (emberi) törzset jelent (anatómiailag); szobroknál szokták olyan kontextusban is használni, hogy csak felsőtest, - azaz se kezek, se lábak, se fej. Ilyen egy szoftver esetén maximum csonkolással keletkezik; lefejezed a szoftvert, vagy, hogy egy rossz angol szóviccet is elsüssek: disarming the software, stb.
Az eredegileg szép, de eltorzult szörnyszülötre talán az abomináció a jó szinonima.

A programozás ezért művészet. Nem elég, ha egy szoftver lefordult, működik, hanem akkor lesz hosszú távon életképes, ha koncepcionálisan jól van megírva, a kód újrahasznosítható, portolható, később úgy bővíthető, hogy több minden még beleillik, könnyű benne új funkciókat modulárisan létrehozni, pluginezni, stb..

Egyébként a sudoers nem annyira szörnyű azért, meg lehet tanulni a szintaxist, és nem muszáj a sudo minden spéci funkcióját használni. A /etc/sudoers lehet mindössze szög egyszerű, 1 soros is:
%wheel ALL=(ALL:ALL) ALL

Csak sok disztró agyonbonyolított, szétkommentelt sudoers-zel jön, hogy némileg dokumentációjellege is legyen. Közben meg a desktop felhasználók 99%-ának elég lenne az 1-2 soros egyszerű megoldás, azt a felhasználót, meg berakják a wheel csoportba (vagy egy admin vagy sudo vagy akárminek elkeresztelt csoportba, ez átírható a %wheel helyén), aminek tényleges sudo-használati jogot akarnak adni. Ennyi. Igazából még visudo-val sem kéne bonyolítani, azt azért szokták, hogy a szintaxis helyessége ellenőrizhető legyen.

Ugyanez doas alatt szintén csak 1 sor a /etc/doas.conf fájlban (ez már az env változókat is átveszi, és jelszót megjegyzi, nem kéri be egy default 5 perces átmeneti ideig):
permit persist keepenv :wheel as root

Természetesen lehet a doas-t is bonyolítani, egyes felhasználóknak, csoportoknak csak bizonyos parancsokat engedni, vagy azokat is csak bizonyos paraméterekkel, vagy szűkítésekkel, bővítésekkel (pl. nem kell jelszót gépelni, stb.). Csak ugye a legtöbb felhasználónak elég, ha a wheel csoportba tartozó usere tud egy-egy utasítás erejéig általánosan admin jogot szerezni, ehhez meg elég az 1 soros konfig is.

Legtöbbször én már csak doas-t és doasedit-et használok. A sudo csak azért maradt a rendszereimen, mert egyes megoldásoknak függősége lehet, amik sudo-ra vannak bedrótozva fixen, illetve pacman-nal használom még a sudo-t, mert ha doas pacman-t használok, akkor a Bash nem egészíti ki tab billentyűre a csomagneveket Arch-on sajnos, és bár próbáltam ez ellen tenni, pl. .bashrc-ben complete -cf doas sor hozzáadásával, meg a /usr/share/bash-completion/completions-be belenyúlni, de nem tudtam megoldani úgy, hogy valóban működjön. Persze nem adtam még fel, mert elvi síkon megoldható. Sudo-t azért se akarok, mert később át akarok majd egy ponton nyergelni valamelyik BSD-re, és ott nem nagyon szokás használni, persze felrakható, de alap telepítésben nincs ott a rendszeren, és nem is kell neki. Ugyanígy próbálok meglenni Bash, zsh, GNU coreutils extension-ök nélkül, és pl. csak szigorúbban POSIX kompatibilis scripteket írni, stb..

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

jah, hat az egyszeru wannbepistikek 99%-nak boven eleg az az egy sor. sudo -s, mc, aztan gyii! :)

de ha van egy nagyobb csapat, akar l1-l2-l* szintek, es a biztonsagra is akarsz adni, akkor szepen be lehet allitani ki-mikor-honnan-miert-mit futtathat. nem a sudo tehet rola hogy szarnak a lehetosegekre...

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!