[Debian] www-data + meerdere sites

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb flink gezocht binnen Tweakers+Google, maar kan eigenlijk nergens een duidelijke/heldere uitleg vinden over hoe ik dit het beste aan kan pakken, wat me eigenlijk verbaast want ik zal toch vast niet de enige zijn die tegen dit probleem aanloopt (of misschien zoek ik niet goed..). Laat ik ten eerste even vermelden dat ik geen Linux guru ben, maar er wel flink mee aan het hobbyen ben.

Ik wil graag een webserver omgeving opzetten waarbij er een groep 'developers' is die toegang hebben tot verschillende sites, welke in /var/www/www.site.com/ staan (allemaal met eigen vhost file). De gebruikers loggen in via SFTP

Wat ik tot nu toe gedaan heb:
  • Groep developers aangemaakt
  • Nieuwe gebruiker in groep developers geplaatst
  • Gebruiker www-data in developers groep geplaatst
  • chown -R /var/www/ www-data:developers *
  • chmod -R g+w /var/www
Dit leek mij een aardige setup, maar ik zou graag willen weten of dit voldoet/veilig is.

Wanneer ik nu bijvoorbeeld een file aanmaak via SSH onder een bepaalde gebruiker, wordt deze geowned als user:user. Op zich logisch, echter snap ik niet dat dit bestand aanroepbaar is via een url, www-data heeft er toch verder niks mee te maken? De user staat niet in de groep www-data en de file staat niet in de groep developers, hoe kan Apache er dan toch bij? Kan iemand mij dit uitleggen?

Ook ben ik er dus niet van overtuigt dat het wijs is om de gehele groep schrijfrechten te geven, dat betekent dus dat Apache van alles uit mag spoken.

Hoe kan ik deze setup het beste aan pakken? Hoe hebben jullie het geconfigureerd? Graag hoor ik ervaringen/eventuele tips.

Acties:
  • 0 Henk 'm!

  • DutchNutcase
  • Registratie: Augustus 2005
  • Niet online

DutchNutcase

E = mc^2

Wat jij wil kan heel goed. Het proces van apache draait onder de user www-data. Als je wilt dat je via apache ergens bij kunt moet je zorgen dat de user www-data daar bij kan. ssh werkt anders een ssh shell werkt anders, omdat je daar het proces start als de gebruiker die inlogt.

De beste manier om dit te doen is op filesystem niveau de permissies aan www-data te geven. Dus zowel group als user. En dan laat je de ontwikkelaars via de website werken. En dan laat je de authenticatie afhandelen door apache. Oftewel apache kijkt of een user een bepaalde actie uit mag voeren en alles wordt op filesystem niveau door www-data afgehandeld.

Mocht je willen dat developers er ook via ssh nog bijkunnen, dan is het misschien raadzaam om eens naar linux filesystem ACL's te kijken.

Succes

Luctor et Emergo || specs


Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Verwijderd schreef op zondag 17 juli 2011 @ 21:34:
Ik heb flink gezocht binnen Tweakers+Google, maar kan eigenlijk nergens een duidelijke/heldere uitleg vinden over hoe ik dit het beste aan kan pakken, wat me eigenlijk verbaast want ik zal toch vast niet de enige zijn die tegen dit probleem aanloopt
Nee, je bent niet de enige; vragen van dit soort komen met enige regelmaat terug.

Twee topics waar soortgelijke issues besproken worden zijn Groep rechten geven om te chmod'den en [Xubuntu] www-data EN user volledige rechten over /var/www.
Ik wil graag een webserver omgeving opzetten waarbij er een groep 'developers' is die toegang hebben tot verschillende sites, welke in /var/www/www.site.com/ staan (allemaal met eigen vhost file). De gebruikers loggen in via SFTP
De standaard-constructie is zorgen dat alle files en directories als group "developers" hebben, en te zorgen dat ze allemaal group-writable (en -readable) zijn. Door alle directories setgid (g+s) te maken erven nieuwe files/dirs deze group.

Het grootste probleem is waarschijnlijk de group-schrijfbaarheid. De gebruikelijke manier om ervoor te zorgen dat files onder je webroot altijd group-writable zijn is door te zorgen dat alle gebruikers die daar editen hun umask op 002 hebben staan, maar dit heeft vziw alleen invloed op bestanden die aangemaakt worden via de shell, niet via bv sftp. Een lelijke hack die regelmatig gesuggereerd wordt is een cronjob die regelmatig de permissies goedzet.

Met ACLs is dit netter en vollediger op te lossen, helaas is die oplossing ook iets ingewikkelder (ik ben inmiddels dan ook weer vergeten hoe precies).

Ik zou verder aanraden om /srv/www/site.com als webroot te gebruiken, /srv is de aangewezen locatie voor dit soort dingen (zie de FHS).
Gebruiker www-data in developers groep geplaatst
Dat zou ik in geen geval doen. Apache is geen developer, en hoort niet in die groep thuis. Sowieso hoort Apache geen schrijfrechten te hebben in je web root (zie verderop).
Wanneer ik nu bijvoorbeeld een file aanmaak via SSH onder een bepaalde gebruiker, wordt deze geowned als user:user.
Door de directories setgid (g+s) te maken wordt dat voortaan iig user:developers.
Op zich logisch, echter snap ik niet dat dit bestand aanroepbaar is via een url, www-data heeft er toch verder niks mee te maken?
Als de files en directories world-readable zijn (o+r) dan kan elke gebruiker op je systeem er bij. Ook www-data uiteraard.
Ook ben ik er dus niet van overtuigt dat het wijs is om de gehele groep schrijfrechten te geven, dat betekent dus dat Apache van alles uit mag spoken.
Inderdaad. Het is voor de veiligheid af te raden om bestanden in je webroot schrijfbaar voor Apache te hebben. Anders wordt het voor een aanvaller misschien mogelijk om een eigen script te uploaden als ze een lek in je website vinden. Uitzondering is de upload-directory (en als je paranoide bent, dan disable je scripting in die directory ;) ). Maar de oplossing is niet om de developers group schrijfrechten te ontnemen, maar de www-data user.

Dit is een veelgemaakte fout trouwens; ik zie heel vaak dat files in een web root gewoon www-data:www-data zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank voor de heldere uitleg :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Even een kick, wegens werk etc heb ik nu pas weer tijd gehad om verder te hobbyen met m'n servertje...

Ik heb bovenstaande topic en de gelinkte topics doorgelezen en heb deze oplossing bedacht:
  • Gebruiker 'pistoljames' aangemaakt (verder niet in www-data gezet oid, alleen in m'n sshlogin groep)
  • /var/ww/ gechown'ed als pistoljames:www-data (inclusief subdirectories)
  • chmod -R 2750 binnen /var/www gedaan
Nu kan m'n SFTP gebruiker (pistoljames) bestanden/mappen aanmaken die nog steeds aangeroepen kunnen worden door www-data.

Wanneer ik nu een "ls -all" doe binnen een project map, zie ik dat de files geel gehighlight zijn en deze permissions hebben: "-rwxr-s---". De gele highlighting snap ik niet helemaal, als ik Google kom ik op iets van "pipe" uit, maar dat is me niet duidelijk. Kan iemand dat uitleggen?

Wanneer ik nu een nieuwe file aanmaak via SFTP krijgt ie netjes de pistoljames:www-data permissies, maar de permissies zijn als volgt: rw-r--r--. Ze zijn dus niet uitvoerbaar voor de groep. Kun je dat nog aanpassen, zodat nieuwe files automatisch dezelfde rechten krijgt als de rest, of moet ik dat via een cronjob doen oid?
Is het uberhaubt noodzakelijk dat de gebruiker uit mag voeren, zou 650 niet voldoende moeten zijn?

Verder ben ik benieuwd hoe men tegen deze setup aan kijkt (vooral of het op deze manier veilig is).

[ Voor 3% gewijzigd door Verwijderd op 04-09-2011 18:09 ]


Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Nu online

deadinspace

The what goes where now?

Verwijderd schreef op zondag 04 september 2011 @ 18:07:
heb bovenstaande topic en de gelinkte topics doorgelezen en heb deze oplossing bedacht:
  • Gebruiker 'pistoljames' aangemaakt (verder niet in www-data gezet oid, alleen in m'n sshlogin groep)
  • /var/ww/ gechown'ed als pistoljames:www-data (inclusief subdirectories)
  • chmod -R 2750 binnen /var/www gedaan
Als je slechts met één gebruiker (pistoljames) die bestanden wil kunnen wijzigen, dan heb je geen ingewikkelde constructie met setgid nodig. De standaardpermissies volstaan dan.

Standaard zijn directories die je aanmaakt drwxr-xr-x, en files -rw-r--r--. Dat betekent dus dat jouw user ze kan wijzigen, en alle andere users kunnen ze alleen lezen. www-data valt onder "alle andere users", dus daarmee is het eigenlijk al klaar. setgid voegt in dit geval niks toe.
Wanneer ik nu een "ls -all" doe binnen een project map, zie ik dat de files geel gehighlight zijn en deze permissions hebben: "-rwxr-s---".
Dat komt omdat je met die chmod-opdracht ook de setgid bit hebt geset op de files, niet alleen op de directories. De files horen niet executable te zijn, en geen setgid bit te hebben. De directories horen in dat geval drwxr-sr-x te zijn, en de files -rw-r--r--.
De gele highlighting snap ik niet helemaal, als ik Google kom ik op iets van "pipe" uit, maar dat is me niet duidelijk. Kan iemand dat uitleggen?
Named pipes zijn een speciaal soort files, en hebben hier verder niets mee te maken. Standaard geeft ls pipes weer als donkergeel/bruin op zwart, en setgid files als zwart op donkergeel/bruin, vandaar de verwarring.
Wanneer ik nu een nieuwe file aanmaak via SFTP krijgt ie netjes de pistoljames:www-data permissies, maar de permissies zijn als volgt: rw-r--r--. Ze zijn dus niet uitvoerbaar voor de groep.
Ze zijn voor niemand uitvoerbaar, en dat hoeft ook niet. Alleen "echte programma's" hoeven uitvoerbaar te zijn, PHP scripts hoeven dat niet, en dingen als images al helemaal niet.
Pagina: 1