Um acesso negado no Linux nem sempre vem de um chmod esquecido. O comando que falha pode estar sendo executado com um UID diferente, ou sua conta não pertence ao grupo esperado. Antes de alterar a propriedade, comece identificando a conta realmente utilizada.
O comando id exibe o UID, o grupo principal e os grupos secundários do processo atual. Este é o ponto de partida quando um script, um serviço ou uma sessão SSH não vê o mesmo arquivo que você.

Ler o UID, o GID e os grupos com id
Execute id sem argumentos na sessão que apresenta problemas:
id
Uma saída como uid=1000(alex) gid=1000(alex) groups=1000(alex),27(sudo),999(docker) descreve a identidade do processo. uid é o identificador do usuário. gid é o grupo principal. groups adiciona os grupos secundários, geralmente aqueles que fornecem acesso ao Docker, aos logs ou a um compartilhamento.
Para obter apenas um valor, utilize as seguintes opções:
id -uexibe o UID efetivo.id -gexibe o GID efetivo.id -Gnlista os nomes dos grupos.id -unexibe o nome da conta efetiva.
A diferença entre o identificador real e o efetivo aparece principalmente após sudo, em um binário SUID ou com algumas ferramentas que mudam de usuário. Para uma verificação rápida apenas do nome, consulte também nosso artigo sobre whoami e o usuário efetivo.
Inspecionar uma conta sem abrir sua sessão
Adicione o nome da conta para interrogar seu registro local. Este comando lê a base de usuários e não conecta você sob essa conta:
id www-data
id -Gn www-data
No Debian e no Ubuntu, www-data é frequentemente a conta dos serviços web. Em outra distribuição, o serviço pode usar apache, nginx ou uma conta de aplicação. Verifique o arquivo de unidade ou a configuração do serviço em vez de simplesmente usar este exemplo.
Depois de adicionar um usuário a um grupo, uma sessão já aberta pode manter sua lista antiga de grupos. Desconecte-se e reconecte-se antes de concluir que a modificação falhou. O comando id usuario relê a base, mas o id sozinho sempre descreve seu processo atual.
Comparar a identidade da conta e os direitos do arquivo
Conhecer os grupos não é suficiente. É necessário então ler o proprietário, o grupo e as permissões do caminho em questão:
id
stat -c '%U %G %A %n' /caminho/para/o/arquivo
namei -l /caminho/para/o/arquivo
stat indica a quem pertence o arquivo. namei -l também exibe os direitos de cada diretório no caminho. Um arquivo legível não serve de nada se a conta não consegue atravessar o diretório pai, o que exige o direito x nesse diretório.
Não corrija uma negação com chmod 777. Compare primeiro o grupo do arquivo com id -Gn, depois ajuste o proprietário, o grupo ou os direitos necessários. Para rever os grupos e seus usos, leia a gestão de grupos no Linux. Se precisar modificar as permissões, nosso guia sobre chmod recursivo explica por que um comando muito amplo pode afetar muito mais arquivos do que o previsto.
Testar sob a conta em questão antes de modificar sudo
Quando você tem direitos de administração, execute apenas o controle sob a conta que encontra o problema:
sudo -u www-data id
sudo -u www-data test -r /caminho/para/o/arquivo && echo legível
sudo -u www-data test -x /caminho/para/o/diretorio && echo atravessável
O primeiro comando confirma a identidade efetiva. Os dois seguintes respondem a uma pergunta específica, leitura do arquivo ou travessia do diretório. Substitua www-data e os caminhos antes da execução. Não use sudo -u para iniciar um aplicativo de produção apenas para testar seus direitos.
Se o acesso continuar negado, enquanto UID, grupo e permissões Unix parecem corretos, verifique também as ACLs com getfacl, os montagens de rede e SELinux ou AppArmor, dependendo da sua distribuição. Esses mecanismos podem adicionar uma regra acima dos direitos clássicos.
Com id, stat e um teste sob a conta certa, você sabe onde procurar antes de modificar os direitos às cegas.