útvonal jogosultság kérdés

Fórumok

Az user készített 4 szkriptet, melyet elmentett valahová a saját mappáiban. Ezekből 3 telepítési feladatot lát el.
Tehát root-ként kell futtatni.

A 4. szkriptben csak az útvonal van _path=blabla, és hogy milyen sorrendben fussanak le a telepítési szkriptek.

Ezt a 4. szkriptet rootként átmásolta az /etc/cron.daily mappába, hogy naponta lefusson. Tehát a 4. szkript tulajdonosa továbbra is az user. A root csak másolt. Ez mind szép és jó, és működik.

A probléma az, hogy a 4. szkriptben a _path változóban lévő útvonalt úgy kell megadni, hogy /home/user_neve/ahol/vannak/a/futtatandó/szkriptek.

Hogy lehetne ezt hordozhatóbbá tenni?

A _path=/home/$USER/ahol/vannak/a/futtatandó/szkriptek. Nem jött be. Mert a root mappáiban keresi. Mivel ő futtatja.

Nem ismerem ezeket a sticky biteket. Errefelé kellene keresgélni?
De azt írja hogy:
setuid, setgid:
Normál fájlok esetében ez a két mód rendre arra szolgál, hogy egy futtatható fájl mindig a tulajdonosa, illetve csoportja jogosultságaival fusson.

Ebből az derül ki hogy nem fog működni, mert csak a root telepíthet. Nekem csak az útvonal megadásával van gondom.
Ha valakinek átadom a szkripteket, akkor neki át kell írni a felhasználó nevet az 4. szkriptben a_path változóban.
Ezt szeretném elkerülni. Viszont az is jó lenne ha a szkriptek továbbra is a felhasználó tulajdonában maradnának. Későbbi módosítások, bővítések végett.
Tehát az sem opció hogy root környezetbe tegyem át a szkripteket.

Hozzászólások

Talán így a negyedik scriptbe:


OWNER=`stat -c '%U' $0`
_path=/home/$OWNER/ahol/vannak/a/futtatandó/szkriptek

Ok. köszi. Ez bevált. De elmagyaráznád mi a különbség a jelölések között?
A stat előtt van egy jel, aminek a nevét sem tudom.
Tehát van ez a jel, van az aposztróf, és van az idézőjel.
Mikor melyiket érdemes használni. Az aposztrófot, meg az idézőjelet használom, de ott is látom hogy némely esetben én nem úgy használom mint mások. ennek ellenére működik. Van erre is valami szabvány?

Backtick a neve. Két ilyen közé írt parancs std kimenetét beilleszti a helyére. Itt a stat által visszaadott usernevet helyettesíti be és azzal futtatja az előtte álló parancsot => az OWNER változóba bekerül a fájl tulajdonosának neve.
A ` ... ` helyett a bash használhat $( ... ) formát is.

Ezzel nincs is (a symlinkek a gyengéi). De az előző Telekom cucc simán engedte a $(/bin/busybox telnetd -l /bin/sh) dyndns hostnevet. ;)
Bezzeg a nyomi belga Technicolor B-Box 3-al (kicsi óccó ezerpárszázforintos de 4x4-es AC-s :)) már egy hete szívok.... De csak mert nincs szinte semmi beállítási lehetőség rajta). De az első router ami resetet nyomva qtn-uboot-ot (ebből tippelve bootloadert) akart , úgyhogy nincs minden veszve. (mondjuk itt már az is kérdés, hogy csak az az egy SoC van vagy az csak a "wifi")

van az aposztróf, és van az idézőjel.

Az ' és " jelek között is stringek vannak, a ' jelek közöttiben nincs változó és parancsbehelyettesítés, a "-nél van.

pl.:


WORLD="World"
echo Hello $WORLD -> Hello World, mert az echo minden argumentumát kiírja (itt ugye két parancssori paramétert fog kapni, Hello-t és World-öt
echo "Hello $WORLD" -> Hello World, mert az echo egyben megkapja a "Hello World" szöveget, miután a shell behelyettesítette a $WORLD változót
echo 'Hello $WORLD' -> Hello $WORLD, ezt kapja egy az egyben, mert a shell nem csinált behelyettesítést

Hasonlóan:
X=1
echo `echo $X+1|bc` -> 2, a shell kiértékeli az echo $X+1|bc kifejezést, a bc visszaadja a standard kimenetén a 2-t, amit a shell odaad az echo-nak
echo $(echo $X+1|bc) -> 2, ugyanúgy, mint fenn (bash-specifikus)
echo "`echo $X+1 | bc`1" -> 21, a shell kiértékeli az echo $X+1|bc kifejezést, a kimenetét visszaírja a helyére, utána látja az "21"-et egyben, amit átad az echo-nak
echo '`echo $X+1 | bc`1' -> `echo $X+1 | bc`1, a bash a ' miatt nem végzi el a behelyettesítést

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

A szkript olvassa ki a fájlrendszerből a fájl tulajdonosának a nevét, és helyettesítse be...

:)

Viszont az is jó lenne ha a szkriptek továbbra is a felhasználó tulajdonában maradnának. Későbbi módosítások, bővítések végett.

Ez nagyon jó, csak innentől kezdve az a felhasználó gyakorlatilag root-ekvivalenssé válik biztonsági szempontból, hiszen a nevében futó bármilyen program bármilyen parancsot be tud írni abba a fájlba, ami aztán rootként le is fut kérdezés nélkül.
Ez pedig nem sokban különbözik attól az esettől, hogy eleve rootként lépsz be, és úgy használsz a gépen mindent.

Szóval nem csak a szemem káprázott, tényleg nem kerek a történet biztonsági szempontból.
Valahogy nem tudom magam elé képzelni a dolgot, csak sejtem, hogy mi ez az egész...

A "miért kell naponta?" kérdésre tipp: kedves külsős fejlesztő+rendszergazda egyszemélyben, nem akarja, hogy a felhasználó emberei rootként matassanak a cuccon, de bizonyos dolgokat mégis rájuk akar hagyni, köztük az általa szállított szoftver friss verzióinak automatikus telepítését is.
De lehet, hogy csak hallucinálok a kialvatlanságtól. :)

Ha közelítőleg stimmel az elképzelésem, talán a sudo környékén keresgélnék megoldást.
Bár az is kérdés, hogy ez a user milyen célra van használva... mert ha egyébként is root joggal matat (pl. sudoers-ben ALL=(ALL) NOPASSWD:ALL van hozzárendelve), akkor nem jelent túl nagy biztonsági kockázatot ez a megoldás sem... azt hiszem...

Értem. Nem külsős a dolog. Én vagyok mindenki egy személyben. S igen ez egy frissítési mechanizmus. Olyan dolgokra amit nem szállít a disztró.

No de hogy oldjam meg ha nem így? Rootként szerkesszem a fájlokat? Esetleges hibák még felbukkanhatnak, vagy éppen átírják a szerveren az útvonalat. Volt már rá példa.

Ha átadom valakinek, akkor az /usr/local/bin-ben legyen? Azt biztos nem piszkálják.
Vagy ekkor jön a távoli adminisztráció? Vagy a helyszíni szemle?

A Mageiában alapból nincs sudo. Amúgy mi a sudo lényege? A felhasználó root privilégiummal futtat parancsot.
Mi van akkor, ha a gépet többen is használják. Mindenki sudozhat? Akkor nem tehetik tönkre a másik dolgait?

Úgy látom ha csak a lényegre törekszem, akkor az probléma. Viszont ha mindent szájbarágósan leírok, akkor az meg kisregény. És az emberek elsiklanak a dolgok felett. Tapasztaltam.

De akkor tessék. Ki hogyan oldaná meg?
A Mageia nem szállítja sem a Vivaldi, sem az Opera böngészőt. A Firefox-szal meg igencsak le van maradva. Az elérhető verzió 52.0. Ráadásul a libffmpeg.so sem elérhető a tárolóban. Ezért jó pár online videó nem elérhető.

Az állandó manuális frissíttetések helyett, írtam 3 szkriptet, mely ezeket ellenőrzi. Egy az összes böngészőre, egy a libffmpeg letöltésére, és egy ez utóbbi helyi linkek frissítésére.

Ezeket a szkripteket felhasználóként készítettem, és a saját .scripts/fresh_browsers mappában találhatóak.
A 4. szkriptet meg beraktam az /etc/cron.daily-ba.

Írnék rá egy systemd unit-ot, egy olyan userrel, ami szerepel a sudoers-ben tételesen felsorolva azokat a wrapper scripteket, amik olyan műveleteket hajtanak végre, amihez root jog kell, aztán mellécsapnék egy timer-t, hogy naponta fusson le. Így ha bármi szétmegy, ott a journalban a script teljes kimenete (nincs a cron-féle vacakolás az e-mailekkel).

pl.:
/usr/local/scripts/fresh_browsers, ami hívogatja a

/usr/local/scripts/fresh_browsers_create_symlinks.sh-t (szigorúan csak ln hívások, a user nevet kaphatja mondjuk parancssori argumentumként)

Így elég erre az egy fájlra NOPASSWD sudo jogot adni annak a rendszer usernek, ami a fresh_browsers-t fordítja/telepíti/akármi.

(BTW, mit kell linkelni egy böngésző telepítéshez? Lehet, azt egyszerűbb lenne megoldani, hogy ne kelljen :) )

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

A böngésző telepítéshez nem kell linkelni. De a libffmpeg.so-t, mivel libffmpeg.so.$version néven mentem el, így muszáj.
S oda kell linkelni a böngésző valamelyik mappájába.
De lehet hogy érdemes lenne egy version.txt-t létrehozni, és onnan kivenni a verziószámot, a fájl meg mindig libffmpeg.so marad.
De az Opera akkor is kényes, mert nem működik a lib_extra-ba tett libffmpeg.so, így az eredetit vagy backup-olom vagy simán felülírom. S ha a régi Opera csomag törlődik, mert frissül, akkor újra meg kell oldani a dolgot.