Um diretório criado no local errado ou com permissões muito abertas acaba frequentemente causando problemas mais tarde. O comando mkdir é suficiente para começar, mas não substitui o controle do proprietário, do grupo e das permissões.
Para um diretório pessoal, crie-o na sua pasta de usuário. Para um diretório compartilhado ou usado por um serviço, identifique primeiro a conta que deve escrever nele. Um chmod 777 às vezes esconde um verdadeiro problema de proprietário e permite que todas as contas locais modifiquem o conteúdo.
Crie o diretório no local correto
A partir do diretório atual, o seguinte comando cria um único diretório:
mkdir salvamentos
Com um caminho absoluto, você sabe precisamente onde o diretório será criado. Adicione -p se os diretórios pais podem estar ausentes:
mkdir -p ~/projetos/site-teste/logs
Sem -p, mkdir para se ~/projetos/site-teste não existir. A opção também evita um erro se o último diretório já estiver presente. Ela não transforma um caminho errado em um caminho correto: verifique-o com pwd antes de executar o comando.
Para preparar um espaço que deve pertencer à sua conta, fique no seu diretório pessoal. Você evitará sudo, portanto, um diretório criado pelo root que seu usuário não poderá mais preencher:
mkdir -p ~/arquivos/2026
stat -c '%A %U:%G %n' ~/arquivos ~/arquivos/2026
Escolha permissões adequadas ao uso
Um diretório requer a permissão x para ser percorrido. Em um diretório, r permite listar os nomes e w permite adicionar, renomear ou excluir entradas. As permissões realmente aplicadas também dependem do seu umask.
Para um diretório privado, crie-o com um modo explícito:
mkdir -m 700 ~/arquivos-privados
stat -c '%A %a %U:%G %n' ~/arquivos-privados
O modo 700 permite o acesso ao proprietário e fecha o diretório para outros usuários. Para um diretório onde um grupo de trabalho deve ler e escrever, escolha um grupo conhecido e o modo 2770:
sudo install -d -o alice -g equipe-web -m 2770 /srv/equipe-web
stat -c '%A %a %U:%G %n' /srv/equipe-web
O 2 no início ativa o bit setgid do diretório. Os novos arquivos e subdiretórios herdam então o grupo equipe-web. Essa solução evita abrir a escrita para todas as contas do servidor. Verifique se os membros esperados estão realmente nesse grupo com id nome_usuario.
mkdir -m 777 cria um diretório modificável por todos, e o umask pode ainda reduzir esse modo. Não o use para corrigir um Permissão negada. Em vez disso, examine o caminho completo, seu proprietário e as permissões de cada diretório pai:
namei -l /srv/equipe-web
ls -ld /srv /srv/equipe-web
id
Verifique antes de confiar o diretório a um serviço
Um serviço executado sob www-data, postgres ou uma conta dedicada pode não ver as mesmas permissões que sua sessão. Consulte seu usuário antes de alterar qualquer coisa. Para systemd, este comando fornece as contas configuradas pela unidade:
systemctl show meu-servico
-p User -p Group -p DynamicUser
Em seguida, crie o diretório com o proprietário esperado e teste um arquivo a partir dessa conta. Em uma máquina de teste:
sudo install -d -o www-data -g www-data -m 750 /var/lib/meu-servico
sudo -u www-data touch /var/lib/meu-servico/teste-escrita
ls -l /var/lib/meu-servico/teste-escrita
sudo rm /var/lib/meu-servico/teste-escrita
Essa verificação diz se a conta do serviço pode realmente escrever. Se falhar, não adicione permissões aleatórias. Primeiro, verifique o proprietário, o grupo, as ACLs eventuais com getfacl e as permissões dos diretórios pais.
- Use
mkdir -ppara um caminho cujos pais podem estar ausentes. - Use
statouls -ldlogo após a criação. - Para um diretório compartilhado, defina proprietário, grupo e modo antes de iniciar o serviço.
- Reserve
chmodpara uma correção direcionada, após identificar a conta bloqueada.
O guia sobre setfacl em Linux ajuda quando um único usuário precisa de acesso adicional. Se você precisar modificar permissões em uma árvore existente, use em vez disso o procedimento dedicado a chmod recursivo: mudar todos os arquivos e diretórios com o mesmo modo facilmente quebra os direitos de execução dos diretórios.
A página de manual mkdir(1) detalha as opções, e mkdir(2) explica o efeito do umask e a herança do grupo. Mantenha esses dois pontos em mente antes de criar um diretório usado por um serviço.
