Permissões de arquivos e diretórios

7.3) Mudando permissões de arquivos e diretórios

chmod - É um comando que altera as permissões dos arquivos e diretórios, através de uma representação simbólica ou de um número octal.

Formato Simbólico

chmod em formato simbólico

chmod [u g o a] {+ - =} {r w x s t} <arquivo>

O comando é divido em 3 partes, uma ou mais letras para indicar a quem vai ocorrer a mudança, um sinal indicando se vai adicionar, remover ou substituir, e uma letra que indicam as novas permissões do usuário.

Aqui será indicado a quem vai ocorrer essa mudança: [ u g o a ]

  • [ u ] para indicar mudança para o dono do arquivo.

  • [ g ] para indicar mudança para o grupo do dono.

  • [ o ] para indicar mudança para outros usuários.

  • [ a ] para todos.

Obs: Se não for digitado nenhuma letra será assumido a.

Aqui será indicado o que vai ser essa mudança, remover, adicionar ou substituir: { + - = }

  • { + } para adicionar uma permissão.

  • { - } para remover uma permissão.

  • { = } para substituir as permissões pela a indicada.

Aqui será indicado qual vai ser essa mudança: { r w x s t }

  • { r } permissão de leitura.

  • { w } permissão de gravação.

  • { x } permissão executar um arquivo ou entrar em um diretório.

  • { s } permissão suid ou sgid.

  • { t } permissão sticky.

Exemplo:

Comando
Descrição

chmod u+r <arquivo>

Foi adicionado a permissão leitura ao dono no arquivo.

chmod u-r <arquivo>

Foi retirado a permissão leitura ao dono no arquivo.

chmod u=r <arquivo>

Todas as permissões foram substitutas pela a informada ao dono.

Permissões especiais: SUID, SGID e Sticky bit

SUID (Set User ID): user + s(pecial)

Essa permissão permite que o arquivo seja executado com privilégios de proprietário do arquivo.

Olhando o comando /usr/bin/passwd, esse comando tem por padrão a permissão suid definida. O passwd é um gerenciamento de senhas, tem o suid já definido para que um usuário comum possa alterar suas próprias senhas, pois um usuário comum não tem permissão de alterar um arquivo de sistema no /etc, apenas o root.

passwd

Observe o s onde o x normalmente indicaria permissões de execução para o usuário.

SGID (Set Group ID): user + s(pecial)

A permissão SGID pode ser definida em arquivos e diretórios, nos arquivos é semelhante à permissão SUID, mas os privilégios serão os mesmos do proprietário do grupo.

Como saber se o arquivo tem o suid ou sgid ativado

  • Usando o comando ls -l

No lugar o x (executar) vai estar S ou s. A permissão SUID é representada pelo "s" (minúsculo) ou "S" (maiúsculo) na posição do usuário, enquanto a permissão SGID é representada pelo "s" (minúsculo) ou "S" (maiúsculo) na posição do grupo nas permissões de arquivo.

permissões
explicação

-rwsr-xr-x

A permissão SUID está ativada e pode ser executada (letra "s" minúscula na posição do usuário).

-rwxr-sr-x

A permissão SGID está ativada e pode ser executada (letra "s" minúscula na posição do grupo).

O "s" minúsculo em rws indica a presença do SUID no arquivo, junto com a permissão de execução. Se, no lugar dele, houvesse um "S" maiúsculo (rwS), isso significaria que a permissão de execução não foi definida.

Por exemplo:

O arquivo arquivo.c não tem a permissão de execução no usuário, se atribuirmos a permissão suid, ficará com o S.

Note que "S" maiúsculo indica que o suid está ativado, mas não tem permissão de execução, para ativar a execução suid é necessário ativar a permissão execução também.

permissão suid

Assim fica o "s" minúsculo com o suid ativado e com permissão de execução.

  • Usando o comando find

O comando find pode ser usado para localizar todos os arquivos com permissões SUID ou SGID no sistema.

Exemplo:

comando
explicação

find / -type f -perm -4000

para encontrar todos os arquivos com permissão SUID

find / -type f -perm -2000

para encontrar todos os arquivos com permissão SGID

Numericamente o suid é representado por 4000, e sgid por 2000.

  • Usando o comando stat

stat nome_do_arquivo

O comando stat pode ser usado para exibir informações detalhadas sobre um arquivo, incluindo as permissões SUID e SGID.

Stick bit: other + t(sticky)

O sticky bit é usado em diretórios para evitar que usuários regulares excluam ou movam arquivos que não sejam seus.

Somente o proprietário do arquivo e o usuário root podem excluir arquivos em um diretório que possua o Sticky bit ativado.

Um exemplo disso é o diretório /tmp

Da mesma forma que se ativarmos o suid e sgid em um arquivo que não tem permissão de execução mostrará o "S" e não o "s", no sticky bit ocorre a mesma coisa. Se o diretório não tiver a permissão o+x irá mostrar o "T" e não o "t".

Extra: alguns comandos utilizados durante a aula

Comando
Descrição

mkdir -p dir1/dir2/dir3

para criar mais de um diretório em um único comando.

touch meu-arquivo.txt

vai criar um arquivo vazio.

touch arquivo1.txt arquivo2.txt arquivo3.txt

pode criar mais de um arquivo por vez.

ls -l carta*

vai listar todos os arquivos que comecem com "carta...".

Formato numérico octal

O formato numérico octal é composto por 3 dígitos a partir de um conjunto de oito números onde cada número define um tipo de acesso diferente.

Comando
Descrição

chmod xxx <arquivo ou diretório>

Altera as permissões do usuário, grupo ou outros usuários para ler, escrever ou executar o arquivo.

chmod -R xxx <diretório>

Altera a permissão de todos arquivos e diretórios que estão no diretório recursivamente.

Exemplo:

Cada bit se refere as permissões leitura, gravação e execução (rwx). Quando o bit for 1 indica que a permissão será ativada.

                                     R W X
Binário
Octal
Permissão

000

0

Nenhum é ativado

001

1

Permissão de execução

010

2

Permissão de de gravação

011

3

Permissão de gravação e execução

100

4

Permissão de leitura

101

5

Permissão de leitura e execução

110

6

Permissão de de leitura e gravação

111

7

Permissão de leitura, gravação e execução

Outra forma de usar o formato octal é somando cada permissão isolada, por exemplo:

  • ( 4 ) permissão de leitura.

  • ( 2 ) permissão de gravação.

  • ( 1 ) permissão de execução.

Para atribuir as permissões de leitura e gravação soma 4+2 = 6, chmod 6 <arquivo>

Cada um dos 3 dígitos se refere ao usuário, grupo e outros, em sequência. Com isso se usarmos os dígitos 777 vamos atribuir todas as permissões ao dono, grupo e outros.

Exemplo de uso:

chmod 765

Números não utilizados são consideramos como 0, então chmod 6 arquivo.txt é igual a chmod 006.

chmod 6

Exemplos:

Comando
Descrição

chmod 111 <arquivo>

Todos podem executar o arquivo.

chmod 222 <arquivo>

Todos podem gravar no arquivo.

chmod 700 <arquivo>

O dono do arquivo tem todas as permissões.

chmod 600 <arquivo>

O dono do arquivo pode ler e gravar.

chmod 777 <arquivo>

Todas as permissões para todos.

Permissão SUID, SGID e Sticky bit no formato octal

No formato octal podemos utilizar o quarto digito, na frente dos 3 dígitos, para informar uma permissão especial.

Funciona da mesma forma que as permissões r, w e x, a sequência para as permissões especiais é suid, sgid e sticky.

Binário
Octal
Permissão

000

0

Nenhum é ativado

001

1

Ativa apenas o sticky

010

2

Ativa apenas o sgid

011

3

Ativa o sgid e sticky

100

4

Ativa apenas o suid

101

5

Ativa apenas o suid e sticky

110

6

Ativa o suid e sgid

111

7

Ativa todos, suid, sgid e sticky

Agora é só colocar mais um digito na frente para atribuir uma permissão especial, chmod 4765 arquivo.txt, vai atribuir as permissões de suid ao arquivo.

chmod 4765
su # vai para o modo root, precisa inserir a senha do root
vim arquivoShell.sh # vai abrir um arquivo no vim, precisa salvar depois

Conteúdo extra: compilando códigos no linux

Linguagem C/C++

sudo apt install gcc

Para compilar os códigos use:

gcc -o main arquivo.c
./main

O gcc é um compilador da linguagem C utilizado no linux, -o main indica o nome do arquivo de saída, o binário gerado, que vai se chamar main, arquivo.c é o seu arquivo com os códigos em C.

O ./main indica para executar o arquivo binário main que foi gerado ao compilar arquivo.

gcc

Código usado

#include <stdio.h>

int main(){
        int a = 10;
        int b = 5;

        int soma = a+b;

        printf("%d\n", soma);

        return 0;
}

O C++ funciona da mesma forma que o gcc, mas é chamado de g++, assim:

g++ -o main arquivo.cpp # arquivo em cpp por ser c++
./main

Linguagem Python

A linguagem Python por ser interpretada e não compilada você deve apenas executar o código, sem precisar gerar um binário, mas tenha o python3 instalado.

Instalando:

sudo apt install python3

Crie um arquivo em Python pelo vim.

Executando:

python3 arquivo.py
python3

Código usado:

a = 10
b = 5

soma = a+b

print(soma)

Agora sua missão é pesquisar como executar esse código em Golang no linux:

package main

import "fmt"

func main() {
    fmt.Println("Lista de números primos até o número 100. :D")
    limite := 100

    for num := 2; num <= limite; num++ {
        soma := 0
        for i := 1; i <= num; i++ {
            if num % i == 0 {
                soma++
            }
        }
        if soma == 2 {
            fmt.Println(num)
        }
    }
}

Utilize esse site e compile o código acima na sua máquina linux utilizando o vim ou nano.

Bibliografia

Last updated