segunda-feira, 28 de agosto de 2023

GIMP: um editor de imagens poderoso e acessível

GIMP 2.10 imagem do aplicativo carregando.

O GIMP, ou GNU Image Manipulation Program, é um editor de imagens de código aberto e gratuito que se tornou muito popular. O software de código aberto é baseado no princípio de que o código-fonte deve estar disponível para que todos possam verificar sua qualidade e segurança.

Ele foi desenvolvido pela primeira vez em 1995 por Spencer Kimball e Peter Mattis, dois estudantes da Universidade da Califórnia, Berkeley. O GIMP foi originalmente projetado como um substituto gratuito e de código aberto para o Adobe Photoshop.

Interface de Utilizador do aplicativo GIMP:

Interface de Utilizador do GIMP, a forma como se apresenta logo após o arranque.

Interface de Utilizador do aplicativo GIMP com uma nova imagem criada, ainda em branco:

Interface de Utilizador do GIMP com uma imagem em branco aberta.

Sendo o Gimp uma ferramenta poderosa com uma ampla gama de recursos semelhante ao Adobe Photoshop, isto fez com que aumentasse a sua popularidade.

O GIMP pode ser usado para tarefas básicas, como cortar, redimensionar e ajustar o brilho e o contraste de uma imagem, bem como para tarefas mais avançadas, como retoque fotográfico, desenho digital e pintura. O GIMP também tem uma ampla variedade de filtros e efeitos que podem ser usados para dar às imagens um acabamento único.

Todas essas funcionalidades fizeram com que atraísse a atenção de fotógrafos, designers gráficos, artistas e utilizadores casuais como alternativa para criar, manipular e editar imagens. Ele também pode ser usado para criar gráficos vetoriais, como logotipos e ilustrações.

Imagens criadas em GIMP têm a extensão .xcf e podem ser exportadas em outros formatos como .png, .webP, .jpeg e outros.

Há também a possibilidade de adicionar novas funcionalidades ao GIMP através de plugins.

Os plugins são pequenas extensões que podem ser adicionadas ao aplicativo para obter novas funcionalidades. Eles podem ser usados para adicionar novos filtros, ferramentas, brushes, e muito mais

Sites onde se pode baixar plugins:

  • GIMP Plugins website: Neste website tem uma coleção de plugins para o GIMP criados pelos desenvolvedores do aplicativo.

  • GIMP Fórum: O fórum do GIMP é uma comunidade onde usuários podem discutir, aprender sobre o GIMP e partilhar plugins.

Esta é a Interface de Utilizador do aplicativo GIMP com uma imagem aberta para edição:

Interface de Utilizador do GIMP com uma imagem aberta.

O GIMP está disponível para Windows, macOS e Linux e pode ser baixado do Site Oficial do GIMP

Para usuários da maior parte dos sistemas Linux, o GIMP pode ser instalado a partir do Centro de Software da sua distribuição.

Aqui estão alguns dos recursos do GIMP:

  • Suporte para uma ampla variedade de formatos de imagem, incluindo JPEG, PNG, TIFF, GIF e RAW

  • Uma interface de usuário personalizável

  • Uma ampla gama de ferramentas e filtros

  • Suporte para camadas, máscaras e canais alfa

  • Suporte para pinceladas, formas e texto

  • Suporte para animação

  • Suporte para impressão

O GIMP é uma ferramenta poderosa e versátil que pode ser usada para uma variedade de tarefas. É uma ótima escolha para quem deseja criar e editar imagens, mas não quer gastar dinheiro com um software comercial.

Considero ético que quando se usa um software livre para fins comerciais, deve-se considerar a possibilidade de doar um certo montante àqueles que estão por detrás do projecto ajudando assim na continuidade e melhoria do mesmo.

Doar não é obrigatório, o utilizador pode usar o software gratuitamente sem nehum encargo mas se queres apoiar o projecto com uma doação é só ir até ao Site Oficial do GIMP e clicar no menu DONATE.

Se ainda não chegaste a experimentar o GIMP, aproveite para explorar a sua potencialidade editando ou criando nele as tuas imagens.

segunda-feira, 21 de agosto de 2023

A especial forma de copiar e colar texto no editor Vim

Copiar e colar no editor Vim, imagem com documentos simbolizando cópiar e colar.

Esta é uma das razões pelas quais adoro o editor Vim, a praticidade da funcionalidade para copiar e para colar o texto copiado.

Para copiar usamos a tecla y (yank) e para colar o texto copiado usamos a tecla p (put). Para quaisquer destas operações temos de estar em modo normal. O editor Vim inicia-se como padrão em modo normal.

Outros modos comuns são o modo insert, modo de linha de comando e modo visual.

Para nos certificarmos de que nos encontramos em modo normal, modo no qual devemos estar ao copiar ou colar texto, premimos a tecla <ESC>

Desde que se saiba como movimentar o cursor num documento: mudar de linha, retroceder e avançar numa linha, ir até uma determinada linha no texto, avançar um determinado número de palavras e assim por diante, entender como funciona o copy paste em Vim torna-se mais fácil.

Se ainda não faz ideia em como navegar o cursor no editor vim, aconselho que dê uma olhada neste artigo: Navegar no editor Vim

Imagem do post

Entender a lógica de navegação no editor Vim é de extrema importância para quem quer aprender o essencial. Depois de se sentir mais confortável com o básico então já estaremos em condições de dar o próximo salto.

Alguns comandos para copiar texto estando em modo normal

Tabela 1:   Alguns dos comandos para copiar texto no editor Vim:
ComandoFunção
yl ou (x)Copia o caractere encima do qual o cursor se encontra.
yh ou XCopia o caractere à esquerda do qual o cursor se encontra.
ywCopia uma palavra.
y2wCopia duas palavras seguidas.
y5wCopia cinco palavras seguidas.
y$Copia desde a posição inicial do cursor até ao final da linha.
y0Copia desde a posição inicial do cursor até ao início da linha.
yyCopia uma linha inteira, estando o cursor em qualquer ponto da linha que se quer copiar.
2yyCopia duas linhas seguidas, estando o cursor em qualquer ponto da linha onde se executa o comando.
yggCopia tudo, desde o ponto onde se encontra o cursor até ao início do documento.
yGCopia tudo, desde o ponto onde se encontra o cursor até ao fim do documento.

Agora compare com a tabela 2, o processo é igual copiar ou apagar, só o comando é que muda de y (yank) para d (delete)

Tabela 2:    Alguns dos comandos para apagar texto no Vim:
ComandoFunção
dl ou xApaga o caractere encima do qual o cursor se encontra.
dh ou XApaga o caractere à esquerda do qual o cursor se encontra.
dwApaga uma palavra.
d2wApaga duas palavras seguidas.
d5wApaga cinco palavras seguidas.
d$Deleta desde a posição inicial do cursor até ao final da linha.
d0Apaga desde a posição inicial do cursor até ao início da linha.
ddApaga uma linha inteira, estando o cursor em qualquer ponto da linha que se quer apagar.
2ddApaga duas linhas seguidas, estando o cursor em qualquer ponto da linha onde se executa o comando.
dggApaga tudo, desde o ponto onde se encontra o cursor até ao início do documento.
dGApaga tudo, desde o ponto onde se encontra o cursor até ao fim do documento.

Podemos concluir que as acções atrás referidas, copiar e apagar, têm muito a ver com a navegação do cursor no texto: o movimento.

A propósito, ao darmos o comando para copiar ou apagar, a porção do texto copiado ou apagado fica no que é chamado de "unnamed register" do editor Vim (registo anónimo) e o comando 'p' cola o texto apagado ou copiado num outro local do mesmo documento. Se copiarmos um texto e em seguida deletarmos uma parte de texto no documento, se dermos o comando 'p', a porção de texto que será colada será a porção que foi deletada porque ela sobrescreve a cópia anteriormente feita.

Tabela 3:    Copiar apagar e colar texto no editor Vim, diferença com a forma mais comum:
OperaçãoForma comumForma Vim
Copiar CTRL + c yank (y)
Cortar CTRL + x delete (d)
Colar CTRL + p put (p)

Vamos então experimentar?

Lista de tarefas:
  1. Copiar uma linha de texto.

  2. Colar essa linha de texto uma linha abaixo.

  3. Colar essa linha de texto uma linha acima.

  4. Colar essa linha de texto 5 linhas abaixo.

  5. Copiar uma palavra.

  6. Colar a palavra copiada logo a seguir.

  7. Colar a palavra copiada no final da linha.

  8. Copiar texto a partir de um determinado ponto e colar logo a seguir a última linha de texto no documento.

  9. Colar a porção do texto copiado 3 linhas abaixo.

  10. Colar a porção do texto copiado 5 linhas acima.

Experimente usar os comandos 'yank' (y) e 'put' (p) para copiar e colar texto em um arquivo no Vim editor.

Em caso de querer desfazer alguma acção (undo), estando em modo normal prima a tecla 'u'.

Em caso de querer refazer alguma acção (redo), estando em modo normal prima a tecla <CTRL> + r.

Exemplos levando em conta a Lista de tarefas logo acima:
  1. Pressione `yy` para copiar a linha de texto atual, a linha onde o cursor se encontra.

  2. Pressione `p` e o texto copiado é colado na linha abaixo do cursor.

  3. Para colar o texto acima da linha onde se encontra o cursor será só usar P maiúsculo.

  4. Para colar essa linha de texto 5 linhas abaixo: comando j5p.

  5. Para copiar uma palavra: posicione o cursor encima do primeiro caractere da palavra que se quer copiar e depois dê o comando yw.

  6. Para colar a palavra copiada logo a seguir, dê o comando 'p', poderá ser necessário inserir o espaço e para isso é só entrar em insert mode premindo a tecla 'i' estando com o cursor encima do primeiro caractere da palavra colada e premir tecla <SPACE>.

  7. Para colar a palavra copiada no final da linha, navegamos até ao final da linha comando '$' e em seguida teclamos 'p'.

  8. Para copiar texto a partir de um determinado ponto, navegamos com o cursor até ao ponto a partir do qual queremos copiar e damos o comando 'y$' para copiar desse ponto até ao final da linha ou desse ponto até ao início da linha com o comando 'y0'. Para colar a porção de texto logo após a última linha de texto no documento use o comando <SPACE> + g, (G) para navegar até ao final do texto e em seguida prima a tecla 'p'.

  9. Para colar a porção do texto copiado 3 linhas abaixo. Usamos o comando '3j' para nos posicionarmos 3 linhas abaixo e em seguida damos o comando 'p'.

  10. Para colar a porção do texto copiado 5 linhas acima usamos o comando '5k' para navegarmos 5 linhas acima e damos o comando 'p' para colar o texto.

Experimente usar cada um dos comandos da tabela 2 num texto aberto no editor Vim e use 'p' logo de seguida. Verás que ao deletarmos uma parte de texto essa parte de texto fica no registo e pode ser colado onde acharmos necessário.

Como podemos ver, a forma mais comum de copiar, deletar e colar no editor Vim é simples se soubermos como navegar o cursor no documento. À medida que formos praticando tudo parece ainda mais natural e vamos tomando gosto em usar este maravilhoso editor de texto.

Alguns posts relacionados:

segunda-feira, 14 de agosto de 2023

O que é umask e como usá-lo em Linux?

Head-post-image

Índice de conteúdo:

  1. Algumas palavras sobre umask
  2. Vamos experimentar como funciona?
  3. Alteração permanente do umask a nível do usuário comum

Algumas palavras sobre umask

O comando umask (User File Creation Mask) é usado para definir as permissões padrão para arquivos e diretórios a serem criados em sistemas Linux. Este comando só afeta arquivos e directórios recém-criados, portanto, os previamente existentes mantêm-se com as mesmas permissões antes definidas.

O umask é uma ferramenta que pode ajudar a reforçar a segurança. Ao definirmos um umask mais restritivo reduzimos as possibilidades de utilizadores não autorizados acessarem os nossos arquivos.

É claro que podemos criar os ficheiros e depois alterar as permissões, mas a aplicação do umask facilita a tarefa.

Imagine que vamos criar dez ficheiros nos quais queremos que só o dono do ficheiro tenha permissões de leitura e escrita e não queremos que grupos e outros tenham quaisquer permissões. Precisamos neste caso aplicar as permissões 600, forma numérica de permissões que dá ao dono do arquivo as permissões de leitura e escrita e ao grupo e outros são retiradas todas as permissões, o que corresponde a rw------- na representação simbólica de permissões.

Mas sabemos que temos um umask padrão de 0022, criando os dez ficheiros com esse padrão resultaria na autorização de leitura e escrita para o proprietário dos arquivos e permissão de leitura para o grupo e outros, pelo que os ficheiros teriam as permissões 644, e não é isso que queremos, mas como os ficheiros foram criados com permissões 644 terão de ser alterados para 600 usando o comando chmod 600 nomeDosFicheiros, imaginas o trabalho de usar o chmod (Change mode) em cada um dos ficheiros ou directórios criados?

Neste caso, todo o trabalho nos é facilitado ao definirmos o umask 0023 e a partir dele criar os nossos dez ficheiros.

O umask definido no terminal onde nos encontramos só funciona nesse terminal e não tem caráter permanente. Para que uma nova definição do umask seja permanente deverá ser acrescentada ao ficheiro .bashrc.

A ideia é: Estando num terminal, precisamos criar cinco ficheiros com o mesmo padrão de permissões, como sendo 600, definimos o umask para esse padrão; precisamos agora criar oito directórios com um novo padrão de permissões, por exemplo o 775 (leitura, escrita e execução para o proprietário dos directórios; leitura, escrita e execução para o grupo ao qual os directórios pertencem e só leitura e execução para todos os outros) redefinimos o umask para esse novo padrão.

As permissões completas para arquivos são 666, o que dá permissões de leitura e gravação ao proprietário, grupo e outros usuários.

As permissões completas para directórios são 777 e concedem permissões de leitura, gravação e execução ao proprietário, grupo e outros usuários. São completas porque concedem todas as permissões em grau de igualdade para todos os usuários do sistema.

O valor umask é determinado quando o valor das permissões efetivas dos novos arquivos é subtraído do valor das permissões completas do arquivo.

Normalmente, quando criamos um novo diretório ou um novo arquivo, as permissões aplicadas nos diretórios ou arquivos criados são as permissões predefinidas e costumam ser: 755 para diretórios e 644 para arquivos. Isso acontece dado a definição padrão do modo umask que neste caso é 0022.

0022+0755 = 777 e 777 representa as permissões plenas dos directórios.

0022+0644 = 666 e 666 representa as permissões plenas dos arquivos.

Permissões plenas em arquivos e directórios
  • 777 rwxrwxrwx para directório
  • 666 rw-rw-rw- para arquivo
Relação umask, permissões definidas e permissões plenas
  • 0022 + 755 = 777 777 representa as permissões plenas de directório
  • 0022 + 644 = 666 666 representa as permissões plenas de arquivo
Explicação da relação do umask com as permissões desejadas e com as permissões plenas.
Permissões 755 aplicadas num directório e o que conferem a cada utilizador do sistema
  • Poprietário do directório - pode ler, editar e executar o diretório.
  • Membros do Grupo do directório - podem ler e executar o diretório.
  • Todos os outros usuários - podem ler e executar o diretório
Permissões 644 aplicadas num arquivo e o que conferem a cada utilizador do sistema.
  • Poprietário do arquivo: - pode ler e editar o arquivo..
  • Membros do Grupo do arquivo - podem ler o arquivo.
  • Todos os outros usuários - podem ler o arquivo
Tabela nº 1 - Relação entre o valor do umask e as permissões efectivas
Num directório as permissões plenas são 777 rwxrwxrwx
Permissões Subtração Valor modo de Umask
777 777 - 777 0000
764 777 - 764 0013
755 777 - 755 0022
754 777 - 754 0023

Tabela nº 2 - Relação entre o valor do umask e as permissões efectivas
Num ficheiro as permissões plenas são 666 rw-rw-rw-
Permissões Subtração Valor modo de Umask
666 666 - 666 0000
662 666 - 662 0004
644 666 - 644 0022
600 666 - 600 0066

Vamos experimentar como funciona?

Lista de tarefas para o experimento:
  1. Vamos saber qual o umask predefenido no nosso sistema.
  2. Vamos criar cinco directórios com essa predefinição do umask
  3. Abrimos um terminal ao qual vamos chamar terminal 1 e alteramos o modo umask, e no mesmo terminal criamos os directórios. Queremos que os novos directórios criados tenham as permissões 700. Queremos dar permissões de leitura, escrita e execução para o proprietário dos directórios, para membros do grupo dos directórios e todos os outros nenhuma permissão.
  4. Criar 5 novos directórios com a nova umask
  5. Criar 5 novos ficheiros com a nova umask
  6. Abrir outro terminal ao qual vamos chamar de terminal 2 e criar 5 novos directórios

1 - Saber qual o umask predefenido no nosso sistema

O comando umask tem esta forma:

umask [-p] [-S] [mode]

A opção -p printa o valor do modo atual do umask. Na imagem abaixo vemos que esse modo predefinido é 0022.

Comando umask com a opção -p

A opção -S printa o valor do umask em forma de notação simbólica

Comando umask com a opção -S

E se fizermos um teste como usuário root?

Comando umask como usuário root

2 - Vamos criar cinco directórios com essa predefinição do umask

Primeiro nos informamos de qual umask está como predefinido e criamos 5 directórios no terminal atual que vamos chamar de terminal-1.

testa qual umask está como predefinido e cria directórios com o umask predefinido

No meu caso vemos que os directórios foram criados com as permissões padrão do sistema 0022 e isto também poderá ser o teu, caso não tenha havido redefinição do umask padrão.

3 - Vamos alterar o modo umask no mesmo terminal no qual nos encontramos.

O argumento mode especifica o valor desejado do umask. Aqui redefinimos o modo padrão para 0077.

Comando umask com o argumanto do umask desejado
Comando umask com o argumanto do umask desejado

4 - Criar cinco novos directórios com a nova umask

Redefinimos o umask 0077 neste terminal e criamos cinco directórios.

Altera umask e cria directórios com o novo umask e lista directŕios criados

5 - Criar cinco novos ficheiros com a nova umask

Com o mesmo umask 0077 neste terminal, criamos cinco ficheiros que terão o nome de: teste__umask-007__terminal-1__n.txt.

Criados também ficheiros com o umask 0077

Abrir outro terminal e criar cinco novos directórios

Abrimos um novo terminal ao qual vamos chamar de terminal-2 e criamos cinco directórios que terão o nome de: teste__umask-007__terminal-2__n.

Abre outro teminal e cria novos directórios para testar se a alteração do umask continua prevalecendo.

Podemos verificar pela imagem que os cinco directórios criados no terminal 2 têm outras permissões: 755, que dão permissões de leitura, escrita e execução para o proprietário do directório, para o grupo as permissões de leitura e execução e para todos os outros tabém leitura e execução. Isto é porque ao definirmos um novo modo umask no terminal anterior, terminal 1, o modo funciona só nesse terminal caso não editemos o ficheiro .bashrc e colocarmos ali um novo modo padrão e sendo assim os directórios criados no terminal 2 têm as permissões definidas pelo modo padrão umask 0022 que é o actual modo padrão do sistema.

Alteração permanente do umask a nível do usuário comum

A definição do umask que fizemos anteriormente só funciona na sessão do terminal no qual nos encontramos. Não tem efeito permanente porque ao fecharmos o terminal a definição do umask que tínhamos feito. desaparece

Para que tenha efeito permanente temos que adicionar essa definição do umask no ficheiro .bashrc.

Vamos iniciar este teste?

Para adicionarmos um novo umask padrão.
  • Abrimos o ficheiro .bashrc - num editor de texto, vou usar o editor Vim
  • Inserimos o mode do umask - que pretendemos passe a ser o modo padrão.
  • Gravamos a alteração e saimos do editor Vim
  • Para que as alterações passem a ser efetivas no mesmo terminal, fazemos o reload do ficheiro .bashrc nesse terminal source ~/.bashrc , mas se abrirmos um novo terminal e darmos o comando umask vemos a alteração efetuada.

Verificamos em primeiro lugar qual umask temos como padrão

Verificando o umask default antes de alterar para um outro.

Abrimos o ficheiro .bashrc no editor Vim

$ vim .bashrc
Abrindo o ficheiro .bashrc no editor Vim
  1. Navegamos com o cursor até o final do documento usando as teclas <Shift> + g (G)
  2. Entramos em modo de inserção de texto: tecla i
  3. Na última linha inserimos a nova definição do umask padrão 0077, conferindo as permissões de leitura, escrita e execução para o proprietário do arquivo e nenhuma permissão para grupo e outros.
  4. Feita a alteração, voltamos ao modo normal do editor Vim premindo a tecla <Esc>
  5. Guardamos as alterações feitas e saimos do editor Vim: comando :wq
Editando o ficheiro .bashrc introduzindo um novo padrão para umask o que será 0077, conferindo as permissões de leitura, escrita e execução para o proprietário do arquivo e nenhuma permissão para o grupo do arquivo e todos os outros.
Verificando o umask default após alterar para um outro, aida continua o mesmo por estarmos no mesmo terminal.
Verificando o umask default após alteração para um outro no mesmo terminal e desta vez a alteração feita aparece que é o umask 0077. Isto porque foi feito o reload do .bashrc neste terminal com o comando 'source ~/.bashrc'.

Chegamos ao fim de mais um post, desta vez abordando permissão padrão de ficheiros e directórios. Falamos sobre comando umask (User File Creation Mask) e a forma de mudar as definições do modo padrão usando esse comando como usuário normal no nosso sistema.

Espero que este post tenha acrescentado algo mais ao que até este momento sabias. Se já tinhas conhecimento do umask, também espero que haja algo por aqui que sirva para refrescar a memória.

Falando em permissões, caso seja também do teu interesse:

Índice de conteúdo:

  1. Algumas palavras sobre umask
  2. Vamos experimentar como funciona?
  3. Alteração permanente do umask a nível do usuário comum

segunda-feira, 7 de agosto de 2023

Permissões especiais em Linux: SUID - SGID - Sticky bit

head-post-image, sticky bit

Índice de conteúdo:

  1. Breve referência sobre Permissões
  2. Permissões especiais
  3. Permissão especial SUID
  4. Permissão especial SGID
  5. Permissão especial sticky bit

Faremos uma referência sobre a forma mais comum de atribuir permissões em Linux e de seguida abordaremos a forma de atribuir permissões especiais.

Breve referência sobre Permissões

Há duas formas principais de atribuir permissões, neste blog existem dois artigos que falam sobre isso. Caso seja do teu interesse, dê uma olhada.
  1. Permissões em Directórios e Ficheiros em Linux - Forma Simbólica
  2. Permissões em Linux - Forma Numérica

Permissões Simbólicas

As permissões dizem-se em modo simbólica quando níveis de usuários e permissões são representados por letras.

A forma u g o para se referir ao nível de utilizador.
  • u - user, usuário
  • g - group, grupo
  • o - others, outros
A forma r w x para se referir às permissões atribuídas a cada nível de utilizador.
  • r - read, leitura
  • w - write, escrita
  • x - execute, execução
Permissões em forma simbólica

Permissões Numéricas

As permissões de ficheiro em Linux são numéricas quando usam a forma octal de representação de 0 a 7.

Na forma numérica as permissões são representadas por três dígitos, sendo que cada dígito da esquerda para a direita corresponde ao usuário, grupo e outros respectivamente. Ex: a permissão 755 dá permissão de leitura, escrita e execução para o usuário, para o grupo de usuários dá permissão de leitura e execução e para os outros a permissão de leitura e execução. A permissão 750 mantém as mesmas permissões para o usuário e para o grupo mas retira todas as permissões aos outros.

A forma 4 2 1 para se referir às permissões atribuídas a cada nível de utilizador. Pode-se criar permissões combinadas somando esses números.
  • 4 - read, leitura
  • 2 - write, escrita
  • 1 - execute, execução
  • 0 - retira permissões
  • 3 = 2 + 1 = escrita + execução
  • 5 = 4 + 1 = leitura + execução
  • 6 = 4 + 2 = leitura + escrita
  • 7 = 4 + 2 + 1 = leitura, escrita e execução

Permissões especiais

As permissões especiais representam um quarto nível de acesso, além de usuário, grupo e outros e são uma forma de controlar o acesso a arquivos e directórios. São chamadas de permissões especiais porque permitem privilégios adicionais sobre o conjunto de permissões padrão.

Existem três permissões especiais:
  • Set User ID (setuid) - quando aplicada a um ficheiro executável, permite que o ficheiro seja executado com as permissões do usuário proprietário ao invés das permissões do usuário que o executa. Setuid funciona a nível de usuário e tem uma grande utilidade na execução de programas que requerem privilégios elevados, como o sudo.
  • Set Group ID (setgid) - pode ser também aplicada a um arquivo executável a nível do grupo proprietário e permite que um arquivo seja acessado com as permissões do grupo ao qual ele pertence ao invés das permissões do usuário que o acessa. Isso é útil para compartilhar arquivos entre usuários que fazem parte do mesmo grupo.
  • Sticky bit - impede que os usuários removam ou modifiquem arquivos em um diretório, a menos que tenham permissões de escrita no diretório. Isso é útil para proteger arquivos importantes, como o /tmp.
Tabela nº1 - Forma simbólica de atribuir permissões especiais
Permissões Especiais Descrição
chmod u+s nomeFicheiro Adiciona permissão especial SUID
chmod u-s nomeFicheiro Remove permissão especial SUID.
chmod g+s nomeFicheiro Adiciona permissão especial SGID
chmod g-s nomeFicheiro Remove permissão especial SGID
chmod o+t nomeFicheiro Adiciona permissão especial Sticky bit
chmod +t nomeFicheiro Adiciona permissão especial Sticky bit
chmod o-t nomeFicheiro Remove permissão especial Sticky bit
chmod -t nomeFicheiro Remove permissão especial sticky bit
chmod u+s,+t nomeFicheiro Adiciona permissão especial SUID e Sticky bit
chmod g+s,+t nomeFicheiro Adiciona permissão especial SGID e Sticky bit
Tabela nº2 - Forma numérica. A representação octal das permissões especiais de arquivo
Permissões especiais Descrição
0 Remove permissão especial sticky bit
4 Adiciona permissão especial setgid e sticky bit
2 Adiciona permissão especial setgid
1 Adiciona permissão especial sticky bit
Também podemos adicionar 4 2 e 1 como na forma numérica padrão para permissões
3 Adiciona permissão especial setuid
5 Adiciona permissões especiais setuid e sticky bit
6 Adiciona permissões especiais setuid e setgid
7 Adiciona permissões especiais suid, sgid e sticky bit

Na tabela nº 3 podemos ver a combinação da forma numérica de permissão especial e permissão padrão e como funciona em grupo de 4 dígitos, sendo que o primeiro corresponde à permissão especial, o segundo às permissões ao nível de usuário, o terceiro ao grupo e o quarto aos outros.

Tabela nº 3 - Permissão 755 casos com setuid, setgid e sticky bit
Permissões Descrição Output ls -l
0755 Sem nenhuma permissão especial drwxr-xr-x
4755 Com permissões especiais setgid e sticky bit drwxr-sr-t
2755 Com permissão especial setgid drwxr-sr-x
1755 Com permissão especial sticky bit drwxr-xr-t
3755 Com permissão especial setuid drwsr-xr-x
5755 Com permissões especiais setuid e sticky bit drwsr-xr-t
6755 Com permissões especiais setuid e setgid drwsr-sr-x
7755 Com permissões especiais suid, sgid e sticky bit drwsr-sr-t
Lista de tarefas antes de avançarmos com os exemplos
  1. Vamos criar um directório em /home/ com o nome de Historias
  2. Vamos alterar as permissões de 755 para 775 dando assim ao grupo também a permissão de escrita.
  3. Vamos criar um grupo de contadores de histórias que terá o nome contadores-de-historias
  4. Vamos tornar o grupo contadores-de-historias proprietário do directório Historias criado em /home/
  5. Vamos criar um novo utilizador, um contador de histórias que terá conthist-1 como nome de usuário
  6. Vamos adicionar o usuário conthist-1 ao grupo contadores-de-historias

1 - Criamos o directório Historias

Criação do directório historias

2 - Alteramos as permissões de 755 para 775 no directório Historias

UID e GID do directório Historias

[administrador@fedora ~]$ ls -ln /home/ | grep Historias
drwxrwxr-x. 1    0  0  36 ago  4 19:06 Historias

3 - Criamos o grupo contadores-de-historias

GID de contadores-de-historias

[administrador@fedora ~]$ cat /etc/group | grep contadores-de-historias
contadores-de-historias:x:1012

4 - Atribuimos ao grupo contadores-de-historias a propriedade do directório Historias. Veja que antes o grupo proprietário era o group root.

UID e GID do directório Historias

[administrador@fedora ~]$ ls -ln /home/ | grep Historias
drwxrwxr-x. 1    0 1012  36 ago  4 19:06 Historias

5 - Criamos o usuário conthist-1

Criamos password para o usuário conthist-1

Verificamos a existência do usuário conthist-1

id conthis-1

UID e GID do usuário conthist-1

[administrador@fedora ~]$ cat /etc/passwd | grep conthist-1
conthist-1:x:1005:1005:contador-de-histórias-1:/home/conthist-1:/bin/bash

Para melhor entendimento de como as coisas se processam, analizemos esta imagem:

Imagem explicando as partes que compõem a indentificação do utilizador e o seu grupo no sistema.

Pela imagem vemos que o usuário tem o nome de conthist-1, tem um UID=1005, este número é-lhe atribuido no momento em que o utilizador é criado, também este utilizador já pertence a um grupo com o mesmo nome de usuário (grupo primário) e tem um GID=1005, o número de ID do grupo não tem que ser necessariamente igual ao número de ID do usuário nem também o nome do grupo do utilizador. Também o GID do usuário é criado pelo sistema no momento em que o usuário é adicionado a não ser que seja definido pelo Administrador do sistema.

Para vermos este tipo de informação sobre todos os utilizadores do sistema:

$ cat /etc/passwd

Para vermos este tipo de informação sobre um utilizador em especial, neste caso o conthist-1.

$ id conthist-1 ou

$ grep conthist-1 /etc/passwd
grep em utilizador conthist

6 - Adicionamos o usuário conthist-1 ao grupo contadores-de-historias

Para adicionar o usuário ao grupo contadores-de-historias:

# usermod -aG contadors-de-historias conthist-1

Para verificarmos quem se encontra no grupo contadores-de-historias:

# cat /etc/group | grep contadores-de-historias
informações sobre o usuário conthist-1

Permissão especial SUID

SUID significa definir ID do usuário na execução. É um tipo especial de permissão de arquivo que permite a um usuário executar um programa com as permissões do proprietário do arquivo, mesmo que o usuário que executa o programa não tenha essas permissões. É o caso de um usuário não root executar comandos com poderes como se fosse root do sistema. Isso pode ser útil para programas que precisam acessar recursos do sistema ou executar operações privilegiadas.

Pode-se ver se num determinado arquivo foi aplicado a permissão especial SUID pela existência de um s na posição onde normalmente se encontra a permissão de executar x.

Ex: Ao invés de rwx aparece na forma rws.

SUID (Define ID do usuário na execução), é uma permissão especial ao nível do usuário.

Tabela nº 4 permissão especial 3755, veja nos bits de permissão a nível de usuário no lugar onde normalmente existe um x se encontra um s
Permissões Descrição Output ls -l
3755 Com permissão especial setuid drws r-xr-x

Para alterarmos a permissão de um determinado arquivo usamos o comando chmod (change mode) mais a permissão que queremos atribuir mais o nome do arquivo. Neste caso estamos conferindo uma permissão especial 3 junto à permissão 775:

# chmod 3775 nome-do-arquivo

Podemos adicionar também o SUID desta forma:

# chmod u+s nome-do-arquivo

Analisemos o caso do executável passwd.

Neste executável foi aplicada uma permissão de execução especial como se pode verificar pela existência do s na posição onde normalmente se encontra o x no grupo de permissões do usuário proprietário.

O ficheiro executável pertence ao usuário root e também ao grupo root

A existência da permissão especial para execução permite com que um usuário que não seja root do sistema possa alterar a sua palavra-passe mesmo não sendo root, graças ao Set User ID on Execution (SUID).

ls -l em /bin/passwd

Ao darmos o comando passwd, logo de imediato cria-se um novo processo, não precisa redefinir password, isto é só para teste. Abrimos um novo terminal para podermos aceder a esse processo para análise.

Utilização do comando passwd para exemplificação

Aqui podemos ver quem iniciou o processo, comando top, vemos que o processo com id=13605 foi iniciado pelo usuário root.

Mostra o processo iniciado com o comando passwd usando o comando ps com a opção -ef, evidenciando o executor do processo como sendo o root

Uma forma mais directa de chegarmos a essa informação: comando ps -ef | grep passwd

Mostra o processo iniciado com o comando passwd usando o comando ps com a opção -ef, evidenciando o executor do processo como sendo o root

Vejamos o caso do executável sudo

Pode-se ver pelo comando abaixo onde listamos o ficheiro executável sudo, a existência de um s no espaço do bit correspondente a x no nível de acesso de usuário. Corresponde à permissão padrão deste executável.

A existência desse s significa que neste executável foi aplicada a permissão especial de execução SUID e isto permite com que um utilizador não root possa correr comandos com os poderes de root.

Pelo output do comando, vemos também que o ficheiro sudo pertence ao usuário root bem assim como ao grupo root.

Podemos também ver que o usuário administrador tem permissão para executar o ficheiro com poderes do usuário root por ter sido aplicado o SUID. Isso normalmente é feito no momento da instalação do sistema.

Comando ls -l no Ficheiro executável sudo.

Também no momento da instalação do sistema é criado o grupo wheel e o usuário administrador criado no momento da instalação é adicionado a este grupo.

Listando usuários pertencentes ao grupo wheel

Este usuário de nome administrador pode executar comando como root sem usar password do super usuário por se encontrar no grupo wheel.

Nisso podemos depreender que todo o usuário que fizer parte do grupo wheel poderá também executar comando com o mesmo poder do usuário root a não ser que sejam feitas agumas restrições.

Caso de estudo com o utilizador que acabamos de criar conthist-1

$ cat /etc/passwd | grep conthist-1

Vemos pela imagem extraída do /etc/passwd que o conthist-1 tem um UID=1005

Também um grupo com o mesmo nome do usuário conthist-1 e com o GID=1005

$ grep conthist-1 /etc/group

Vemos pela imagem extraída do /etc/group que o conthist-1 pertence no momento a dois grupos:

Um grupo com o mesmo nome do usuário conthist-1 e com o GID=1005

Também pertence ao grupo contadores-de-historias com o GID=1012

listando grupos referentes ao usuário conthist-1

Vamos fazer um teste?

  1. Vamos testar se o usuário conthist-1 tem permissão para executar programas com poderes de root.
  2. Para testar vamos nos logar como conthist-1
  3. Vamos correr o comando $ sudo dnf update como conthist-1

Logamos como conthist-1

$ su - conthist-1

A mensagem que recebemos ao darmos o comando sudo dnf update é: conthist-1 is not in the sudoers file. Portanto, a execução do comando nos é negada.

Não temos até agora permissão de execução de programas como root.

logado como conthist-1

Agora vamos fazer o serguinte:

  1. Se o usuário conthist-1 estiver ainda logado deverá terminar a sessão e logar de novo para que as alterações tenham efeito.
  2. Adicionamos o usuário conthist-1 ao grupo wheel.
  3. Para testar vamos nos logar de novo como conthist-1
  4. Vamos correr o comando $ sudo dnf update como conthist-1

Vamos em primeiro lugar verificar quem se encontra no momento no grupo wheel:

cat /etc/group com grep em wheel

Vemos que o único usuário que se encontra no grupo wheel até agora é o administrador.

Vamos adicionar o conthist-1 ao grupo wheel:

# usermod -aG wheel conthist-1
Adicionando o conthist-1 ao grupo wheel

Nova verificação de quem se encontra no grupo wheel:

Nova verificação de quem se encontra no grupo wheel após termos adicionado o desenvolvedor-1

Pode-se ver que o conthist-1 já se encontra no grupo wheel e agora vamos logar de novo como conthist-1

Agora o conthist-1 vai tentar atualizar o sistema:

O usuário conthist-1 já pode correr o comandos com poder de root.

Como vemos, o usuário conthist-1 já consegue executar comandos com poderes de usuário root sem que seja necessário a palavra-passe do root.

Isto acontece porque o conthist-1 ao correr o comando sudo, o seu UID passa a ser temporariamente o UID do usuário root que é o dono do ficheiro sudo e desse modo o conthist-1 consegue executar comando com os poderes do dono do ficheiro.

Comando ls -l no Ficheiro executável sudo.

Se quisermos remover o usuário conthist-1 do grupo wheel fazemos assim:

Removendo o usuário conthist-1 do grupo wheel

Permissão especial SGID

SGID é um bit de permissão especial que pode ser definido nos grupos. Quando definimos o SGID em um arquivo executável, ele permite que o usuário execute o arquivo com as mesmas permissões do grupo. A permissão SGID funciona como a permissão SUID, a única diferença é que o SGID é definido no grupo.

O SGID permite que um arquivo seja criado com a propriedade de grupo do proprietário do arquivo. Isso geralmente é usado para diretórios compartilhados, que são diretórios criados com a intenção de facultar a permissão de escrita para todos os membros do grupo.

SGID significa definir ID do grupo na execução, quer isto dizer que sendo um usuário não proprietário do arquivo, durante o período de execução passa a ser o proprietário até ao final da execução, o GID do usuário que executa o arquivo para a ser durante a execução o GID do grupo proprietário.

Tabela nº 5 permissão 755 caso com setgid
Permissões Descrição Output ls -l
2755 Com permissão especial setgid drwxr-sr-x

Vamos fazer um teste?

Logamos no sistema como usuário conthist-1 e criamos um directório com o nome de contos-1

Pela imagem vemos que o directório foi criado e tem como uid o conthist-1 e como grupo ou gid também o conthist-1

Aplicamos a permissão especial SGID ao directório Historias.

# chmod g+s /home/Historias

Atenção agora ao s que aparece no espaço onde normalmente se encontra o x ao nível do grupo.

Esse s significa que a permissão especial SGID foi aplicada e que de agora em diante todo o directório ou ficheiro criado por um elemento do grupo nesse directório passará a ter o GID do grupo.

O usuário conthist-1 cria uma nova pasta desta vez com o nome de contos-2, agora podemos ver a diferença relativa ao grupo proprietário da pasta criada. Tem como usuário proprietário o conthist-1 mas o grupo proprietário já não é conthist-1 como antes, mas sim o grupo proprietário do directório Historias que é o grupo contadores-de-historias pelo que se pode verificar na imagem logo a seguir.

Permissão especial sticky bit

Sticky bit é uma permissão especial que se pode aplicar a ficheiros e directórios em Linux com o objetivo de proteger ficheiros ou directórios pertencentes a um determinado utilizador de serem apagados, renomeados ou editados por outro utilizador não proprietário dos mesmos. Esta permissão é muito útil quando aplicada a directórios compartilhados por vários usuários, pois permite que apenas o proprietário ou o usuário root crie e edite arquivos em um determinado directório.

O sticky bit permite ao grupo proprietário de um determinado directório de usufruir de privilégios especiais ao criar novos ficheiros ou directórios dentro desse mesmo directório.

Vejamos o caso do /tmp

Para prevenir que um utilizador apague acidentalmente ficheiros dos quais não é proprietário nesse directório, foi aplicada a permissão especial sticky bit e assim só o dono do ficheiro ou o usuário root têm permissão de apagar. O t minúsculo existente no final do bloco das permissões do /tmp indica que sticky bit está definido.

O sticky bit é mais usado em directórios compartilhados.

O caso do /tmp e a respectiva permissão especial sticky bit

Vamos fazer um teste?

  1. Criaremos um novo utilizador, outro contador de histórias que terá o nome de usuário de chist-1
  2. Adicionamos o usuário chist-1 ao grupo contadores-de-historias
  3. O usuário contador de histórias chist-1 quer ter uma pasta dentro do directório Historias onde colocará as suas próprias histórias e cria uma pasta com o nome historia-1
  4. O usuário chist-1 resolve apagar a pasta criada por conthist-1
  5. O administrador aplica a permissão especial sticky bit no directório Histórias
  6. Como o usuário chist-1 teve sucesso ao apagar o directório criado por conthist-1 tenta apagar o outro directório, o contos-2

Criamos mais um usuário desta vez com o nome chist-1

Adicionamos o usuário, chist-1 ao grupo contadores-de-historias

O usuário chist-1 loga no sistema e cria o directório historia-1 dentro do directório Histórias

O usuário chist-1 dá comando para apagar a pasta conto-1 criada por conthist-1 dentro do directório Histórias e consegue apagar o directório do outro usuário.

O Administrador aplica a permissão especial Sticky bit no directório Histórias

# chmod +t /home/Historias

Tendo o usuário chist-1 tido sucesso ao apagar o directório conto-1 criado por conthist-1, dá comando para apagar o outro directório pertencente ao conthist-1, mas desta vez não consegue porque a permissão especial Sticky bit previne essa acção pelo que se verifica pela mensagem: rm: impossível remover /home/Historias/conto-2: Operação não permitida

Falamos sobre permissões especiais SUID (Set User ID on Execution), SGID (Set Group ID on Execution) e Sticky bit. Falamos sobre forma simbólica e numérica de aplicação de permissões especiais, foram apresentados alguns exemplos que espero tenham servido de algum incentivo ao experimento.

Pessoalmente, acho o tema de permissões especiais em Linux muito interessante e oferecem muitas possibilidades. Um leitor me propôs este tema e como já tinha feito dois posts neste blog sobre permissões em Linux, achei esta proposta muito pertinente. Espero que você possa extrair algo de novo neste meu post.

Posts Relacionados:

Índice de conteúdo:

  1. Breve referência sobre Permissões
  2. Permissões especiais
  3. Permissão especial SUID
  4. Permissão especial SGID
  5. Permissão especial sticky bit
Documentação de apoio
  1. Red Hat Sysadmin
  2. Fedora Project Wiki
Contribuição especial do Google Bard com quem tive muitas conversas sobre o assunto e me ajudou a entender alguns conceitos.