Proměnné prostředí v sudo

linux newbie

Proměnné prostředí v sudo
« kdy: 25. 06. 2011, 18:56:33 »
Dobry den.
Nainstaloval jsem Debian a mam mensi problem ohledne opravneni, ktery nejsem schopny vyresit. Touto cestou bych rad pozadal nekoho zkusenejsiho o radu.
Ve zkratce jde o webovy server (apache, tomcat), na ktery je pomoci scp nakopirovana patricna verze aplikace a nasledne pres ssh spusten skript, ktery zajisti nasazeni teto aplikace.
Nainstaloval jsem si tedy patricne knihovny a nastavil prostredi (tomcat, java, ssh, jsvc) a patricne nastavil.
  • Promenne prostredi jsem zanesl do prostredi pres profile. Napriklad tomcat.sh nastavuje CATALINA_HOME, CATALINA_TMP, CATALINA_APP_BASE.
  • Protoze nejsem priznivcem umistovani spoustecu aplikaci do /usr/local/bin, tak jsem kazdy bin adreser zahrnul do PATH opet pomoci profile. Dle meho nazoru je to prehlednejsi a snadno prenositelne.
  • Dulezite je poznamenat, ze tomcat spoustim pres jsvc. Neni nutne to rozebirat. Vice mene jde pouze o to, ze samotny tomcat bezi pod uzivatelem tomcat a ne pod uzivatelem root.
  • Nasledne jsem napsal start skript a jeho "soft link" umistil do /etc/init.d.
  • Vsechny instalovane aplikace vzdy umistuji do /opt/APLIKACE. /opt/APLIKACE/current obsahuje vzdy odkaz na aktualni verzi - napriklad odkazuje na /opt/APLIKACE/APLIKACE-v1-64b. Konfigurace, spousteci skripty jsou pak vzdy realizovane pres zminovany "link".
  • Protoze napriklad tomcat potrebuji pres init skript ovladat urciti uzivatele a ten samotny muze ovladat pouze root, tak jsem se rozhodl pro urcite skripty definovat opravneni pres sudo.
A z posledniho bodu plyne muj dotaz. V okamziku, kdy provedu spusteni daneho skriptu pres sudo, tak nemam nastavene patricne promenne prostredi. Jednoduse nedojde ke spusteni "shellu" a vykonani profile skriptu. Resenim je pouziti $sudo -i /opt/tomcat/tomcat.sh start. Problem ovsem je, ze v tomto pripade je po uzivateli pozadovano heslo, protoze se spousti shell a az nasledne tomcat.sh. Musel jsem tedy zanest do konfigurace prikazu sudo i shell. To je velice nebezpecne a nepekne reseni, kteremu bych se rad vyhnul.
Otazka je tedy, jak dosahnout ciste pozadovane konfigurace a soucasne nevkladat shell do konfigurace? Nejjednodusim resenim by zrejme bylo do konfigurace zadat /bin/sh /opt/tomcat/tomcat.sh. Pripada mi, ze sudo prece nemuze byt tak "hloupe", ze funkcionalitu, kterou samo poskytuje ve forme prepinace "i" pozadovat v konfiguraci takto nasilne.
Predem dekuji za pripadna reseni.
« Poslední změna: 26. 06. 2011, 20:01:44 od Petr Krčmář »


aaa

Re: sudo -i bash
« Odpověď #1 kdy: 25. 06. 2011, 19:38:28 »
Jednym riesenim moze byt subor ktory bude obsahovat potrebne premenne prostredia ( /opt/APLIKACIA/environment ) ktory sa nacita cez ten /etc/init.d/ skript (cez operator "." - bodka - bash builtin - man bash). V tomto pripade nie je potrebne sudo -i.

linux newbie

Re: sudo -i bash
« Odpověď #2 kdy: 25. 06. 2011, 20:07:22 »
Dekuji za odpoved. Reseni jsem si vedom, ale neni to uplne ono, protoze pokud vykonam profile, tak zminovane skripty obcas pridavaji i neco do path a neresi, zda tam polozka jiz neni obsazena. To znamena, ze 500x spusteni profile zapise 500x stejnou hodnotu do PATH (Ano, mohl bych je prepsat tak, ze zapisi hodnotu pouze pokud uz tam neni). Plus mi stale pripada cistsi pouzit sudo -i. Autor start skriptu pak nemusi resit, ze vzdy musi spustit profile. O teto moznosti jsem vedel a je mozne, ze se ji nevyhnu, pokud nebudu schopny pouzit sudo -i.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re: sudo -i bash
« Odpověď #3 kdy: 26. 06. 2011, 15:15:46 »
Co zkusit malou úpravu v /etc/sudoers. Něco na tenot způsob :

user =PASSWD: ALL, NOPASSWD: /cesta/k/tomcat.sh

Tento řádek by měl způsobit, že sudo bude požadovat heslo ke všemu, co se přes něj bude spouštět, mimo daného skriptu.

linux newbie

Re: sudo -i bash
« Odpověď #4 kdy: 26. 06. 2011, 15:53:47 »
Bohuzel jsem nepopsal presne konfiguraci. Jiz ted je dotaz az moc dlouhy. Omlouvam se. Konfigurace prikazu sudo sama o sobe neni problem. Mam to zadane obdobne. Pouze jsem vyuzil moznost definice skupiny uzivatelu a skupiny prikazu. Pokus tedy zadam $sudo /etc/init.d/tomcat.sh start, tak nejsem o heslo pozadan a vse se spusti. Pouze nejsou nasatvene promene prostredi - viz env_reset v manualu. Proto volam $sudo -i /etc/init.d/tomcat.sh start, coz provede i spusteni "shellu". Bohuzel v tomto okamziku jsem jiz tazan na heslo. Takze musim uzivateli povolit i spousteni "shellu", pak je jiz vse v poradku. Toto je samozrejme "dira" v bezpecnosti. Moznost by byla spoustet stale pres sudo (bez prepinace i) a povoleny prikaz by musel byt $sudo /bin/sh /etc/init.d/tomcat.sh.
Nicmene me zarazi, ze se sudo chova tak hloupe. Vzdyt je to jeho parametr a mel by tedy byt schopnypro daneho uzivatele zavest shell v ramci daneho prikazu.


linux newbie

Re: sudo -i bash
« Odpověď #5 kdy: 26. 06. 2011, 16:14:52 »
Takze problem se mi nakonec podarilo vyresit. Vsem dekuji za pomoc a rady. Do konfigurace prikazu sudo jsem pridal navic "tag" SETENV. To zapricinilo, ze pro tento konkretni povoleny prikaz se uzivateli nenuluji promenne prostredi na zaklade direktivy env_reset. Nutne je nezapomenout, ze uzivatel musi prikaz sudo spoustet s prepinacem E.