apache2 extra symlinks kérdés

apache2 extra symlinks kérdés

Hozzászólások

Sziasztok!

az az érdekes helyzet állt elő, hogy az adott virtual host-ra engedélyeznem kell a followsymlinks -et, viszont azt be akarom korlátozni, hogy a symlinkeket hova vagy meddig kövesse, mivel azok dinamikusan vannak létrehozva és nem akarom, hogy egy véletlen hibát kihasználva valaki docroot-on kívűl hivatkozzon akármire is.

tehát kérdés az, hogy megvalósítható e a symlink követés de csak docroot alatt?

előre is köszi

[code:1:5a0c351760]SymlinksIfOwnerMatch[/code:1:5a0c351760] direktíva amit te akarsz. Azt csinálja ami a neve. Tehát ha a mutatott cucc nem az apacs juzeréé, akkor nem megyen bele. Az ha jól értem akkor tok jo neked.

/FIXME

[quote:1316d1f590="tata2k"][code:1:1316d1f590]SymlinksIfOwnerMatch[/code:1:1316d1f590] direktíva amit te akarsz. Azt csinálja ami a neve. Tehát ha a mutatott cucc nem az apacs juzeréé, akkor nem megyen bele. Az ha jól értem akkor tok jo neked.

/FIXME

igen, én is gondoltam rá, de valami gánya van...
szóval probáltam én is SymlinksIfOwnerMatch -ot, de aztán betettem docroot alá egy symlinket a /etc/passwd -re (ami ugyebár root:root) és simán bejön :(

na elkezdtem áskálódni és azért van érdekesség... pl. apache2 alapban úgy van konfigolva, hogy user és group is www-data... namármos
[code:1:1316d1f590]ps aux|grep apache[/code:1:1316d1f590]
széped kidobja a 6 db futó példányt, DE az első root a többi www-data...

talán ezért szolgálja ki symlinket a passwd file-ra? de miért root az első példány?

amúgy a /etc/apache2/sites-available/default file tartalma:
[code:1:1316d1f590]
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost

DocumentRoot /var/www/html
<Directory />
Options Indexes SymlinksIfOwnerMatch
AllowOverride all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined
ServerSignature On

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>
[/code:1:1316d1f590]

Azért root az első mert az a master, az spawnolja a többieket amik születnek, kiszolgálnak, elöregednek és meghalnak jó esetben(ha belegondolsz pont kijon: egy master + 5 worker = 6). A megnevezések nem biztos yok mer ahany mpm annyi elnevezes.
A linkes dolgot nem teljesen értem mér van, de mindjárt széthekkelek egy apacst és jól megnézem mi lehet a baja. :twisted:

UPDATE:
A root folyamathoz még annyi hogy azert KELL rootkent futnia, mert ugye a 80-as privileged port, és másképp nem tudna újat nyitni(amikor child kihal és újat csinál helyette, vagy terhelés miatt újat indít). A root-os folyamat egyébként nem szolgál ki kéréseket, csak a kölykei, tehát az nem lehet gond.

Megnéztem. Azt hiszem itt egy kis félreértés van. A SymLinksIfOwnerMatch akkor engedi követni a linket, ha a link és a mutatott file tulajdonosa megegyezik. Elvileg ha a webszerver docrootjában vagy akkor minden file a www-datáé. Ha dinamikusan hozod létre a linket, akkor vagy a webszerver userével(vagy más nem root) kell futnia a létrehozó folyamatnak, vagy chown-olnod kell, különben nem fog mukodni a korlatozas. CGI-nek pl. szokása root-ként futni ha nincs explicite másnak beállítva. Mindenesetre ha passwd-hez hozzáfér, akkor az a symlink a rooté volt.

akkor elvileg ha pl php-ből van csinálva ln -s és az www-data akkor stimmelni fog?

A symlink nem a cel tulajdonsagait veszi at, hanem a tulajdonosa a letrehozo juzer lesz, a modmaszkja meg 777("atlatszo", tehat a link osszeeselve az eredeti file maszkjaval az eredeti bitmaszkot adja vissza). Azt viszont megmiondhatod, hogy a symlinknek ki a tulajdonosa.

Amit Te modasz az a chmod, az tenyleg a célfilet valtoztatja meg.

A chown alapbeallitason(tehat parameterek nelkul) nem dereferencel, hanem csak a linket magat allitja, csak explicite a --dereference-szel tud hozzáférni a hivatkozott állományhoz, de akor meg csak ahhoz. Könyvtárlinkekre ugyanígy, csak más az átlépés paraméter.

jah, volt egy kis kavar, közben rájöttem...
amúgy chown symlinkfile nekem a célfile-t változtatta meg...

mindenesetre már stimmel a dolog, ha php-ben hozom létre symlink-et, akkor www-data lesz az owner és máris kóser a védelem...

amúgy ha már itt tartunk felvázolnám mihez kell, hátha van még ötlet vagy kijavítanivaló:

szóval hozzáférésvédett downloads könyvtár...
downloads -ban minden htaccess-el le van tiltva, fileok véletlenszerű névvel és kiterjesztéssel vannak benne, adatbázisban tárolva mi micsoda valójában.

user belép, akkor jogosult letölteni. ha valamelyik file letöltésre kattint, akkor egy átmeneti symlink kerül létrehozva a downloads könyvtárba normál filenévvel+egyedi azonosítószám(pl sessionból kódolva) a célfile-ra mutatva. htaccess dinamikusan módosítva, hogy ez a symlink elérhető legyen és hogy milyen ip-ről, redirect a letöltési linkre...

elején még php-n keresztül akartam áttolni a file-t, de azért nem jó, mert nagy fileok (>1G) esetén php futási idő probléma lenne...

szerintetek milyen az elképzelés?