abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 22:22 | Bezpečnostní upozornění

    Dellu byla odcizena databáze zákazníků (jméno, adresa, seznam zakoupených produktů) [Customer Care, Bleeping Computer].

    Ladislav Hagara | Komentářů: 1
    dnes 21:11 | Zajímavý článek

    V lednu byl otevřen editor kódů Zed od autorů editoru Atom a Tree-sitter. Tenkrát běžel pouze na macOS. Byl napevno svázán s Metalem. Situace se ale postupně mění. V aktuálním příspěvku Kdy Zed na Linuxu? na blogu Zedu vývojáři popisují aktuální stav. Blíží se alfa verze.

    Ladislav Hagara | Komentářů: 2
    dnes 14:33 | Pozvánky

    O víkendu 11. a 12. května lze navštívit Maker Faire Prague, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    včera 21:55 | Nová verze

    Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.

    Ladislav Hagara | Komentářů: 17
    včera 20:22 | IT novinky

    Představena byla služba Raspberry Pi Connect usnadňující vzdálený grafický přístup k vašim Raspberry Pi z webového prohlížeče. Odkudkoli. Zdarma. Zatím v beta verzi. Detaily v dokumentaci.

    Ladislav Hagara | Komentářů: 4
    včera 12:55 | Nová verze

    Byla vydána verze R14.1.2 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 0
    7.5. 18:55 | IT novinky

    Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).

    Ladislav Hagara | Komentářů: 10
    7.5. 18:33 | IT novinky

    Apple představil (keynote) iPad Pro s čipem Apple M4, předělaný iPad Air ve dvou velikostech a nový Apple Pencil Pro.

    Ladislav Hagara | Komentářů: 4
    7.5. 17:11 | Nová verze

    Richard Biener oznámil vydání verze 14.1 (14.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 14. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.

    Ladislav Hagara | Komentářů: 0
    7.5. 13:44 | Komunita

    Free Software Foundation zveřejnila ocenění Free Software Awards za rok 2023. Vybráni byli Bruno Haible za dlouhodobé příspěvky a správu knihovny Gnulib, nováček Nick Logozzo za front-end Parabolic pro yt-dlp a tým Mission logiciels libres francouzského státu za nasazování svobodného softwaru do praxe.

    Fluttershy, yay! | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (63%)
     (8%)
     (13%)
     (16%)
    Celkem 146 hlasů
     Komentářů: 10, poslední včera 17:35
    Rozcestník

    Dotaz: Apache + Perl + suexec/cgiwrap/whatever

    Jakub Lucký avatar 6.2.2010 00:32 Jakub Lucký | skóre: 40 | Praha
    Apache + Perl + suexec/cgiwrap/whatever
    Přečteno: 1031×
    Ahoj

    řeším zásadní problém, snažím se rozjet Apache s Perlem, ale zásadní podmínkou je fakt, že se bude používat oddělení práv, tedy že si každý uživatel bude pěkně spouštět své skripty se svými právy buď na základě Virtualhostů nebo za základě vlastnictví skriptu...

    Testoval jsem zatím speedyCGI, které ale odmítá strávit suexec a fcgid, které zase umře s kryptickou chybou:
    [warn] (104)Connection reset by peer: mod_fcgid: read data from fastcgi server error.
    [error] [client 78.102.107.216] Premature end of script headers: index.pl
    [notice] mod_fcgid: process /home/www/perl/index.pl(10633) exit(communication error), terminated by calling exit(), return code: 255
    
    Jakákoliv rada jak dosáhnout kýženého výsledku je velmi vítaná, děkuji za ně..
    If you understand, things are just as they are; if you do not understand, things are just as they are.

    Řešení dotazu:


    Odpovědi

    Jakub Lucký avatar 6.2.2010 22:44 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    nikdo neví?
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 09:00 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Kryptická je nejen chyba ale i Váš dotaz. Ptáte se na to, jak sprovoznit suexec a zároveň speedycgi/mod_perl/atd? Odpověď je: nelze.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Jakub Lucký avatar 7.2.2010 10:49 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Tak to se omlouvám za špatně formulovanou otázku...

    Potřebuji do Apache nacpat Perl, který se bude spouštět s právy uživatele (buď definovaného ve Virtualhostu, nebo podle owner-group jako v suPHP), technologie, které jsem v dotazu vyjmenoval jsou v podstatě ty, které jsem se pokusil donutit fungovat a hledám jakoukoliv funkční variantu.

    mod_perl to evidentně neumí, v každém FAQ to důrazně píšou

    u speedycgi jsem takovou zmínku nenašel, ale včera jsem narazil na velmi neoficiální projekt speedysu, který by to měl nějak implementovat, ale zatím to není v žádné distribuci a implementace bych se trochu bál..

    fcgid umírá na onom kryptickém erroru...

    Takže můj dotaz je nakonec tak trochu dvojdotaz: Jak zprovoznit Fcgid se suexec nebo existuje nějaké jiné řešení?
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 13:44 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    A co normální CGI? Na tom suexec funguje.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Jakub Lucký avatar 7.2.2010 21:45 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    klasické CGI mi funguje, ale nesuexecuje Definice virtualhost
    <VirtualHost *:80>
         ServerName perl.domain.tld
         DocumentRoot /home/www/domain.tld/perl/
         SuexecUserGroup domain domain
         AddHandler cgi-script .pl
         SetHandler cgi-script
         Options +ExecCGI
    </VirtualHost>
    
    Ale běží to pod UID 33 (aspoň podle perlovský $< $>)
    #!/usr/bin/perl -w
    print "Real UID".$<."\n";
    print "Effective UID".$>."\n";
    print "Real GID".$(."\n";
    print "Effective GID".$)."\n";
    
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 22:01 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    A co je 33? Pokud to je něco jako "apache", tak by web server měl běžet pod rootem aby byl schopen setuidovat.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Jakub Lucký avatar 7.2.2010 22:07 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    33 je skutečně Apache... Ale třeba takové suphp umí tuto funkcionalitu i přes Apache běžící jako UID 33, takže to by neměl být ten problém (předpokládám)...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 22:10 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Ach jo.

    [suphp] [search]
    suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) ...
    Tak to máte prašť jak uhoď. Taky existuje něco jako suidperl. (Hledejte.) Bejt váma tak na ty virtualhosty spustím na každý zvlášť apache pod svým uživatelem.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Jakub Lucký avatar 7.2.2010 22:17 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    To by právě měl dělat ten suexec... pokud umí stejnou funkcionalitu pro fastcgi, kde se spouští php-cgi, tak proč by totéž nedělal pro perl, který je zvyklý pracovat jako CGI?
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 22:16 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Zapíše suexec něco do logu /var/log/apache2/suexec.log?
    Jakub Lucký avatar 7.2.2010 22:19 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    právě že nic...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 22:30 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Tak to je zvláštní. Problémy u suexecu jsou celkem často - obvykle je napevno zkompilováno omezení na minimální UID, document root musí začínat na /var/www (nevadí ale třeba, když je to symlink jinam)... ale vždy to zapíše chybu do logu a klientovi vrátí Internal server error.

    Takhle to vypadá, že se suexec vůbec nektivuje. Pamatuji si, že ve starších verzích se musel ručně nastavit SUID bit na binárce suexecu, nebo ji dokonce někam přesunout, jinak to nefungovalo.

    Nic ohledně suexec není ani v Apache error logu? Pokud je v konfiguraci ta volba SuexecUserGroup a nehlásí to chybu, je suexec modul určitě načtený, ale nefunguje.
    Jakub Lucký avatar 7.2.2010 22:40 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    whocares:~# apt-get install apache2-suexec-custom 
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    apache2-suexec-custom is already the newest version.
    
    whocares:~# a2enmod suexec
    Module suexec already enabled
    
    whocares:~# /etc/init.d/apache2 restart
    .
    
    whocares:~# ls -l /usr/lib/apache2/suexec 
    -rwsr-xr-- 1 root www-data 15192 2009-11-14 22:09 /usr/lib/apache2/suexec
    
    Já právě už fakt nevím... Možná otázka, co by mělo být v /etc/apache2/suexec/*
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 22:55 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Aha, zkusil bych začít s balíkem apache2-suexec. Ta -custom verze se nejspíš musí nějak nastavit, a nějaká dokumentace k tomu zrovna moc není...
    Jakub Lucký avatar 7.2.2010 23:01 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    No, to bude asi ten problém... Asi se pustím do perverzního inženýrství, protože apache2-suexec není úplně lákavý, vzhledem k zakompilovanému nastavení

    Provides the standard suexec helper program for mod_suexec. This version is compiled with document root /var/www and userdir suffix public_html. If you need different settings, use the package apache2-suexec-custom.
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 23:22 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    To výchozí nastavení ne vždy vyhovuje, ale dá se s tím žít. Nevím pro jaké prostředí to potřebujete, ale pro běžný hosting (tj. hromada <VirtualHost> podle domén) to znamená, že jakýkoliv <DocumentRoot> musí začínat na /var/www - dá se to obejít tak, že /var/www je symlink kamkoliv jinam.

    Pokud jde o použití <Userdir> (tj. weby systémových uživatelů přistupné obvykle jako ~/login) tak tam je pevné omezení, že veřejný adresář bude ~/public_html
    Jakub Lucký avatar 7.2.2010 23:29 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    To, co já bych potřeboval, je spouštět všechny skripty v /home/www/$USERNAME/domain.tld/anything/ pod uživatelem $USERNAME, přičemž domén může být v této složce víc... A to myslím nepůjde...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    Řešení 1× (VSi)
    7.2.2010 23:46 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Myslím, že to nebude takový problém:

    - symlink /var/www > /home/www

    - v konfiguraci apache (/etc/apache2/sites-enabled/...) bude pro každou domain.tld neco jako:
    <VirtualHost IP_ADDR:80>
        ServerName domain.tld
        ServerAlias *.domain.tld
        ServerAlias jinadomena.tld
        DocumentRoot /var/www/$USERNAME/domain.tld
        <Directory /var/www/$USERNAME/domain.tld>
            Options Indexes FollowSymLinks MultiViews ...
            AllowOverride ...
            Order allow,deny
            allow from all
        </Directory>
        SuexecUserGroup $USERNAME skupina
    ...
    
    - alternativně, pokud nebudete potřebovat aby na tu jednu složku směřovalo víc domén (nevyužijete ServerAlias jinadomena.tld) to lze zjednodušit tak, že bude DocumentRoot /var/www/$USERNAME a do jednotlivých složek se požadavky zařadí pomocí mod_rewrite pravidel

    - pokud jde o nějaký "bežný" hosting, tak si připravte i řešení pro adresáře na subdomain.domain.tld, nejflexibilnější řešení je opět pomocí mod_rewrite
    7.2.2010 23:49 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Místo toho symlinku jde buď namountovat data přímo do /var/www nebo použít ten -custom balíček, kde se nechá nastavit místo /var/www něco jiného
    Quando omni flunkus moritati
    Jakub Lucký avatar 8.2.2010 00:00 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    problém je v tom, že pro jednoho uživatele je možné definovat pouze jeden document root...

    No, tak zatím, k mému velkému zklamání, Perl asi nebude, až se odhodlám k přechodu na apache2-mpm-itk, tak možná pak...

    Rozhřešení pro náhodné kolemjdoucí:

    Perl se suexec obecně jde vyřešit, příjemné naznačení je v příspěvku na který reaguji, potíží mohou být pokusy používat jednoho uživatele na více domén
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    Jakub Lucký avatar 8.2.2010 00:05 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Každopádně děkuji diskutujícím za rady
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    8.2.2010 00:06 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Nevím, kde vidíte ten problém. Ten document root u suexecu se kontroluje jako PREFIX Apache DocumetRoot - zkuste si to. Klidně lze mít default suexec nastavení (docroot /var/www) a Apache VirtualHost má nastaven DocumentRoot /var/www/co/ko/liv

    Nastavení, které jsem naznačil používám na produkčním serveru bez problémů. Myslím, že přesně tak, jak potřebujete: apache+suexec+(php/perl/...), systémoví uživatelé user1 ... userN, domény domain1.tld ... domainM.tld - každé doméně je přiřazen 1 z uživatelů, jeden uživatel může být přiřazen klidně k více doménám.
    8.2.2010 00:10 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Ještě doplním, že toto řešení používám na Debianu Lenny s balíčkem apache2-suexec, tj. bez potřeby jakékoliv konfigurace v /etc/apache2/suexec/...

    Více domén (VirtualHost) pod jedním uživatelem rozhodně není problém (vyzkoušeno :-)).
    Jakub Lucký avatar 8.2.2010 00:11 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Aha... už mi to dochází, to by možná šlo... Jdu to otestovat
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    Jakub Lucký avatar 8.2.2010 01:40 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Tak popsaný postup funguje... Děkuji... Jinak slibuji lehký benchmark jak Perlu, tak PHP s jednotlivými suid metodami...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    Jakub Lucký avatar 7.2.2010 23:26 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    suexec byl evidentně naprogramován s jediným cílem... přivést člověka, který se to pokusí zprovoznit na trošku exotické konfiguraci k totálnímu šílenství (nebo aspoň převést na víru, modlení, nebo programování v C)

    Z oficiální dokumentace
    For security and efficiency reasons, all suEXEC requests must remain within either a top-level document root for virtual host requests, or one top-level personal document root for userdir requests. For example, if you have four VirtualHosts configured, you would need to structure all of your VHosts' document roots off of one main Apache document hierarchy to take advantage of suEXEC for VirtualHosts. (Example forthcoming.)
    Z manpage
    CONFIGURATION If suexec is called by a user with name ’username’, it will look into /etc/apache2/suexec/username for configuration. If the file does not exist, suexec will abort. By creating several config files, you can allow several different apache run users to use suexec.

    The first line in the file is used as the document root (/var/www in the standard suexec) and the second line in the file is used as the suffix that is appended to users’ home directories (public_html in standard suexec).

    If any of the lines is commented out (with #), suexec will refuse the corresponding type of request. It is recommended to comment out the userdir suffix if you don’t need it.
    Jdu se ještě podívat do některých věcí, jakým způsobem se to řeší u toho PHP/fastcgi, protože tohle jinak asi nepůjde... Potřebuju víc domén/složek s funkčním suexec, a to asi neprojde...
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 23:27 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Ta -custom verze se nejspíš musí nějak nastavit, a nějaká dokumentace k tomu zrovna moc není...
    Dokumentace je ve /etc/apache2/suexec/www-data, když se to nainstaluje.
    /var/www
    public_html/cgi-bin
    # The first two lines contain the suexec document root and the suexec userdir
    # suffix. Both features can be disabled separately by prepending a # character.
    # This config file is only used by the apache2-suexec-custom package.
    Umožňuje to změnit adresáře, které jsou jinak nastavené natvrdo
    Quando omni flunkus moritati
    7.2.2010 12:44 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Ptáte se na to, jak sprovoznit suexec a zároveň speedycgi/mod_perl/atd? Odpověď je: nelze.
    Můžu se zeptat, čím to je? php-fcgid-suexec funguje v pohodě - v Debianu je to i s Googlením práce na hodinku, co je u perlu špatně?
    Quando omni flunkus moritati
    7.2.2010 13:51 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    You can't suid a part of a process. mod_perl lives inside the Apache process, so its UID and GID are the same as those of the Apache process.
    To není vlastnost perlu, ale správy procesů a práv v UNIXu.
    In Ada the typical infinite loop would normally be terminated by detonation.
    7.2.2010 19:19 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Jenže já nemluvím o mod_perl. U výše uvedené kombinace se interpretr PHP spouští jako samostatný proces (pod zvoleným uživatelem) a o předání výsledků zpět do Apache se stará mod_fcgid; zajímalo mě, proč by něco podobného nemělo jít u perlu.

    Quando omni flunkus moritati
    7.2.2010 21:29 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Ten mod_fcgid neznám.

    Čím se to liší od normálního CGI? Pustit něco jako samostatný proces je CGI. Pustit něco pod uživatelem umí suexec. Jestli je na začátku spouštěného #!/usr/bin/php nebo #!/usr/bin/perl nebo dokonce \x7fELF je už pak dost jedno.
    In Ada the typical infinite loop would normally be terminated by detonation.
    7.2.2010 21:43 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Výhoda mod_fcgid oproti prostému CGI je, že pro každý HTTP požadavek se nespouští nový proces, což je pomalé (inicializace Perlu, "kompilace" apod.). Třeba v případě PHP je výkonnostní rozdíl CGI/FastCGI velmi výrazný - u složitějších webů je znát rozdíl i z uživatelského pohledu při načítání stránky v prohlížeči.

    FastCGI tedy 1 spuštěný proces využije pro více příchozích požadavků, což ovšem musí ten proces (tj. Perl / PHP / ...) nějakým způsobem podporovat. A tato podpora zřejmě není v Perlu "out-of-the-box" a pak vám mod_fcgid vypisuje ty chyby. Perl pravděpodobně je možné provozovat pod mod_fcgid, ale bude to vyžadovat trochu upravit ty skripty.

    Pokud příliš nejde o výkonnost, použil bych prostě obyčejné CGI + Suexec, což by mělo fungovat zcela bez problémů. Další možností by mohl být mod_perl v kompinaci a apache-mpm-itk, který umožňuje, aby Apache procesy pro jednotlivé virtual servery běžely pod definovaným uživatelem.
    Jakub Lucký avatar 7.2.2010 22:00 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Hm... O apache-mpm-itk jsem také uvažoval, ale má celkem rozporuplné hodnocení výkonnosti (někde výrazně vyšší, jinde naopak...)

    O výkonnost jde, je to přeci jen produkční server, úprava skriptů asi nebude problém (zatím nejsou žádné napsané...)
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 22:22 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Mpm-itk vyzkoušený nemám, potřeboval jsem vyřešit jen běh PHP, a tam je FastCGI asi nejlepší možnost a informace o mpm-itk mi také přišly všelijaké. Jen mi vadí, že SuexecUserGroup jde nastavovat jen ve <VirtualHost> sekci, a ne třeba v <Directory>, jako to jde u suPHP. Existuje na to sice jednoduchý patch, ale používaní vlastní verze komplikuje správu systému.

    Pokud jde o Perl a FastCGI, podívejte se a zkuste třeba modul CGI::Fast.
    Jakub Lucký avatar 7.2.2010 23:48 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Pro zajímavost (především pro náhodného googlícího čtenáře) přináším benchmark, který jsem našel při hledání
    To benchmark mpm-peruser, I used Apache's ab benchmark to load a simple phpinfo() page 1,000 times. I ran the benchmark five times, and averaged the results.

    mpm-prefork: average of 6.51 second mpm-itk: average of 37.01 seconds mpm-peruser: average of 6.95 seconds suphp: average of 164.677 seconds suexec: average of 127.219 seconds suexec + bash script: average of 134.836 seconds mod_php: average of 3.753 seconds
    zdroj
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 23:58 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Škoda, že tam není srovnání s mod_fcgid. Záleží na typu testu (1000 × phpinfo není podle mě zrovna vypovídající vzhledem k reálné zátěži), ale php+fastcgi+suexec vychází srovnatelně s mod_php, nebo i lépe.

    Nelze srovnávat mod_php s CGI (ať už se suexec nebo se suphp). Tam je jasné, že CGI bude řádově pomalejší.
    Jakub Lucký avatar 8.2.2010 14:22 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Přílohy:
    Tak jsem dnes testoval, jak jsou na tom jednotlivé PHP suid aplikace...

    Testovací skript: Zend bench

    Použitý stroj: 2xIntel(R) Xeon(TM) CPU 2.80GHz (dvě jádra), 2GB RAM

    Použitý testovací command: ab -n 100 -c 5 http://www.domain.tld/bench.php

    Stručné výsledky:

    mod_suphp:

    Requests per second: 0.16 [#/sec] (mean)

    Time per request: 30944.930 [ms] (mean)

    Time per request: 6188.986 [ms] (mean, across all concurrent requests)

    php-cgi přes fcgid (bash skript wrapper) + suexec

    Requests per second: 0.16 [#/sec] (mean)

    Time per request: 30634.256 [ms] (mean)

    Time per request: 6126.851 [ms] (mean, across all concurrent requests)

    mod_php s apache2-mpm-itk

    Requests per second: 0.14 [#/sec] (mean)

    Time per request: 34676.048 [ms] (mean)

    Time per request: 6935.210 [ms] (mean, across all concurrent requests)

    A pro zajímavost klasický mod_php bez zabezpečení

    Requests per second: 111.82 [#/sec] (mean)

    Time per request: 44.713 [ms] (mean)

    Time per request: 8.943 [ms] (mean, across all concurrent requests)

    ########################

    Výsledky jsou poměrně tristní, je vidět, že za bezpečnost se platí hodně vysoká cena... V přílohách jsou kompletní výstupy z AB
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    8.2.2010 16:18 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Nechci se pouštět do nějkých debat, ale měl bych pár (snad užitečných) poznámek:

    - Zend bench bych rozhodně nepovažoval za nástroj vhodný k tomuto druhu testování. Co jsem si všimnul, tak 1 spuštění bench.php běží velmi dlouho (jednotky sekund), rozhodně řádově délé než skripty, které vám budou generovat reálnou zátěž. V praxi skripty běží tak 100 - 500 ms, někdy i déle, ale pak už to uživatel "cítí", že je to pomalé. Využití Zend bench bych viděl spíš pro srovnání výkonu různých verzí PHP.

    - Vzhledem k předchozímu bodu se mi nezdá, že by mod_php mohl přinést takový výkonostní náskok (o tři řády!) - viz moje testy níže. Rozdíl mezi mod_php/CGI/... se z principu nejvíce projeví na hromadě krátkých požadavků, kdy hraje roli režije spuštění nového procesu.

    - V reálné zátěži na serveru s cca 30 požadavky/s na PHP skripty je přínos FastCGI oproti normálnímu CGI (popř. se suPHP) velmi znát. Rozdíl FastCGI vs. mod_php je neznatelný. Mpm-itk jsem netestoval, FastCGI+Suexec pro PHP 100% vyhovuje.

    * Moje testy s bench.php *
    ab -n 100 -c 5 http://ip/bench.php
    
    == FASTCGI + Suexec ==
    
    Requests per second:    0.21 [#/sec] (mean)
    Time per request:       23316.264 [ms] (mean)
    Time per request:       4663.253 [ms] (mean, across all concurrent requests)
    
    == MOD_PHP ==
    
    Requests per second:    0.22 [#/sec] (mean)
    Time per request:       23132.956 [ms] (mean)
    Time per request:       4626.591 [ms] (mean, across all concurrent requests)
    
    Jak je vidět, je to v mém případě úplně stejné. Prosté CGI jsem netestoval, očekával bych , že to bude jen o málo horší.

    * Moje testy s reálnou aplikací *

    Aplikace: titulní stránka portálu v PHP + PostgreSQL, provoz aplikace na běžném sdíleném hostingu byl nesnesitelně pomalý
    ab -n 300 -c 10 http://ip/
    
    == PLAIN CGI + Suexec ==
    
    Requests per second:    6.40 [#/sec] (mean)
    Time per request:       1562.403 [ms] (mean)
    Time per request:       156.240 [ms] (mean, across all concurrent requests)
    
    == FASTCGI + Suexec ==
    
    Requests per second:    13.33 [#/sec] (mean)
    Time per request:       749.939 [ms] (mean)
    Time per request:       74.994 [ms] (mean, across all concurrent requests)
    
    = MOD_PHP ==
    
    Requests per second:    13.06 [#/sec] (mean)
    Time per request:       765.649 [ms] (mean)
    Time per request:       76.565 [ms] (mean, across all concurrent requests)
    
    U této zátěže je vidět, že prosté CGI má výkonnostní propad cca 50% oproti FastCGI či mod_php, které vycházení stejně.

    (Testoval jsem na: Debian Lenny, XenServer PV, 2 jádra z Xeonu 2.4GHz, 512MB RAM - během testu trvale volných 300MB)
    Jakub Lucký avatar 8.2.2010 16:24 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Souhlasím, že Zend benchmark není to nejlepší na testování, ale přišlo mi to šikovnější než obvykle používané phpinfo()

    u toho fastcgi+suexec je zvláštní, že výsledky jsou tak rozdílné... Používáte bash wrapper?
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    8.2.2010 17:08 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Bash wrapper používám, ono to ani jinak asi nejde - suexec požaduje, aby spouštěný soubor měl UID/GID totožné s tím, pod kterým poběží. Tj. nejde spouštět přímo /usr/bin/php-cgi. Stejně v tom bash skriptu jde nastavit plno užitečných věcí - cestu k php.ini, který se má použít; ulimit; nice; proměnné jako PHP_FCGI_CHILDREN - i když se spíš doporučuje nechat správu procesů plně na mod_fcgid a nenechávat PHP spouštět další podprocesy
    u toho fastcgi+suexec je zvláštní, že výsledky jsou tak rozdílné...
    Teď jsem se nějak ztratil. Proti čemu jsou rozdílné?

    Jakub Lucký avatar 8.2.2010 17:34 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    U vás není u Zend Bench skoro žádný rozdíl mezi fcgid a mod_php, u mě je ohromný... A nechápu proč (a rád bych to vyřešil, protože pak by mi to umožnilo používat suexec všude)
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    8.2.2010 18:31 VSi | skóre: 28
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Skoro to vypadá, jako by u vás ten Zend Bench pod mod_php skončil okamžitě s nějakou chybou - tj. provede se hodně rychle. Co se stane, když si bench.php otevřete normálně v prohlížeči a server je nastaven na mod_php? U mě načtení trvá několik vteřin a zatížení CPU je 100%.

    Jestliže jsou v tom bench.php nějaké na CPU náročné výpočty, které trvají normálně několik vteřin, a vy máte u mod_php:
    Time per request: 8.943 [ms]
    tak je to nějaké divné.
    Jakub Lucký avatar 8.2.2010 21:44 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Problém tam asi byl, dneska jsem s tím serverem trochu šachoval... Tady jsou skutečné výsledky s mod_php

    Requests per second: 0.15 [#/sec] (mean)

    Time per request: 34107.600 [ms] (mean)

    Time per request: 6821.520 [ms] (mean, across all concurrent requests)
    If you understand, things are just as they are; if you do not understand, things are just as they are.
    7.2.2010 22:02 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Nebo mod_selinux. Ten pro každý request pustí vlákno, kterému omezí práva na to co chcete. Je to rychlé a bezpečné zároveň.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Řešení 1× (VSi)
    Max avatar 8.2.2010 00:17 Max | skóre: 72 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    Osobně mám rozjeto "fastcgi+suexec+php". Vše šlape tak jak má a ta koncepce řešení by měla být podle mne univerzáslní a fungovat i na perl. V týdnu to otestuji ve virtuální mašině a kdyžtak nasadím na ostrý provoz. Osobně bych v tom ale problém neviděl.
    Jediným problémem, jak už bylo řečeno, je suexec, který jede natvrdo z /var/www :-/. Rekompilace apache a úprava zdrojáků je jednoduchá věc, ale mnohem jednoduší je bind adresářů a člověk se pak nemusí starat o aktualizace. Musí se pak sice překopat celé nastavení apache, ale co se dá dělat, nu.
    Zdar Max
    Měl jsem sen ... :(
    Jakub Lucký avatar 8.2.2010 00:42 Jakub Lucký | skóre: 40 | Praha
    Rozbalit Rozbalit vše Re: Apache + Perl + suexec/cgiwrap/whatever
    No, on je trošku problém některé věci našroubovat do stávajícího konceptu... Ale podle toho benchmarku, co jsem uvedl, se vyplatí holt ten mpm-itk, díky kterému se dá navíc suidově udělat cokoliv (mod_perl, mod_python a jiné opičárny)...
    If you understand, things are just as they are; if you do not understand, things are just as they are.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.