Pode ser que já te cansaste com o nome que aparece associado ao teu directório home e ao teu terminal Linux, ou colocaste ali o nome no momento da instalação do sistema e queres agora altera-lo para outro
que no momento achas serve melhor para ti.
Recomendação:
O processo funciona, foi testado com sucesso em Fedora Linux Workstation 39, mas um backup é sempre bom.
Antes de iniciar as operações de alteração convém fazer um backup do diretório home do usuário, caso algo dê errado durante o processo de mudança.
As etapas
Vamos considerar que temos dois usuários no sistema: um usuário com o nome de "administrador" e outro com o nome de "desenvolvedor-2" o qual queremos mudar para "desenvolvedor".
Para que possamos fazer esta operação vamos entrar no sistema como administrador root usando uma conta já existente, aqui vou usar a conta de nome administrador, mas caso não houver outra conta poderá usar uma Live USB com Linux. Em seguida levamos a cabo os seguintes passos:
As alterações já foram feitas, agora vamos logar no sistema como usuário desenvolvedor:
[administrador@fedora ~]$ su - desenvolvedor Palavra-passe:
Já logado como usuário "desenvolvedor" listamos o conteúdo do directório /home para certificarmos das alterações efetuadas.
[desenvolvedor@fedora ~]$ ls -l /home/desenvolvedor/
Pelo output vemos que todas as alterações foram efetuadas.
drwxr-xr-x. 1 desenvolvedordesenvolvedor 0 jun 24 14:11 'Área de Trabalho'
drwxr-xr-x. 1 desenvolvedordesenvolvedor 66 jul 17 20:36 Documentos
drwxr-xr-x. 1 desenvolvedordesenvolvedor 0 jun 24 14:11 Imagens
drwxr-xr-x. 1 desenvolvedordesenvolvedor 0 jun 24 14:11 Modelos
drwxr-xr-x. 1 desenvolvedordesenvolvedor 0 jun 24 14:11 Música
drwxr-xr-x. 1 desenvolvedordesenvolvedor 0 jun 24 14:11 Público
drwxr-xr-x. 1 desenvolvedordesenvolvedor 0 jun 24 14:11 Transferências
drwxr-xr-x. 1 desenvolvedordesenvolvedor 0 jun 24 14:11 Vídeos
[desenvolvedor@fedora ~]$
Com isto concluimos a alteração do nome de login do usuário, bem como a alteração do nome do directório home e do grupo primário do mesmo para que possa condizer com o nome de login.
No mundo Linux, aliases são como atalhos mágicos que transformam sua experiência na linha de comando.
São como apelidos personalizados que você cria para comandos complexos ou frequentemente utilizados, permitindo que você os execute com apenas algumas teclas. Imagine a praticidade de digitar "ll" em vez de "ls -l" para listar seus arquivos de forma detalhada, ou simplesmente digitar "atualizar" em vez de "sudo dnf update" ou "sudo apt update && sudo apt upgrade" para atualizar seu sistema!
O que são Aliases
Em essência, aliases são sinônimos que nós criamos para comandos existentes. Você os define utilizando o comando alias, associando um nome curto e fácil de lembrar ao comando completo que deseja executar. Essa troca torna a digitação mais rápida e evita erros de digitação, otimizando seu tempo e produtividade.
Exemplo:
$ alias im="cd ~/Imagens"
Com o alias criado acima não precisamos de digitar "cd ~/Imagens" todas as vezes que queremos entrar no directório Imagens. Basta digitar "im" e pronto.
Para que servem
Os aliases servem para diversos propósitos, mas se destacam em três cenários principais:
Simplificar comandos complexos: Transforme sequências longas de comandos em atalhos fáceis de lembrar, como "limpar" para apagar a tela ou "bkp" para criar um backup rápido.
Automatizar tarefas repetitivas: Crie aliases para executar scripts, mover arquivos ou realizar ações frequentes com apenas um comando, economizando tempo e esforço.
Personalizar a experiência do shell: Adapte o ambiente da linha de comando à sua maneira, criando aliases que reflitam seu fluxo de trabalho e preferências.
Como criar Aliases
Existem duas maneiras principais de criar aliases no Linux:
Criação temporária:
Utilize o comando alias seguido do nome do alias, igualdade e o comando completo.
Exemplo:
$ alias ll="ls -l"
Esses aliases são válidos apenas na sessão atual do shell e serão perdidos ao fechar a janela.
Criação permanente:
Edite o arquivo de configuração do seu shell (~/.bashrc para Bash). Abra o arquivo num editor da sua preferência, pode ser no editor vim ou Vi.
Esse ficheiro faz parte de ficheiros escondidos no espaço /home/usuario e podem ser vistos com o seguinte comando:
$ ls -la ~
Para abrir o ficheiro no editor Vi ou Vim:
$ vi ~/.bashrc
Adicione as definições de alias no final do arquivo, seguindo a mesma sintaxe do método temporário.
Em caso de execução de mais de um comando num alias, separam-se os comandos com um ";".
17 # User specific aliases and functions 18 if [-d ~/.bashrc.d ];then 19 for rc in ~/.bashrc.d/*;do 20 if [-f"$rc"];then 21 . "$rc" 22 fi 23 done 24 fi 25 unset rc 26 27 # Personal aliases 28 alias ll="ls -l" 29 alias atual="sudo dnf update" 30 alias img="cd ~/Pictures; ls -l"
Salve o arquivo e recarregue a configuração do shell usando o comando:
$ source ~/.bashrc.
Processo alternativo
Podemos criar um ficheiro especificamente para nossos aliases pessoais.
Opção 1: Criar um ficheiro específico para aliases em /home/usuario
Como exemplo criamos um ficheiro no nosso espaço /home/usuario com o nome .simple_personal_aliases, pode ter um outro nome. Colocamos neste ficheiro alguns aliases, por exemplo: comandos que usamos numa base diária. Salvamos o arquivo.
Abrimos o nosso ficheiro ~/.bashrc e fazemos o source do nosso ficheiro recém criado: .simple_personal_aliases adicionando no final do ficheiro essa linha de shell script que aparece nesta imagem. Isto é para que o .bashrc saiba onde encontrar o ficheiro que acabamos de criar e carrega-lo em cada momento que abrimos um novo terminal.
Opção 2: Criar ficheiros específicos para aliases em /home/usuario/.bashrc.d
Neste caso os ficheiros criados são guardados em ~/.bashrc.d e o source dos ficheiros é garantido por .bashrc como se vê na imagem abaixo.
Dicas Extras
Utilize nomes de alias curtos, memoráveis e descritivos.
Inclua comentários nos seus aliases para facilitar a compreensão sempre que os comandos sejam longos e mais complexos.
Evite usar aliases para comandos simples ou já curtos.
Com os aliases, você transforma a linha de comando do Linux em uma ferramenta ainda mais poderosa e amigável. Domine essa técnica e desfrute de uma experiência de trabalho mais rápida, eficiente e personalizada!
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 aplicativo GIMP com uma nova imagem criada, ainda em branco:
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
Esta é a Interface de Utilizador do aplicativo GIMP com uma imagem aberta para edição:
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.
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.
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
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:
Comando
Função
yl ou (x)
Copia o caractere encima do qual o cursor se encontra.
yh ou X
Copia o caractere à esquerda do qual o cursor se encontra.
yw
Copia uma palavra.
y2w
Copia duas palavras seguidas.
y5w
Copia cinco palavras seguidas.
y$
Copia desde a posição inicial do cursor até ao final da linha.
y0
Copia desde a posição inicial do cursor até ao início da linha.
yy
Copia uma linha inteira, estando o cursor em qualquer ponto da linha que se quer copiar.
2yy
Copia duas linhas seguidas, estando o cursor em qualquer ponto da linha onde se executa o comando.
ygg
Copia tudo, desde o ponto onde se encontra o cursor até ao início do documento.
yG
Copia 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:
Comando
Função
dl ou x
Apaga o caractere encima do qual o cursor se encontra.
dh ou X
Apaga o caractere à esquerda do qual o cursor se encontra.
dw
Apaga uma palavra.
d2w
Apaga duas palavras seguidas.
d5w
Apaga cinco palavras seguidas.
d$
Deleta desde a posição inicial do cursor até ao final da linha.
d0
Apaga desde a posição inicial do cursor até ao início da linha.
dd
Apaga uma linha inteira, estando o cursor em qualquer ponto da linha que se quer apagar.
2dd
Apaga duas linhas seguidas, estando o cursor em qualquer ponto da linha onde se executa o comando.
dgg
Apaga tudo, desde o ponto onde se encontra o cursor até ao início do documento.
dG
Apaga 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ção
Forma comum
Forma Vim
Copiar
CTRL + c
yank (y)
Cortar
CTRL + x
delete (d)
Colar
CTRL + p
put (p)
Vamos então experimentar?
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.
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.
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.
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?
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.
A opção -S printa o valor do umask em forma de notação simbólica
E se fizermos um teste 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.
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.
4 - Criar cinco novos directórios com a nova umask
Redefinimos o umask 0077 neste terminal e criamos cinco directórios.
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.
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.
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?
Verificamos em primeiro lugar qual umask temos como padrão
Abrimos o ficheiro .bashrc no editor Vim
$ vim .bashrc
Navegamos com o cursor até o final do documento usando as teclas <Shift> + g (G)
Entramos em modo de inserção de texto: tecla i
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.
Feita a alteração, voltamos ao modo normal do editor Vim premindo a tecla <Esc>
Guardamos as alterações feitas e saimos do editor Vim: comando :wq
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.
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
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.
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.
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.
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
1 - Criamos o 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 00 36 ago 4 19:06 Historias
Para melhor entendimento de como as coisas se processam, analizemos esta imagem:
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
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
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
drwsr-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).
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.
Aqui podemos ver quem iniciou o processo, comando top, vemos que o processo com id=13605 foi iniciado pelo usuário root.
Uma forma mais directa de chegarmos a essa informação: comando ps -ef | grep passwd
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.
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.
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
Vamos fazer um teste?
Vamos testar se o usuário conthist-1 tem permissão para executar programas com poderes de root.
Para testar vamos nos logar como conthist-1
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.
Agora vamos fazer o serguinte:
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.
Adicionamos o usuário conthist-1 ao grupo wheel.
Para testar vamos nos logar de novo como conthist-1
Vamos correr o comando $ sudo dnf update como conthist-1
Vamos em primeiro lugar verificar quem se encontra no momento no grupo 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
Nova verificação de quem se encontra no grupo wheel:
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:
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.
Se quisermos remover o usuário conthist-1 do grupo wheel fazemos assim:
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.
Vamos fazer um teste?
Criaremos um novo utilizador, outro contador de histórias que terá o nome de usuário de chist-1
Adicionamos o usuário chist-1 ao grupo contadores-de-historias
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
O usuário chist-1 resolve apagar a pasta criada por conthist-1
O administrador aplica a permissão especial sticky bit no directório Histórias
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.