directory permissions
Als ik op mijn server een directory aanmaak dan staan de rechten standaard op 0755.
Nu vroeg ik me af... als ik in mijn FTP-programma kijk, dan zie ik dat er 3 groepen zijn waarvoor je de rechten kunt inschakelen, namelijk:
1 Eigenaar
2 Groep
3 Anderen
Ik neem aan dat de "Eigenaar" hetzelfde is als de user die het bestand heeft aangemaakt. Maar nu ben ik even kwijt wat (of beter gezegd wie) dan de "Groep" en de "Anderen" zijn. En als ik een website maak, moeten die "Groep" en "Anderen" dan ook bestanden kunnen lezen? Wat zou er gebeuren als ik de rechten voor de "Groep" en de "Anderen" zou uitschakelen?
Gewijzigd op 07/02/2014 03:29:14 door Ozzie PHP
Het commando ls -al geeft aan welke gebruikers eigendom zijn van de bestanden; een gebruiker die een bestand maakt is de eigenaar;
Per bestand bepaal je dus wat elke iedereen mag die (eigenaar/groep/rest).
Dan heb je nog drie soorten rechten die je aan een bestand (voor eigenaar/groep/rest) kan toekennen.
Deze rechten worden binair als volgt toegekend:
Lezen: 100 = 4
Schrijven: 010 = 2
Uitvoeren: 001 = 1
7 = 111 = 4+2+1 (lezen/schrijven/uitvoeren)
6 = 110 = 4+2 (lezen/schrijven)
5 = 101 = 4+1 (lezen/uitvoeren)
4 = 100 = 4 (lezen)
3 = 011 = 2+1 (schrijven/uitvoeren)
2 = 010 = 2 (schrijven)
1 = 001 = 1 (uitvoeren)
Indien een bestand dus volgende rechten heeft 755 mag de eigenaar lezen/schrijven/uitvoeren en de groep en de rest lezen/uitvoeren.
Dus bij 700 kun je alleen als enige bestanden lezen/uitvoeren/schrijven en andere gebruikers in je groep en de rest niet.
Stel je upload als gebruiker ftp een bestand en gebruiker apache wil het benaderen (om te tonen op je website) dan is dit dus niet mogelijk
Gewijzigd op 07/02/2014 12:22:53 door Erwin van Hoof
Als ik je goed begrijp is "Apache" dus ook een gebruiker? Dus als ik een directory op 0700 zou zetten dan kan Apache er niet bij en werkt de website niet. Is het dan gewoon het handigst om altijd alle directories op 755 te zetten? (Of zijn er ook situaties waarin je dit juist niet zou willen?)
Ozzie PHP op 07/02/2014 14:29:30:
Als ik je goed begrijp is "Apache" dus ook een gebruiker? Dus als ik een directory op 0700 zou zetten dan kan Apache er niet bij en werkt de website niet. Is het dan gewoon het handigst om altijd alle directories op 755 te zetten? (Of zijn er ook situaties waarin je dit juist niet zou willen?)
Elk programma wordt gestart door een gebruiker. Apache is een daemon/service en wordt over het algemeen tijdens het opstarten van de server gestart. Dat gebeurt dan door user root.
Uit beveiligingsoogpunt is het niet verstandig om programma's onder user root te draaien als dat niet strikt noodzakelijk is. Bij Apache zie je daarom dat er een hoofdproces draait als gebruiker root, en dat alle worker-processen onder een 'normaal' account draaien (als je root bent, kun je namelijk processen opstarten onder een ander userid).
Vroeger draaiden de workers meestal onder userid 'nobody', wat in Unix een standaard account is met weinig rechten. De grap is echter dat wanneer alle systeemprocessen onder user nobody draaien, dat juist weer slecht is voor de beveiliging. Daarom wordt tegenwoordig voor vrijwel elk proces een eigen userid aangemaakt (soms zelfs meer); voor Apache is dat meestal -je raadt het al- 'apache', maar httpd of wwwrun worden ook wel gebruikt.
Ook in het kader van beveiliging: vroeger werd elke nieuwe user standaard lid gemaakt van de groep 'users'. Dit was ook de groep waarmee je home directory was beveiligd. Tegenwoordig is het gebruikelijk om voor elke gebruiker een groep aan te maken met dezelfde naam als het userid (dus user ozzie krijgt ook een groep ozzie). Hierdoor wordt het gemakkelijker om toegang tot je home directory te regelen.
Of het verstandig is de rechten van je homedir op 0755 te zetten? Hangt denk ik heel erg af van de andere gebruikers op je systeem. Als je zelf de enige gebruiker bent, maakt het niet uit. Wanneer je op een shared hostingsysteem zit met een paar honderd andere pipo's dan zou ik mijn homedir toch heel graag dicht hebben staan.
Gewijzigd op 07/02/2014 17:12:51 door Willem vp
Dankjewel voor je uitleg, al kan ik niet alles even goed volgen.
Ik huur een eigen VPS. In principe werk ik met 1 user en heeft verder niemand toegang tot de VPS. Is 0755 dan oké? Stel dat ik bijv. mijn library de rechten 0700 geef. Dus dan kan alleen user Ozzie lezen, schrijven en uitvoeren. Werkt mijn website dan nog? Of kan Apache er dan niet meer bij? Ik neem aan dat Apache tot de categorie "Anderen" behoort?
Ik stel deze vraag met name omdat ik een functie heb gemaakt waarmee ik een directory kan aanmaken. Als parameter kan ik de rechten meegeven. Standaard staat deze parameter op 0755 ingesteld. Ik zat me echter af te vragen of het wel nodig is om rechten te kunnen wijzigen, als ik toch altijd alles op 0755 moet zetten. Vandaar eigenlijk mijn vraag.
Gewijzigd op 07/02/2014 19:18:36 door Ozzie PHP
Gebruker/group => apache:apache
Bij 0700 kunnen ozzie en apache dus niet bij elkaars bestanden.
Met "anderen" wordt de hele wereld/het hele internet bedoeld.
Dus bij 0777 kan en mag iedereen alles doen met de bestanden. (Men moet wel eerst op de server kunnen komen)
Gewijzigd op 07/02/2014 19:28:21 door - SanThe -
Als ik jou dan goed begrijp, doet de user apache niks met mij website bestanden? Want apache is niet de eigenaar en valt ook niet onder de groep "anderen". En toch werkt mijn website. Moet ik dan concluderen dat de user apache niks met mijn bestanden doet, maar alleen user ozzie?
>> Met "anderen" wordt de hele wereld/het hele internet bedoeld.
Als ik een bezoek breng aan een website, val ik dan onder die "anderen"?
Ozzie PHP op 07/02/2014 19:48:21:
Als ik een bezoek breng aan een website, val ik dan onder die "anderen"?
Ja en nee.
Ja omdat je onbekend bent en onder geen enkele group valt.
Maar je hebt geen toegang tot de server.
Nee omdat alles wat je doet uiteindelijk door apache wordt gedaan.
Stel ik heb een directory /private/ozzie waarin alle bestanden voor mijn website staan.
Jij zegt: user ozzie is ook groep ozzie. Als apache die bestanden wil inlezen, valt de user apache dan onder de groep "anderen"? Of begrijp ik het nu verkeerd?
En uiteindelijk is nog steeds mijn vraag, is 0755 voor een directory de juiste keuze?
755 voor een dir en 644 voor een bestand is vrij standaard.
Edit: Anderen is trouwens geen group.
Je hebt gewoon drie soorten van rechten. Rechten voor de eigenaar/owner, rechten voor een group en als laatste rechten voor iedereen/elk proces/de wereld.
Gewijzigd op 07/02/2014 21:26:42 door - SanThe -
Oké. Dus Apache valt onder die "anderen" en als "anderen" geen rechten geef, dan kan Apache niet bij mijn website bestanden en doet mijn website het dus niet? Is dat correct?
>> 755 voor een dir en 644 voor een bestand is vrij standaard.
Oké. En zou er voor een directory een reden kunnen zijn om af te wijken van 0755, of loopt dan alles in de soep?
owner:group ozzie:ozzie en rechten 770 dan kan apache er niks mee. Dan moeten er dus rechten zijn voor 'anderen'.
Ah oke... dus apache valt onder "anderen" dus als ik anderen geen lees- en uitvoerrechten geef dan werkt m'n site niet. Kortom. Gewoon altijd 0755 gebruiken dus.
Bestanden 644.
Allright, thanks!!
"anderen" is eigenlijk niet de juiste benaming. In unix begrippen (ook linux) is het: Owner, Group en World. Met world word dan bedoeld iedereen waar hier "anderen" gebruikt wordt. De group ozzie bestaat alleen wanneer de group ozzie aangemaakt is (meestal gebeurt dit op hobby compu's bij aanmaken user ozzie maar hoeft niet, bedrijven doen dat anders). Groups kan je checken op os met #cat /etc/group
Ah oke... maar verandert dit iets aan hoe ik de directory rechten moet instellen? Of is 0755 nog steeds prima?
Aad B op 07/02/2014 23:14:35:
"anderen" is eigenlijk niet de juiste benaming. In unix begrippen (ook linux) is het: Owner, Group en World.
Hier moet ik je corrigeren. Alhoewel er ooit wel varianten zijn geweest waar de termen owner/group/world werden gebruikt, is user/group/other toch gebruikelijker.
Dat kun je onder meer zien aan het chmod-commando, waar je de rechten met u, g en o kunt bepalen (chmod u+rw,g+w,o-r filename.txt)
En dan heb je ook nog d3 mogelijkheid om apache te draaien onder de user van de eigenaar van het script.