Onafhankelijke vergelijking · geen betaalde rankings
Home / Blog / Technisch / Bestandsrechten: herstel de toegang zonder de hele applicatie te openen

Bestandsrechten: herstel de toegang zonder de hele applicatie te openen

Een upload die in 777 schrijft “zodat het werkt” wordt zes maanden later de toegangspoort tot een webshell. De toestemming vereist een operatie, geen bloedbad.

Redactie Hébergeurs.eu 4 min

Op het ticket staat 'Toestemming geweigerd' op opslag/logs. Het snelle antwoord: chmod -R 777 opslag. De app werkt weer. Drie maanden later wordt een .php opgeslagen in storage/uploads uitgevoerd omdat nginx nog steeds deze map bedient.

Webrechten zijn geen Unix-bureaucratie: scheiding tussen code, gegevens, uploads en uitvoering.

Aanbevolen model

Code (git-implementatie): menselijke/CI-eigenaar, alleen-lezen op internet. Gegevens (opslag, cache): gericht schrijven naar www-data. Uploads: subboom zonder tolk.

PadEigenaarModeOpmerking
app/implementeren:www-data750/640geen upload
opslag/www-gegevens770 richtlogboeken, cache
openbaar/uploadswww-gegevens750noexec indien mogelijk

umask en systemd

umask 027 of 002 afhankelijk van het groepsmodel. PHP-FPM user=www-data, aparte pool per multi-tenant app.

Vermijd het uitvoeren van implementatiescripts als root zonder definitieve chown.

nginx / Apache

locatie ^~ /uploads/ { locatie ~ \.php$ { alles weigeren; } } — blokkeer uitvoering, zelfs als het .php-bestand is geüpload.

Afzonderlijke vhost-gebruiker als gedeelde hosting beperkt is.

ACL voor kromme gevallen

setfacl -m u:www-data:rwX storage zonder wereld te openen. Reset ACL na herstelback-up - vaak vergeten.

Geautomatiseerde audit

Script na implementatie: mislukt als find . -perm -0002. Waarschuwingen over SUID nieuw. Documenteer tijdelijke uitzondering met ticket en vervaldatum.

Controle van uitdrukkelijke machtigingen


zoek /var/www -type f -perm -0002

zoek /var/www -type d -perm -0002

zoek /var/www -naam '*.php' -pad '*/uploads/*'

Correct: chown implement:www-data, chmod 640 files / 750 dirs, nginx deny PHP-uploads.

Documenteer uitzonderingen met ticket en vervaldatum. Scan het CI opnieuw na de implementatie.

Ontwikkelaarstraining: “toestemming geweigerd” → strace/id/groups vóór chmod.

Een enkele, voor iedereen schrijfbare uploadmap is voldoende voor kleine compromissen in de toeleveringsketen van het CMS.

SELinux/AppArmor op geharde distributies: chcon soms vereist na implementatie - documentcontexten, niet alleen chmod.

Containers: volume-mount UID-toewijzing — toestemming geweigerd op mysterieuze wijze, vaak UID-host ≠ containergebruiker.

Technische schuldmachtigingen

Audit-erfenis: oude provider chmod 777 storage nergens gedocumenteerd. Sprintherstelplan: nginx deny + ACL + chown.

PHP-FPM-poolgebruiker per multi-tenantclient indien gedeeld op maat: isolatie door Unix-gebruiker > chmod-wereld.

Git houdt standaard geen permissies bij; indien nodig zijn er hook-herstelmodi na het afrekenen.

Operationele samenvatting

De juiste rechten op webhosting scheiden lezen, schrijven en uitvoeren per rol: implementeren schrijft code, www-data schrijft uploads en cache, niemand voert PHP uit bij uploads. Het gedeelde systeem compenseert soms met open_basedir; VPS vereist expliciete discipline.

Webshell-audit na een incident: chmod alleen onvoldoende - nginx weigert uitvoering, rotatiegeheimen, vectoruploadanalyse. Integreer scanmachtigingen in CI-implementatie. Training: toestemming geweigerd → eigenaar/groep vóór modus.

Stap voor stap handleiding

  1. Identificeer gebruiker PHP-FPM (ps aux | grep php-fpm).
  2. Geef de webroot van de huidige eigenaar weer (namei -l /var/www/app/public).
  3. Pas implement:www-data 750/640 toe op code.
  4. opslag en upload 770/750 www-data.
  5. nginx weigert PHP bij uploads.
  6. Scan CI wereldbeschrijfbaar.
  7. Documenteer uitzonderingen.

Bij een kwaadaardig uploadincident: isoleer vhost, bewaar het bestand voor analyse, roteer het DB-wachtwoord als er een vermoeden bestaat van SQL-injectie, herstel de machtigingen van IaC en niet handmatige chmod-paniek.

Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.

Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.

Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.

Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.

Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.

Houd een gedateerd runbook bij, voor/na-statistieken en beoordeling na incidenten: cumulatieve discipline voorkomt paniek op vrijdagavond.

CMS

WP uploadt niet-exec, Laravel-opslag is alleen beschrijfbaar. Symlink implementeert machtigingen voor current.

Beslis en ga vooruit zonder blinde vlek

  1. Identificeer de PHP-FPM-gebruikernamei -l in webroot, eigenaar implement:www-data.
  2. Pas 750/640 toe op de code — opslag en uploads 770/750, nginx weigert PHP in uploads.
  3. Scan wereldbeschrijfbaar — vind in post-implementatie CI, ticketuitzonderingen met vervaldatum.
  4. Train de ontwikkelaars — toestemming geweigerd → strace/id/groups vóór chmod 777 paniek.
  5. Herstellen vanuit IaC na kwaadwillig uploadincident — geen handmatige nood-chmod.

Gedeeld versus VPS: vergelijk de limieten via de overzicht en onze beveiligingsgidsen.

Veelgestelde vragen

chmod 755 of 775 voor een website?

755 op statische bestanden als www-data alleen leest. 775 alleen als meerdere gebruikers in de groep moeten schrijven: strikte groep, nooit schrijfbaar voor iedereen.

Eigenaar www-data of inzetten?

App-bestanden: implementeren: www-data 640, mappen 750. Uploads: www-data beschrijfbaar, PHP-uitvoering uitgeschakeld in uploadmap via nginx.

ACL versus recursieve chmod?

setfacl voor specifieke gevallen (deploy + www-data). chmod -R 777 is een anti-patroon dat het echte gebruiker/groepsconflict verbergt.

Hoe auditeren?

vind schrijfbaar voor iedereen, vind onverwachte SUID, controleer uploadpaden. Integreer in CI of script na implementatie.


Toestemming voor volgende fout geweigerd: wijzig eigenaar vóór modus – altijd in die volgorde.

Vergelijk Europese providers

Filter op compliance, locatie en gebruikssituatie — open daarna de fiches om het echte bereik te controleren.

Blader door het overzicht
Blog

Gerelateerde lectuur

Alle artikelen →