Permissões de Arquivos

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, mergulharemos no mundo das permissões de arquivos no Linux. Exploraremos três comandos essenciais: chown, touch e chmod. Essas ferramentas são cruciais para gerenciar o acesso a arquivos e diretórios em um sistema Linux. Ao final deste laboratório, você terá uma compreensão sólida sobre como criar arquivos, alterar a propriedade de arquivos e modificar permissões. Dominar esses comandos permitirá que você controle quem pode ler, gravar e executar arquivos no seu sistema.

Criando um Novo Arquivo

Vamos começar criando um novo arquivo usando o comando touch. Este comando versátil pode criar arquivos novos e vazios, além de atualizar os carimbos de data/hora (timestamps) de arquivos existentes. Pense nele como uma maneira rápida de "tocar" em um arquivo, seja para criá-lo ou para atualizar seu último horário de acesso.

Primeiro, certifique-se de estar no diretório correto. Trabalharemos no seu diretório project:

cd ~/project

O comando cd significa "change directory" (mudar diretório). O símbolo ~ representa seu diretório pessoal (home), e /project especifica o subdiretório para o qual queremos ir. Se o diretório project não existir, este comando provavelmente falhará. Geralmente, é uma boa prática criar o diretório primeiro se você não tiver certeza. No entanto, neste ambiente de laboratório, o diretório já deve existir.

Agora, vamos criar um novo arquivo chamado example.txt:

touch example.txt

Este comando cria um arquivo vazio chamado example.txt no seu diretório atual. Para confirmar que o arquivo foi criado, use o comando ls:

ls

ls significa "list" (listar). Ele mostra os arquivos e diretórios na sua localização atual. Você deve ver example.txt listado na saída. Se não o vir, verifique se executou o comando touch corretamente e se você está realmente no diretório ~/project.

Alterando a Propriedade de um Arquivo

Agora que criamos um arquivo, vamos aprender como alterar sua propriedade. O comando chown nos permite modificar tanto o usuário quanto o grupo proprietário de um arquivo. A propriedade determina quem tem controle sobre o arquivo.

Primeiro, vamos verificar a propriedade atual do nosso arquivo example.txt:

ls -l example.txt

O comando ls -l (listar com formato longo) fornece informações detalhadas sobre o arquivo, incluindo suas permissões, proprietário e grupo. Você deve ver uma saída semelhante a esta:

-rw-rw-r-- 1 labex labex 0 Jul 29 15:11 example.txt

Vamos analisar esta saída:

  1. -rw-rw-r-- representa as permissões do arquivo (exploraremos isso mais detalhadamente no Passo 4). O primeiro caractere indica o tipo de arquivo (- para um arquivo comum, d para diretório, etc.). Os caracteres restantes representam as permissões de leitura, gravação e execução para o proprietário, grupo e outros.
  2. O primeiro labex é o proprietário atual do arquivo. Este é o nome de usuário que possui o arquivo.
  3. O segundo labex é o grupo atual do arquivo. Um grupo é uma coleção de usuários que podem compartilhar permissões.
  4. 0 é o tamanho do arquivo em bytes. Como o arquivo está vazio, seu tamanho é zero.
  5. Jul 29 15:11 é a data e hora da última modificação.
  6. example.txt é o nome do arquivo.

Agora, vamos alterar a propriedade do arquivo para o usuário root. root é a conta de administrador em sistemas Linux e possui privilégios especiais.

sudo chown root:root example.txt

Aqui está o que este comando faz:

  • sudo executa o comando com privilégios de root. Provavelmente será solicitada sua senha. O chown requer privilégios elevados porque é um comando poderoso que pode afetar a segurança do sistema. Sem sudo, você receberá um erro de "Permission denied" (Permissão negada).
  • chown é o comando para alterar a propriedade.
  • root:root especifica o novo proprietário e grupo (ambos definidos como root). A sintaxe é proprietário:grupo.
  • example.txt é o arquivo de destino.

Vamos verificar a alteração:

ls -l example.txt

Agora você deve ver que tanto o proprietário quanto o grupo foram alterados para root:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

Se você ainda vir labex em vez de root, certifique-se de ter usado sudo ao executar o comando chown e de ter inserido sua senha corretamente.

Alterando a Propriedade de um Diretório

O comando chown também pode alterar a propriedade de diretórios inteiros e seu conteúdo. Vamos ver isso em ação. Isso é particularmente útil para gerenciar estruturas de diretórios complexas onde você deseja garantir que todos os arquivos e subdiretórios tenham o mesmo proprietário.

Primeiro, vamos criar um novo diretório com alguns arquivos:

mkdir -p new-dir/subdir
echo "Hello, world" > new-dir/file1.txt
echo "Another file" > new-dir/subdir/file2.txt

Vamos analisar esses comandos:

  • mkdir -p new-dir/subdir cria o diretório new-dir e seu subdiretório subdir. A opção -p diz ao mkdir para criar diretórios pai conforme necessário. Sem -p, se new-dir não existisse, a criação de new-dir/subdir falharia.
  • echo "Hello, world" > new-dir/file1.txt cria um arquivo chamado file1.txt dentro do diretório new-dir e escreve o texto "Hello, world" nele. O símbolo > é usado para redirecionamento; ele pega a saída do comando echo e a redireciona para o arquivo especificado.
  • echo "Another file" > new-dir/subdir/file2.txt cria de forma semelhante um arquivo chamado file2.txt dentro do diretório new-dir/subdir e escreve o texto "Another file" nele.

Agora, vamos verificar a propriedade atual:

ls -lR new-dir

ls -lR lista o conteúdo de new-dir recursivamente. A opção -R (recursiva) faz com que o ls liste todos os arquivos e subdiretórios dentro de new-dir e seus conteúdos.

Você deve ver algo assim:

new-dir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 labex labex 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file2.txt

Isso mostra que o diretório new-dir, seu subdiretório subdir e os arquivos file1.txt e file2.txt pertencem ao labex.

Agora, vamos alterar a propriedade de new-dir e todo o seu conteúdo para o usuário root:

sudo chown -R root:root new-dir

Neste comando:

  • A opção -R diz ao chown para operar recursivamente, alterando a propriedade de todos os arquivos e subdiretórios dentro de new-dir. Isso é crucial; sem -R, apenas a propriedade do diretório new-dir seria alterada, mas os arquivos e subdiretórios dentro dele ainda pertenceriam ao labex.

Vamos verificar a alteração:

ls -lR new-dir

Agora você deve ver:

new-dir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 root root 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file2.txt

Como você pode ver, a propriedade do diretório e de todo o seu conteúdo foi alterada para root. Isso demonstra o poder da opção -R para fazer alterações abrangentes na propriedade dentro de uma estrutura de diretórios.

Alterando as Permissões de um Arquivo

No Linux, as permissões de arquivo são representadas por uma série de letras ou números. Vamos explorar como ler e alterar essas permissões. Entender as permissões é vital para proteger seus arquivos e impedir o acesso não autorizado.

Primeiro, vamos ver as permissões atuais do nosso arquivo example.txt:

ls -l example.txt

Você pode ver algo assim:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

A parte -rw-rw-r-- representa as permissões do arquivo. É aqui que entram as notações numérica e simbólica. Vamos analisá-la:

  • O primeiro caractere (-) indica que este é um arquivo comum. Outros indicadores comuns são d para diretório e l para link simbólico.
  • Os próximos três caracteres (rw-) representam as permissões do proprietário (leitura e gravação, mas não execução).
    • r significa permissão de leitura: O proprietário pode abrir e ler o arquivo.
    • w significa permissão de gravação: O proprietário pode modificar o arquivo.
    • x significa permissão de execução: O proprietário pode executar o arquivo (se for um programa ou script). Um - significa que a permissão foi negada.
  • Os próximos três (rw-) são para o grupo. Eles têm o mesmo significado acima, mas aplicam-se aos membros do grupo do arquivo.
  • Os últimos três (r--) são para outros (todos os demais). Eles também têm o mesmo significado, mas aplicam-se a usuários que não são nem o proprietário nem membros do grupo do arquivo.

Agora, vamos alterar essas permissões usando o comando chmod. chmod significa "change mode" (alterar modo), e ele permite que você modifique essas permissões. Começaremos com a notação numérica.

sudo chmod 700 example.txt

Neste comando:

  • 700 é uma representação numérica das permissões:
    • O primeiro dígito (7) representa as permissões do proprietário.
    • O segundo dígito (0) representa as permissões do grupo.
    • O terceiro dígito (0) representa as permissões dos outros.

Cada dígito é um número de 0 a 7, calculado somando os valores para as permissões de leitura (4), gravação (2) e execução (1):

  • 4: Permissão de leitura
  • 2: Permissão de gravação
  • 1: Permissão de execução
  • 0: Sem permissão

Portanto, 7 (primeiro dígito) dá ao proprietário permissões de leitura (4), gravação (2) e execução (1): 4+2+1=7 0 (segundo dígito) não dá permissões ao grupo (0+0+0=0). 0 (terceiro dígito) não dá permissões aos outros (0+0+0=0).

Assim, 700 significa: Proprietário: leitura, gravação, execução. Grupo: nenhuma. Outros: nenhuma.

Vamos verificar a alteração:

ls -l example.txt

Agora você deve ver:

-rwx------ 1 root root 0 Jul 29 15:11 example.txt

O proprietário agora tem permissões rwx (leitura, gravação e execução), enquanto o grupo e outros não têm permissões.

Alterando as Permissões de um Diretório

Alterar permissões para diretórios funciona de forma semelhante à alteração de permissões para arquivos. Vamos praticar criando um novo diretório e modificando suas permissões. As permissões de diretório controlam quem pode listar o conteúdo do diretório, criar novos arquivos dentro dele e acessar arquivos que já estão no diretório.

Primeiro, vamos criar um novo diretório e definir algumas permissões não padrão:

mkdir ~/test-dir
chmod 700 ~/test-dir

Agora, vamos verificar as permissões atuais:

ls -ld ~/test-dir

A opção -d no ls -l diz ao ls para listar o diretório em si, em vez de seu conteúdo. Sem -d, o ls listaria os arquivos e subdiretórios dentro de test-dir, que está vazio no momento. Você deve ver:

drwx------ 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

O d no início indica que é um diretório. O rwx------ indica que o proprietário tem permissões de leitura, gravação e execução, enquanto o grupo e outros não têm permissões. Para diretórios:

  • A permissão de leitura (r) permite que você liste o conteúdo do diretório usando ls.
  • A permissão de gravação (w) permite que você crie novos arquivos e subdiretórios dentro do diretório.
  • A permissão de execução (x) permite que você acesse arquivos e subdiretórios dentro do diretório (ou seja, entrar nele com cd).

Agora, vamos alterar as permissões:

chmod -R 755 ~/test-dir

Neste comando:

  • -R aplica a alteração recursivamente a todos os arquivos e subdiretórios (embora nosso diretório esteja vazio neste caso). É uma boa prática incluí-lo ao lidar com diretórios, mesmo que estejam vazios no momento, caso você adicione arquivos posteriormente.
  • 755 dá permissões de leitura, gravação e execução ao proprietário, e permissões de leitura e execução ao grupo e outros.

Vamos analisar 755:

  • Proprietário (7): Leitura (4) + Gravação (2) + Execução (1) = 7
  • Grupo (5): Leitura (4) + Execução (1) = 5
  • Outros (5): Leitura (4) + Execução (1) = 5

Vamos verificar a alteração:

ls -ld ~/test-dir

Agora você deve ver:

drwxr-xr-x 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

Isso mostra claramente a alteração nas permissões, de apenas o proprietário ter acesso (700) para o proprietário ter acesso total enquanto outros podem ler e executar (755). Agora, qualquer pessoa pode listar o conteúdo de test-dir e acessar arquivos dentro dele, mas apenas o proprietário pode criar novos arquivos ou modificar os existentes.

Usando Notação Simbólica para Permissões

Embora a notação numérica seja concisa, a notação simbólica pode ser mais intuitiva, especialmente quando você deseja alterar apenas uma única permissão. A notação simbólica usa letras para representar o usuário, grupo e outros, e operadores para adicionar ou remover permissões.

Neste passo, você criará um pequeno script de shell e, em seguida, adicionará permissão de execução a ele.

Primeiro, vamos criar um novo arquivo de script com algum conteúdo:

cd ~/project
echo '#!/bin/bash' > script.sh
echo 'echo "Hello, World"' >> script.sh

Esses comandos fazem duas coisas:

  • O primeiro comando echo cria script.sh e escreve a primeira linha, #!/bin/bash, nele. Esta linha é chamada de shebang e diz ao Linux para executar o script com o Bash.
  • O segundo comando echo adiciona uma nova linha ao final do arquivo com >>. Ele escreve echo "Hello, World", que exibirá Hello, World quando o script for executado.

Você pode confirmar que o arquivo agora contém duas linhas separadas com:

cat script.sh

Você deve ver:

#!/bin/bash
echo "Hello, World"

Agora, vamos verificar suas permissões iniciais:

ls -l script.sh

Você deve ver algo como:

-rw-rw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

Como você pode ver, inicialmente, o script tem apenas permissões de leitura e gravação para o proprietário e grupo, e permissão de leitura para outros. Ele não tem permissão de execução, que é necessária para executá-lo como um programa.

Vamos tentar executar o script:

./script.sh

Você deve ver um erro de "Permission denied" (Permissão negada) porque o script ainda não tem permissões de execução. A parte ./ diz ao shell para executar o script localizado no diretório atual.

Agora, vamos adicionar permissão de execução para o proprietário usando notação simbólica:

chmod u+x script.sh

Neste comando:

  • u refere-se ao usuário (proprietário). Outras opções são g para grupo, o para outros e a para todos (usuário, grupo e outros).
  • +x adiciona permissão de execução. O símbolo + adiciona uma permissão, enquanto o símbolo - remove uma permissão.

Portanto, u+x significa "adicionar permissão de execução para o proprietário".

Vamos verificar a alteração:

ls -l script.sh

Agora você deve ver:

-rwxrw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

O proprietário agora tem permissões rwx (leitura, gravação e execução).

Agora, vamos tentar executar o script novamente:

./script.sh

Desta vez, você deve ver a saída:

Hello, World

Este exemplo demonstra claramente por que precisamos adicionar permissões de execução a scripts e a diferença antes e depois de adicionar essas permissões. A notação simbólica facilita a modificação de permissões específicas sem ter que recalcular toda a representação numérica.

Resumo

Neste laboratório, exploramos comandos essenciais do Linux para gerenciar permissões de arquivos:

  1. Usamos touch para criar novos arquivos e atualizar os existentes.
  2. Aprendemos como usar chown para alterar a propriedade de arquivos e diretórios, incluindo alterações recursivas para estruturas de diretórios inteiras.
  3. Praticamos o uso de chmod com notações numérica e simbólica para modificar permissões de arquivos e diretórios, entendendo os diferentes níveis de permissão para proprietário, grupo e outros.
  4. Vimos exemplos práticos de por que as permissões são importantes, como a necessidade de permissões de execução para rodar scripts.
  5. Esclarecemos as diferenças entre a notação numérica e simbólica para chmod e quando cada uma pode ser mais apropriada.

Esses comandos são cruciais para manter a segurança e controlar o acesso em sistemas Linux. Lembre-se de sempre ter cautela ao alterar permissões, especialmente ao usar sudo, pois alterações incorretas podem ter consequências significativas para a segurança e funcionalidade do sistema. Sempre verifique seus comandos antes de executá-los e entenda as implicações das alterações que você está fazendo.