Entendendo as Permissões Linux

  • Introdução

Fala linuxers, tudo em ordem? Bom, este é um artigo para quem está começando em nosso universo paralelo. Um assunto que creio eu ser de fundamental importância a todos que estão começando, sejam estes usuários de desktop, estudantes ou mesmo profissionais de TI, que estão conhecendo agora este ambiente, são as permissões, e como trabalhá-las da melhor forma possível, garantindo sempre ao máximo a segurança de nossos dados e arquivos pessoais. Isso te dará uma visão de porque às vezes dizem que Linux não pega vírus”, uma afirmação completamente errônea, e que pode causar estragos tremendos!!!! Mas está é outra história. Vejam como as permissões podem lhes ajudar no dia-a-dia:

  • Usuário desktop:

Como sabemos, o Linux é um sistema multiusuários, ou seja, você pode trabalhar com mais de um usuário sem precisar fechar sua sessão, ou mesmo dar um logout do seu usuário. Então você, seu irmão, sua mãe, irmã, enfim, cada um tem um usuário, saber trabalhar com permissões lhe ajudará com uma privacidade, onde cada usuário pode ver apenas suas informações/dados, definir até onde e o que cada um poderá ou não fazer, ou seja, cada um no seu quadrado! ;) 

  • Estudante:

Este é um geek, não é um profissional da área, porém visa a cada dia buscar novos conhecimentos, e este é um dos mais importantes assuntos a se dominar no Linux caso queira ser um administrador de sistema. Eu pelo menos costumo dizer que está é a base para se trabalhar com o Linux, então isso suprirá um pouco de sua sede por conhecimento e ao mesmo tempo, como se portar e como solucionar problemas que ocorrem diariamente com administradores de sistema Linux. 

  • Profissional de TI (Administrador de Sistemas):

Este é o que mais tem que dominar este assunto, pois um administrador de sistemas, manuseia este tipo de serviço quase que diariamente, e um bom conhecimento é o mínimo. Você sendo o administrador de sistema, com certeza trabalhará muito com grupos de usuários, e terá que implementar toda esta infra-estrutura, onde cada setor e cada membro funcionário deste setor não acesse arquivos ou documentos, de funcionários de outro setor, e estes outros funcionários não acessem aquele, e assim por diante. Falando assim até parece difícil né? Mas que nada, é bem simples, basta apenas tomar cuidado e prestar um pouco de atenção, ah claro isto no começo, depois vira sua segunda natureza.😉 Se está convencido de que as permissões são importantes, segue o conteúdo programado:

  • Visão geral –> Nesta seção será passado algo teórico, algumas nomenclaturas que usaremos ao decorrer do artigo e alguns exemplos de como o Linux trata as permissões;
  • Métodos de atribuição –> Aprenderemos a usar modos diferentes para inserção de permissão;
  • Umask –> Aprenderemos a definir um padrão de permissões para novos arquivos/diretórios em nosso sistema;
  • Permissões especiais –> Aprenderemos alguns outros tipos de permissões;
  • Um exercício de fixação –> Afim de fixar o que aqui foi passado.

Espero que gostem, e uma ótima leitura a todos.

  • Visão Geral

Aqui passarei a vocês uma visão geral sobre permissões. Mas em que sentido? Mostrarei como o Linux analisa um arquivo, quais as atribuições que vocês poderiam usar, o que é escrita, leitura, gravação e o que é uma permissão para um arquivo/diretório, isso falando-se em comandos. E apresentarei também um fluxograma para melhorar o entendimento de todos. Vamos lá? Um arquivo ou diretório no Linux:

Falando em permissão, o Linux analisa desta maneira um arquivo/diretório, visando os pontos que nos interessam:

Você é o que deste arquivo?

  • (u) é o dono, ou seja, quem criou o arquivo/diretório;
  • (g) diz a que grupo pertence o arquivo/diretório;
  • (o) não é dono e nem faz parte ao grupo, ou seja, ele é o excluído, o outro da história.😉

Permissões:

  • (rleitura, diz se o usuário poderá olhar o conteúdo de um arquivo/diretório;
  • (wescrita, diz se o usuário poderá gravar no arquivo/diretório, ou seja, fazer modificações, inserir dados, gravar arquivos em diretórios , enfim, modificar;
  • (xexecução, diz se o usuário pode executar uma tarefa;
  • () campo em branco ou sem nenhuma permissão, usa-se bastante em conjunto com o chmod para retirar uma permissão.

Falando-se em comandos, o que (r),(w) e (x) representam em arquivos/diretório?

E por último, olha só como o Linux percebe se você pode ou não executar uma tarefa.🙂

É algo bem simples de se entender não é? Espero que tenham entendido e tenham percebido como é simples este processo.

  • Alterando o dono/grupo de um arquivo

Esta é uma tarefa bem simples, mas que sempre está sendo usada. Muitas vezes precisamos implementar algum recurso novo ou mesmo uma nova funcionalidade em nosso sistema, porém como o Linux, é um sistema onde trabalhamos com diversos usuários, precisamos ter um controle, aí entram os donos e grupos de arquivos.🙂 Um exemplo, administro um sistema e implemento neste sistema um servidor de proxy, só que eu não cuidarei deste serviço, vou passar a outro cara, e para não lhe dar a senha de root, eu posso criar um usuário chamado squid, com o grupo squid, e dar todas as permissões para que ele possa executar seu serviço sem precisar da senha de root. Os comandos para alterar/trocar o dono/grupo de um arquivo são: chown e o chgrp. Basicamente ficaria assim sua execução:

# chown usuário:grupo arquivo

Onde “usuário” seria o usuário desejado, “grupo” o grupo desejado, e “arquivo” o arquivo desejado.

# chgrp grupo arquivo

A diferença é que neste comando mudamos apenas o grupo, acho que dispensa comentários. Vamos então para a prática. Crie um diretório onde achar melhor denominado grupos, e dentro do mesmo crie 3 arquivos, denominados teste1, teste2 e teste3

# cd /tmp
# mkdir grupos ; touch /grupos/teste{1,2,3}

Ok, vamos criar três grupos apenas para testes. Vocês podem criar os grupos que desejarem, eu criarei os grupos: maran, artigo, permissoes:

# groupadd maran
# groupadd artigo
# groupadd permissoes

Ok, grupos criados. Agora brincaremos de é meu, não é meu…Navegue até o diretório onde criou os arquivos, em meu caso:

# cd /tmp
# ls -l test*

Ok, agora vou mudar o dono e o grupo do arquivo teste1:

# chown root:maran teste1

Agora apenas o grupo do arquivo teste1:

# chgrp artigo teste1

Agora dos arquivos teste2 e teste3:

# chown root:maran teste2
# chown root:permissoes teste3
# ls -l test*

Simples não é?

  • Atribuição de permissão por soma ou subtração

Com o conceito do que é uma permissão e que efeitos elas surtem em um arquivo/diretório/script, veremos na prática como mudar/alterar/inserir uma permissão em dados de meu sistema. Existem 3 métodos possíveis, um que eu digo ser o da “soma e subtração”, pois analisaremos os arquivos e dependendo de sua necessidade inserir/retirar uma permissão, um método por atribuição direta, onde você já diz a permissão que o arquivo/diretório em questão assumirá e ainda temos o método octal, uma atribuição parecida com a direta. Neste primeiro exemplo veremos a “soma e subtração”. Vamos começar? Abra um terminal e crie uma pasta chamada permissões, pode ser no home de seu usuário ou em qualquer outro lugar que desejar.

# mkdir /home/maran/permissoes

Dentro deste diretório crie 6 arquivos, para mostrar de exemplo criaremos de permissao1 até o permissao6.

# touch permissao{1,2,3,4,5,6}.txt

Se você fizer uma listagem em seu diretório usando o:

# ls -l perm*

Devera ser retornado algo como:

-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao1.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao2.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao3.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao4.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao5.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao6.txt

Aqui dá para percebemos que todos os arquivos foram criados com as mesmas permissões né? Pois é, mas este assunto veremos ao final do artigo, não se preocupem. Logo percebemos que os arquivos tem as seguintes permissões:

  • Leitura e escrita para o dono do arquivos (root);
  • Leitura para o grupo (root);
  • Leitura para outros.

Então o método “soma e subtração” consistirá em que? Vamos a um exemplo: quero que o arquivo permissao1.txt tenha permissões de escrita, leitura e execução para o dono, leitura e escrita para o grupo e apenas leitura para outros. Primeiro eu analisarei quais são as permissões do arquivo:

# ls -l permissao1.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao1.txt

# chmod u+x,g+w permissao1.txt

Vejam: percebi que para o dono já existia a permissão de leitura e escrita, então apenas adicionei a execução (x), para o grupo a mesma coisa, percebi que já havia leitura, então adicionei a gravação(w) e outros já estava do jeito que queria vejam:

# ls -l permissao1.txt
-rwxrw-r– 1 root root 0 2008-08-16 11:16 permissao1.txt

Simples não é? Aqui para inserir ou retirar permissões usaremos as letras (r)(w) (x) como atributo de permissão, como foi mostrado na página “Visão geral”. Vamos a mais alguns exemplos então:

Agora digamos que eu queira que o arquivo permissao2.txt tenha permissão de escrita para o dono, leitura para o grupo, e escrita, leitura e gravação para outros.

# ls -l perm*
-rwxrw-r– 1 root root 0 2008-08-16 11:16 permissao1.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao2.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao3.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao4.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao5.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao6.txt

Eu analiso e concluo, que o processo seria efetuado da seguinte forma:

# chmod u-r,o+wx permissao2.txt

Retirei a permissão de leitura (r) do dono, o grupo já estava como queria, e para outros adicionei escrita e execução (w)(x).

# ls -l permissao2.txt
–w-r–rwx 1 root root 0 2008-08-16 11:16 permissao2.txt

Ok, está começando a ficar claro, vamos a mais dois exemplos apenas. Agora eu quero deixar as permissões do arquivos permissao1.txt como nenhuma permissão para o dono, apenas execução para o grupo, e leitura, escrita e execução para outros.

# chmod u-rwx,g-rw+x,o+wx permissao1.txt

O que foi feito, analisei o arquivo, retirei as permissões de escrita(w), leitura (r) e gravação(w) do dono, retirei leitura e escrita do grupo -(r)(w) e adicionei execução (x) e para outros adicionei leitura,escrita e execução (r)(w)(x). Vamos analisar e ver se deu certo:

# ls -l permissao1.txt
——xrwx 1 root root 0 2008-08-16 11:16 permissao1.txt

Um outro exemplo: quero zerar as permissões dos arquivos permissao1.txt e permissao2.txt.

# chmod u-rwx,g-rwx,o-rwx permissao[1-2].txt

# ls -l permissao[1-2].txt
———- 1 root root 0 2008-08-16 11:16 permissao1.txt
———- 1 root root 0 2008-08-16 11:16 permissao2.txt

Simples não é? Este é o método por “soma e subtração”, espero que tenha conseguido passar de uma maneira clara a vocês como utilizar este mecanismo. Bora para o próximo?😉

  • Atribuição Direta

Agora veremos o método por atribuição direta. Então no que consistirá este método? Em simplesmente já dizer diretamente qual será a permissão. Não entendeu? No método anterior analisamos as permissões que os arquivos já possuíam, e vimos se era preciso tirar alguma ou inserir outra, ou seja, nos analisamos para não ter problemas, ou a permissão não saía do jeito que queríamos. Vamos a prática que ficará mais claro o que quero dizer. Lembra-se dos arquivos que tínhamos criado? Então, continuaremos a trabalhar com eles. Navegue até a pasta onde havia criado os mesmos:

# cd /home/maran/permissoes

Vamos ver como está:

# ls -l perm*.txt
———- 1 root root 0 2008-08-16 11:16 permissao1.txt
———- 1 root root 0 2008-08-16 11:16 permissao2.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao3.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao4.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao5.txt
-rw-r–r– 1 root root 0 2008-08-16 11:16 permissao6.txt

Ok, do jeito que tínhamos deixado. A atribuição direta será da seguinte maneira. Digamos que eu queira deixar o arquivo permissao3.txt com leitura, escrita e execução para o dono, grupo e outros. Fica da seguinte maneira:

# chmod u=rwx,g=rwx,o=rwx

Entenderam do porque se diz atribuição direta? Pois já definimos:

u=valor,g=valor,o=valor
(valores possíveis: (r) leitura ;(w) escrita ; (x) execução; (—) vazia

Ou seja, direto, não importando as permissões que já estavam. Se eu quisesse apenas leitura:

u=r

Simples de tudo não é, este é meu método favorito. Faremos então alguns testes:

Quero que o arquivo permissao4.txt tenha permissão de execução para o dono, execução e leitura para o grupo e nada para outros.

# chmod u=x,g=rx,o=—

Veja se o mesmo consegue tal permissão:

# ls -l permissao4.txt
–w-r-x— 1 root root 0 2008-08-16 11:16 permissao4.txt

Perfeito!  Quero deixar todos os arquivos iniciados com permissão para, com poder de leitura, escrita e execução para dono, grupo e outros.

# chmod u=rwx,g=rwx,o=rwx perm*.txt

Resultado:

# ls -l perm*
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao1.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao2.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao3.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao4.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao5.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao6.txt

Bacana, porém agora quero zerar todas as permissões dos arquivos dentro da pasta /home/maran/permissoes:

# chmod -R u=—,g=—,o=— /home/maran/permissoes/*

O que foi feito? Eu disse para o chmod usar a recursividade, ou seja, tudo abaixo daquele diretório, isto foi obtido com a chave -R e com o wildcard(coringa) *. Vamos ver se funcionou:

# ls -l /home/maran/permissoes/*
———- 1 root root 0 2008-08-16 11:16 permissao1.txt
———- 1 root root 0 2008-08-16 11:16 permissao2.txt
———- 1 root root 0 2008-08-16 11:16 permissao3.txt
———- 1 root root 0 2008-08-16 11:16 permissao4.txt
———- 1 root root 0 2008-08-16 11:16 permissao5.txt
———- 1 root root 0 2008-08-16 11:16 permissao6.txt

É isso aí, aprendemos mais um método.😉 Vamos ao próximo então.

  • Atribuição octal

Chegamos ao último método de atribuição, neste usaremos valores octais em vez de passar as letras de cada permissão e a identificação de para quem seria (u)dono (g)grupo (o) outros. Mas como assim? Vou explicar, neste método a sintaxe do comando ficará da seguinte maneira:

chmod xxx caminho

O primeiro x será para o dono, o segundo para o grupo e o terceiro para outros: Onde x será um valor de 0 a 7, conforme mostra a figura abaixo:

Então vamos a um exemplo: Lembram dos arquivos criados em /home/maran/permissoes. Navegue até o diretório. Vejamos como está a situação:

# ls -l perm*
———- 1 root root 0 2008-08-16 11:16 permissao1.txt
———- 1 root root 0 2008-08-16 11:16 permissao2.txt
———- 1 root root 0 2008-08-16 11:16 permissao3.txt
———- 1 root root 0 2008-08-16 11:16 permissao4.txt
———- 1 root root 0 2008-08-16 11:16 permissao5.txt
———- 1 root root 0 2008-08-16 11:16 permissao6.txt

Perfeito, todas zeradas, vamos aos exemplos e a prática: Digamos que eu queira que o arquivo permissao1.txt tenha poderes de leitura, gravação e execução para o dono, leitura e execução para o grupo, e leitura para outros. Meu comando ficaria da seguinte forma:

# chmod 731 permissao1.txt
# ls -l permissao1.txt

-rwxrw-r– 1 root root 0 2008-08-16 11:16 permissao1.txt

Simples não é? Agora vamos deixar do permissao2 ao permissao4 com (r) e (x) para o dono,(w) para o grupo e (r) para outros.

# chmod 321 permissao[2-4].txt
# ls -l permissao[2-4].txt

-r-x-w-r– 1 root root 0 2008-08-16 11:16 permissao2.txt
-r-x-w-r– 1 root root 0 2008-08-16 11:16 permissao3.txt
-r-x-w-r– 1 root root 0 2008-08-16 11:16 permissao4.txt

Agora eu quero que todos os arquivos iniciados com perm tenham rwx (u)(g)(o):

# chmod -R 777 /home/maran/perm*

Ou se eu estiver no diretório onde se encontram estes arquivos:

# chmod -R 777 . perm*

Vamos ver:

# ls -l /home/maran/perm*

ou

# ls -l . perm*
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao1.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao2.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao3.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao4.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao5.txt
-rwxrwxrwx 1 root root 0 2008-08-16 11:16 permissao6.txt

É isso aí, assunto métodos de atribuição concluído!  Espero que tenha sido de fácil compreendimento de todos.🙂

  • Umask

Lembra quando criamos os arquivos permissao1 a permissao6? Eles foram criados com as mesmas permissões, assim como qualquer arquivo que você criar, isso é um fato. Vamos analisá-lo? Navegue em qualquer diretório, melhor, crie um novo diretório, pode ser como root, como usuário normal, tanto faz. Feito isso crie mais seis arquivos lá dentro. Ex:

# cd /tmp
# mkdir arquivos
# cd arquivos
# touch teste{1,2,3,4,5,6}

Ok, vamos ver como ficou isto:

# ls -l test*
-rw-r–r– 1 maran maran 0 2008-08-31 16:02 teste1
-rw-r–r– 1 maran maran 0 2008-08-31 16:02 teste2
-rw-r–r– 1 maran maran 0 2008-08-31 16:02 teste3
-rw-r–r– 1 maran maran 0 2008-08-31 16:02 teste4
-rw-r–r– 1 maran maran 0 2008-08-31 16:02 teste5
-rw-r–r– 1 maran maran 0 2008-08-31 16:02 teste6

Hummm, igualzinho não é? Isso acontece pelo fato de já estar definido em seu sistema como seriam as permissões para novos arquivos e diretórios. Mas como? Não defini nada, pois é, mas já definiram isso para você. O sistema automaticamente já vem configurado assim, por mero motivo de segurança, afim de evitar que outros usuário excluam seu arquivos e vice-versa, porém isto pode ser alterado e definido como você queira. Rodem em um terminal o comando:

# umask
0022 —–> Permissão para novos arquivos de todo sistema

Viram, ele definiu uma permissão de leitura para grupo e outros. Isso pode ser uma questão de segurança, para que não ocorra de alguém excluir/modificar ou sei lá, fazer o que quiser com um arquivo, por apenas participar do grupo. Essa é a permissão padrão de todas distribuições Linux. Legal, aí você me pergunta, e se eu precisar mudar isso, para que assim não tenha que sempre mudar? Esta é uma grande decisão, pois você pode alterar isto de duas maneiras:

  • Uma permanente e outra apenas provisória.

Mas como assim? Vamos lá, digamos que eu queira que no diretório /home/maran/aulas sempre sejam criados com -rw-rw—-. Eu viria como root e digitaria:

# umask 0227 /home/maran/aulas

Porém como cheguei a esta conclusão de que teria que ser 0227? Vamos entrar em outro assunto, chamado contagem de umask. Para que você saiba qual umask definir, não é algo muito complexo, existem pessoas que até criam seu próprio mecanismo ou programas (scripts) que tenham esta função. Você pega a permissão máxima que existe no Linux, que é rwxrwxrwx, ou em valor octal 777. Feito isso você subtrai pela permissão desejada:

777 —> Permissão máxima
550

Resultado:

0227

Simples né, porém você tem que ficar atento em algo, a umask para arquivos e diretórios tem “valores” diferentes. Como assim? Eu defini que teriam permissão rw rw — no diretório aulas, mas será que funcionou?

# umask 0227 /home/maran/aulas

Certo, agora criamos um arquivo:

# touch aula1.txt
# ls -l /home/maran/aulas

-rw-r–r– 1 maran maran 0 2008-08-31 16:08 aula1.txt

Não saiu como desejado não é? Mas e se eu der um:

# mkdir /home/maran/aulas/permissao
# ls -ld /home/ubuntu/aulas/permissao

drwxr-xr-x 2 maran maran 60 2008-08-31 16:09 /home/maran/aulas/permissao

Não foi como queríamos né? Então vamos analisar isto: E se tratássemos as permissões na hora da subtração da umask para:

Arquivos —> 777
Diretórios —> 666

Vamos fazer um teste baseando-se em nível de diretórios, porém vale lembrar que para se acessar o diretório, você deve definir uma permissão de execução (x).

666
660
006

# umask 0006 /home/maran/aula/*

Vamos fazer um teste então:

# cd /home/maran/aula
# mkdir permissao2
# ls -ld permissao2

drwxrwx–x 2 maran maran 60 2008-08-31 16:22 permissao2

Hummm, como queríamos não, é? E se eu criar um arquivo agora, será que o mesmo ficará com a permissão desejada?

# touch teste.txt
# ls -l 

-rw-rw—- 1 maran maran 0 2008-08-31 16:27 teste.txt

Humm, acho que chegamos a uma conclusão, veja: Se eu quero que um diretório ou tudo que estiver dentro daquele diretório seja criado com uma permissão especifica, eu faço a umask no diretório e não a nível de arquivos.😉 Agora se você quiser definir permanentemente este tipo de permissão, você pode editar o arquivo /etc/profile. Se eu der um cat neste arquivo, veja o que me é retornado:

# cat /etc/profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), …).

if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi

if [ “$PS1” ]; then
if [ “$BASH” ]; then
PS1=’\u@\h:\w\$ ‘
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ “`id -u`” -eq 0 ]; then
PS1=’# ‘
else
PS1=’$ ‘
fi
fi
fi

umask 022

É só alterar a linha umask para desejada, porém eu faço um esquema diferente. Alguns arquivos são carregados quando fazemos logon no sistema, seguindo a ordem, eles são carregados assim:

/etc/profile
~/.bash_profile
/root/.bashrc
/etc/bash.bashrc

O que eu faço, como a administração do sistema eu deixo para o usuário root, eu edito o arquivo /root/.bashrc, e insiro no final deste arquivo:

umask desejada

Assim todo arquivo/diretório que o root criar virá com esta permissão, aí o que eu faço, quando eu defino uma hierarquia de diretório para novos usuários, eu tenho que deixar o grupo sendo daqueles usuários, aí eu mudo o grupo dono do arquivo/diretório e insiro um SGUID nele, vocês verão mais pra frente o que é isso, aí eu resolvo todo meu problema. É isso aí, assim terá esta umask permanentemente, porém tome cuidado e tenha certeza do que está fazendo. Se você tiver uma boa administração de seu sistema, é ate aconselhável fazer isto, pelo menos em meu ponto de vista, pois quebra um galhão.

Atribuições especiais: Stick Bit, SGUID e SUID

Existem três permissões que dizemos ser especiais, sendo elas stick bit, SUID e SGUID. Elas realmente possuem funções um pouco mais complexas, porém de fundamental importância. Saber se há um tipo destas em um arquivo, saber se implementar tal permissão ajudará será de fundamental importância em sua jornada Linux, então tentarei passar de um jeito bem simples para vocês.
  • Stick Bit

Esta é a permissão que coloca ordem em tudo, é representada pela letra (t) e sempre se encontrará no bloco outros (o). Mas como assim organizar tudo? Vamos a um exemplo, dê um:

# ls -ld /tmp
drwxrwxrwt 13 root root 320 2008-08-31 15:58 /tmp

Reparem que na permissão para outros (o) existe um (t) entre o (rwx), e sua finalidade é dizer que todos podem gravar, executar e ler, porém não podem apagar arquivos dos outros usuário, por isso o “botar ordem”, ela não deixa que eu, usuário maran, vá la no /tmp e apague arquivos do usuário fabio.

  • SGUID (Set Group ID)

Esta é uma permissão que sempre se encontrará no campo groups (g), e é representada pela letra (s), então já sabemos que esta permissão tratará de grupos de usuários. A finalidade do SGUID é fazer com que, quando um arquivo/diretório for criado, herde a permissão do grupo do diretório. Ou seja, um exemplo, eu quero que todos arquivos e diretórios que forem criados dentro de /home/maran/adm herdem a permissão do diretório adm. Um exemplo disso é o diretório /var/log/news:

# ls -ld /var/log/news
drwxr-sr-x 2 news news 100 2008-08-31 12:52 /var/log/news 

  • SUID (Set User ID)

Esta permissão sempre trabalhará no campo do proprietário do arquivo (u) e esta é uma permissão que só trabalha com arquivos executáveis, ela serve para o propósito de um usuário comum poder executar aplicativos ou comandos de root ou do dono do arquivo. Esta permissão é caracterizada pela letra (s). Um exemplo prático do uso desta permissão: Digamos que um usuário seja responsável apenas por manter seu firewall rodando, ou seja, iniciar, parar, reiniciar o serviço e você não pode passar senha de root, o que você faz? Joga um SUID neste firewall.🙂 Segue uma tabela de como atribuir.

Modo Octal:

  • Stick Bit = 1
  • SGUID = 2
  • SUID = 4

Por letra:

  • Stick Bit = t
  • SGUID = s
  • SUID =

Exemplos:

# chmod 1555 /home/maran/publico
# chmod o=rwxt /home/maran/publico
# chmod o+t /home/maran/publico

  • Testando o conhecimento adquirido: um problema e uma solução

Este será um exercício de aprendizado onde se usa e muito tudo que foi passado neste artigo, além de lhes ajudar a se familiarizar com este novo assunto. Uma vez estava conversando com um cara, a um tempo atrás, e ele me explicando algumas coisas me deu um exemplo parecido com o que passarei, e meu funcionou, no outro dia conseguia lembrar tudo que me foi passado e entender realmente. Obs.: Se você deseja prestar a LPIC 1 (101), treine o que aqui será passado, pois permissões caem e muito e isso lhe mostrará um ambiente interessante, além de forçar você a utilizar as permissões, tanto normais como especiais, umask e alterar grupo/dono de usuário. Vamos ao cenário: Eu, administrador de sistema, em um dia calmo e tranqüilo recebo a seguinte tarefa: “Prezado Fábio, estaremos reativando algumas áreas, sendo mais específicos alguns setores, e precisaremos que você monte esta estrutura para nós, segue abaixo o que precisaremos: Novas áreas:
  • Técnicos —-> 5 usuários
  • Administração —-> 5 usuários
  • Compras —-> 5 usuários
  • Estoque —-> 5 usuários

Estes novos setores teriam uma faixa de 5 usuários em cada, conforme havia lhe passado os nomes por e-mail, eu preciso que você monte uma hierarquia bem definida, onde cada setor só possa interagir dentro daquilo que lhe é de interesse, ou seja, cada grupo possa apenas ver seus arquivos, e que cada usuário só tenha direito de excluir aquilo que é seu (se quiserem ir além) —> peço-lhes que o mesmo seja feito com o home dos novos usuários, mande-me depois como será esta nova hierarquia.” Uma tarefa simples? Terá problemas ao longo do caminho? Sim. Não resolverei este problema por inteiro para vocês, pois senão não praticarão, apenas irão copiar e colar, então montarei a hierarquia junto com vocês, e lhes alertarei de uma simples tarefa que vocês terão que resolver. Montando a hierarquia:  Aconselho que isto seja feito no /tmp, apenas para exemplo, afinal tudo será apagado no próximo boot:

Obs.: Primeiro monte toda hierarquia destes diretórios e se você for criar os usuários e o home, não precisará criar o home. Uma dica, na hora que for criar o usuário faça da seguinte maneira:

# user -c “Fábio Maran” -d /home/maran -g Compras – m maran

Montem a hierarquia da seguinte maneira:

/departamentos
.
|– administracao
|– compras
|– estoque
`– tecnicos

Depois de criados os diretórios, rode o comando para verificar as permissões:

# tree -d -L 1 pug /tmp/departamentos
departamentos
|– [drwxr-xr-x maran    maran   ]  administracao
|– [drwxr-xr-x maran    maran   ]  compras
|– [drwxr-xr-x maran    maran   ]  estoque
`– [drwxr-xr-x maran    maran   ]  tecnicos

Certo, toda hierarquia criada, agora crie os usuários de cada área. Feito isso você verá na listagem acima que ainda não foram definidos os grupos e tudo mais, então você usurá o chown para mudar isto, deixando cada setor no seu respectivo grupo. Agora está tudo certo né? Todos os diretórios foram criados, agora mude as permissões de cada diretório para os grupos certinho onde cada grupo só acesse seus diretórios, você usará o chmod. Depois de feto isso, rode novamente um:

# tree -d -L 1 pug

Deve ser retornado algo como:

departamentos
|– [drwxrwx— root     administ]  administracao
|– [drwxrwx— root     compras ]  compras
|– [drwxrwx— root     estoque ]  estoque
`– [drwxrwx— root     tecnicos]  tecnicos

Caramba, foi simples né? Porém agora você terá que definir em cada novo setor uma permissão para que só quem criou o arquivo possa deletar. Você também usará o chmod, mas com um outro tipo de permissão. Perfeito, faça apenas um teste:

# ls -l /tmp/departamentos/tecnicos
drwxrwx–T 2 root tecnicos 4096 2008-08-24 20:47 tecnicos

Pronto, tudo certinho né? Mas que tal mais um teste antes? Logue com algum usuário de um dos setores que foi criado. Ex.: Vou logar com o usuário joão do grupo técnicos, e criarei um arquivo lá dentro do diretório /tmp/deptos/tecnicos.

# touch /tmp/departamentos/tecnicos/teste.txt
# ls -l /tmp/departamentos/tecnicos/teste*

-rw-r–r– 1 joao tecnicos 0 2008-08-24 21:03 teste.txt

Outro usuário do grupo técnicos conseguirá editar este arquivo? Não! E por quê? Porque este arquivo foi criado assim? Mas o outro usuário esta no grupo já coloquei ele lá, e mesmo assim não consigo alterar. Lembre-se do porque os arquivos e diretórios são criados com algumas permissões que você resolverá o problema. Espero que realmente testem e consigam entender perfeitamente as permissões.

  • Considerações finais

Chegamos ao fim de mais um artigo. Neste o que quis passar para vocês foi como trabalhar com as permissões, mas só isso? Não! Aprendendo os três métodos de atribuição de permissões você já fica preparado para pelo menos ir bem na parte de permissões da Certificação LPIC – Nível 1 (101). Nesta prova o que mais cai são permissões e usuários, e saber os três métodos é no mínimo essencial para você que deseja prestar tal prova. Bom, é isso aí.

Espero que tenham gostado.

Abraços…

Fonte: Viva Linux

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: