Een toegang weigering onder Linux komt niet altijd door een vergeten chmod. De opdracht die faalt kan draaien met een andere UID, of het account behoort niet tot de verwachte groep. Voordat u een eigenaar wijzigt, begint u met het identificeren van het daadwerkelijk gebruikte account.
De opdracht id toont de UID, de primaire groep en de secundaire groepen van het huidige proces. Dit is het vertrekpunt wanneer een script, een service of een SSH-sessie niet hetzelfde bestand ziet als u.

Lees de UID, de GID en de groepen met id
Voer id zonder argument in de sessie die problemen vertoont uit:
id
Een uitvoer zoals uid=1000(alex) gid=1000(alex) groups=1000(alex),27(sudo),999(docker) beschrijft de identiteit van het proces. uid is de gebruikersidentificatie. gid is de primaire groep. groups voegt de secundaire groepen toe, vaak diegene die toegang geven tot Docker, de logs of een gedeeld item.
Om slechts één waarde op te halen, gebruik de volgende opties:
id -utoont de effectieve UID.id -gtoont de effectieve GID.id -Gnsomt de namen van de groepen op.id -untoont de naam van het effectieve account.
Het verschil tussen de daadwerkelijke en effectieve identificatie wordt vooral zichtbaar na sudo, in een SUID-binaire of met bepaalde tools die van gebruiker wisselen. Voor een snelle controle van enkel de naam, raadpleeg ook ons artikel over whoami en de effectieve gebruiker.
Controleer een account zonder het in te loggen
Voeg de naam van het account toe om zijn lokale profiel op te vragen. Deze opdracht leest de gebruikersdatabase en verbindt u niet als dit account:
id www-data
id -Gn www-data
Op Debian en Ubuntu is www-data vaak het account voor webservices. Op een andere distributie kan de service apache, nginx of een applicatie-account gebruiken. Controleer het eenheidsbestand of de configuratie van de service in plaats van dit voorbeeld letterlijk over te nemen.
Na het toevoegen van een gebruiker aan een groep kan een al geopende sessie zijn oude groepslijst behouden. Log uit en log opnieuw in voordat u concludeert dat de wijziging is mislukt. De opdracht id gebruiker leest de database opnieuw, maar id alleen beschrijft nog steeds uw huidige proces.
Vergelijk de identiteit van het account en de rechten van het bestand
Het kennen van de groepen is niet genoeg. U moet vervolgens de eigenaar, de groep en de permissies van het betreffende pad lezen:
id
stat -c '%U %G %A %n' /pad/naar/het/bestand
namei -l /pad/naar/het/bestand
stat geeft aan wie het bestand bezit. namei -l toont ook de rechten van elke directory in het pad. Een leesbaar bestand is nutteloos als het account de bovenliggende map niet kan doorlopen, wat het recht x op deze directory vereist.
Corrigeer een weigering niet met chmod 777. Vergelijk eerst de groep van het bestand met id -Gn, en pas vervolgens de eigenaar, de groep of de benodigde rechten aan. Om de groepen en hun gebruik te herzien, lees het beheer van groepen onder Linux. Als u de permissies moet wijzigen, legt onze gids over chmod recursief uit waarom een te brede opdracht veel meer bestanden kan beïnvloeden dan verwacht.
Test onder het betrokken account voordat u sudo wijzigt
Wanneer u administratierechten hebt, voer dan alleen de controle uit onder het account dat het probleem ondervindt:
sudo -u www-data id
sudo -u www-data test -r /pad/naar/het/bestand && echo leesbaar
sudo -u www-data test -x /pad/naar/het/dossier && echo doorloopbaar
De eerste oproep bevestigt de effectieve identiteit. De twee daaropvolgende beantwoorden een specifieke vraag, het lezen van het bestand of het doorlopen van de map. Vervang www-data en de paden voordat u uitvoert. Gebruik sudo -u niet om een productietoepassing te starten enkel om zijn rechten te testen.
Als de toegang blijft geweigerd terwijl UID, groep en Unix-rechten correct lijken, controleer dan ook de ACL met getfacl, de netwerkmontages en SELinux of AppArmor, afhankelijk van uw distributie. Deze mechanismen kunnen een regel bovenop de klassieke rechten toevoegen.
Met id, stat en een test onder het juiste account, weet u waar u moet zoeken voordat u rechten blindelings wijzigt.