Os direitos de acesso

Março 2017

O uso por usuários, grupos ou outros, bem como as permissões acordadas depende de cada configuração, da estratégia de funcionamento estipulada pelo administrador de seu sistema e de suas necessidades. Neste artigo você encontrará uma breve apresentação dos direitos que o sistema GNU/Linux utiliza, bem como os comandos que o usuário pode acionar.



No sistema GNU/Linux tudo é arquivo, incluindo os arquivos especiais que designam os periféricos. Linux e divide os arquivos em diversas categorias :

Os repertórios
Os arquivos ordinários, (programas, arquivos de configuração, arquivos de dados, etc...)
Os arquivos especiais (tipo bloco ou caráter)
O sistema do arquivo sob GNU/Linux é organizado em uma arborescência, sem a necessidade de mencionar o nome do disco ou da partição para ter acesso.

O que são os direitos

No sistema GNU/Linux, atribui-se direitos para três identidades à todos os arquivos:

O proprietário - é o usuário que criou o arquivo ou usuário que root designou como proprietário.
O grupo (que não é necessariamente o grupo do proprietário)
Os outros (que não fazem parte do grupo)
O comando ls -l nos permite exibir os direitos de um arquivo sob GNU/Linux.

Para cada identidade (veja acima), existem 3 direitos de aceso:

r - read (o direito de leitura)
w - write (o direito de escrita)
x - execute (o direito de executar)

A exibição dos direitos é representada por uma cadeia (corrente) de 9 caracteres, precedida de outro, representando um tipo de arquivo. Estes 9 caracteres, agrupados 3 por 3 (rwx, rwx, rwx), definem os direitos das três identidades (proprietário, grupo e os outros). Para cada direito existente tem uma letra r, w ou x (veja acima) e se um direito não existir utiliza-se o hífen (sem confundir com o primeiro hífen que significa - um arquivo regular).
Significação  Símbolo  Proprietário      Grupo     Outros  
______________________________________________________________________
Arquivo regular -
repertório d
periférico caráter c
periférico bloco b r w x r w x r w x
link simbólico l
tubo nomeado p
socket local s
______________________________________________________________________

Exemplos

-rwxr-x---, quer dizer

que trata-se de um arquivo regular (o primeiro caráter é um hífen -)
que o proprietário tem todos os direitos (ReadWriteExecute então lerEscreverExecutar)
que os membros do grupo tem os direitos de Ler (o 1° caráter é r) e Executar (o 3° caráter é x), mas eles não tem o direito de Escrever (o 2° caráter é um hífen -)
que os outros não tem nenhum direito, nem de escrever, nem de ler, nem de execução (os três são caracteres hifens -)

O que e quais são os direitos especiais

O Sticky bit

O Sticky bit é um direito cujo comportamento é diferente para os arquivos executáveis e para os repertórios. Ele corresponde à letra t ou um número até 1000. Se os direitos de execução não são posicionados, é a letra T que corresponde.

Os arquivos executáveis - o programa ficará na memória para execução posterior.

Os repertórios - sticky bit é posicionado em um repertório, somente o proprietário poderá suprimir os arquivos (é o caso dos repertórios /tmp e /var/tmp sob GNU/Linux)

Exemplo:
$ ls -l / | grep tmp;ls -l /var | grep tmp 
drwxrwxrwt 12 root root 1024 2006-07-22 14:18 tmp
drwxrwxrwt 4 root root 4096 2006-07-22 10:23 tmp
2 a exibição dos direitos para /tmp et /var/tmp.
Note-se que o último caráter na suite dos 9 para os direitos é um t e não um x ou um hífen

Quais os direitos para endossar

SetUID e SetGID

Os direitos para endossar no GNU/Linux são representados pela:

letra s (se o direito x está posicionado)
letra S (se o direito x não está posicionado)

Numericamente, os direitos são representados da seguinte maneira:

4000 - para o endossar da identidade do proprietário
2000 - para o endossar da identidade do grupo

O comportamento dos direitos para endossar.


Para os arquivos programa ou executável:
SUID = 4000 - o processo tem os direitos do proprietário do programa executado
SGID = 2000 - O processo tem os direitos do grupo do programa executado

Para os repertórios:
SGID = 2000 - Os arquivos que se encontram no repertório pertencem ao grupo do repertório.

Os direitos para endossar são muito importantes para a segurança.

Ao invés de dar o acesso a um arquivo, dá-se o direito de acesso a um comando.
O kernel (ou nódulo), no momento da execução do comando endossa a identidade do proprietário ou do grupo do comando ao invés daquela do usuário que lançou o comando. Então o acesso ao arquivo se faz via o comando e não diretamente.

Quando um usuário se conecta a um sistema, ele detém 2 UID (UserIDentity) e 2 GID (GroupIDentity): o real e o efetivo.

No momento da execução de um comando os UID e GID são os reais, os efetivos são atribuídos por pedido. Os direitos para endossar não estão posicionados, então os UID e GID efetivos são idênticos aos UID e GID reais. Se os direitos para endossar são posicionados então o UID e/ou GID efetivos são aqueles do comando. O que quer dizer que, os UID e GID efetivos são aqueles que controlam os direitos de acesso a um comando. Para conhecer os arquivos com os direitos para endossar, do seu sistema, digite em um terminal o seguinte código:
# find / -perm -2000 -o -perm -4000 -exec ls -l {} \; 2>/dev/null
Um bom exemplo é o comando crontab. Este comando cria um arquivo no /var/spool/cron/crontabs para o utilizador que executa o comando crontab. O acesso ao repertório /var/spool/cront/crontabs é proibido aos utilizadores salvo ao root .
$ cd /var/spool/cron/crontabs/ 
bash: cd: /var/spool/cron/crontabs/: Permissão recusada
Quando o utilizador lança o comando crontab -e (arquivo para editar /var/spool/cron/crontabs/nom_user), o comando não se executa com o UID e GID real do utilizador mas com o UID e GID afetivo do root.
$ ls -l /usr/bin/crontab 
-rwxr-sr-x 1 root crontab 26872 2004-07-28 22:44 /usr/bin/crontab
Vê-se que o comando crontab é a propriedade do root e que ela faz parte do grupo crontab com o direito SGID.

E, como root, tem o direito de criar no /var/spool/cron/crontabs o arquivo será criado.
# ls -l /var/spool/cron/crontabs/lami20j 
-rw------- 1 lami20j crontab 225 2006-07-22 16:00 /var/spool/cron/crontabs/lami20j
Vê-se que o utilizador lami20j é o proprietário do arquivo e tem direitos de leitura e de escrita. Entretanto seria bom não fazê-lo diretamente.

Quais são os comandos

chmod

O comando chmod (CHangeMODe) permite definir e de mudar os direitos de acesso de um arquivo ou um conjunto de arquivos. Entre os opções do comando chmod (que não são muitos ) vou citar somente dois:

v para verbose (exibição na saída standard STDOUT do resultado do comando)
R tratar os repertórios de maneira recursiva (aplicação do comando da arborescência inteira do repertório em questão)

Existem modos de utilização do comando chmod: de maneira literal e de maneira numérica.

A maneira literal

Se você leu atentamente até aqui, então já pode adivinhar a maneira literal. Trata-se da utilização das letras que você já conhece, r, w e x para especificar os direitos desejados. A novidade é que pode trabalhar também com as letras para designar as identidades que nós falamos acima: o proprietário, o grupo e os outros.

O comando chmod utiliza a seguinte notação:

u - para o proprietário (user)
g - para o grupo (group)
o - para os outros (other)
a - para todos (all)

Outra notação será utilizada para atribuir e/ou retirar direitos.


+ (mais) Para atribuir

- (menos) para retirar

= (igual) para fixar o acesso exato

Eis um pequeno esquema de construção para chmod
identidade Operador Tipo acesso  
_____________________________________
u + r
chmod g - w
o = x
a
_____________________________________
Nós não poderemos imaginar todas as combinações possíveis, mesmo se isto pareça realizável visto o número pouco importante de operadores e dos direitos. O que explica as coisas, é antes o número de usuários, o número de arquivos e sua repartição no (s)disco(s) e não porque conhecemos o número, etc. Por outro lado, algumas regras ajudarão se você se decidir por utilizar o comando chmod.


Diversas identidades e tipos de acesso podem ser utilizados.
Ex: chmod go-wx arquivopara os membros do grupo (g) e os outros (o)retira-se (-) os direitos de escrita (r) e de execução (x).


Diversos conjuntos de operadores e tipos de acesso podem ser utilizados.

Ex: chmod o+r-w arquivo atribui-se o direito de leitura (r) mas retira-se o direito de escrita (w) para os outros (o). As cadeias podem ser combinadas separando-as por vírgulas.

Ex: chmod u+x,og-w arquivo atribui-se (+) o direito de execução (x) para o proprietário (u) e retira-se (-) os direitos de escrita para os membros do grupo (g) e os outros (o). Atenção!Não tem espaço entre as cadeias separadas por vírgulas. Para aplicar o comando chmod em um repertório e seu conteúdo (sub-repertórios, arquivos) utiliza-se o comandochmod -R direitos Repertório


Dicas:

Quando a identidade é omitida, o valor a (todos) que será utilizado.

chmod <bold>-R +w repertório</bold>

O tipo de acesso pode ser omitido se o sinal igual (=) é utilizado para suprimir todos os acessos.

chmod o= arquivo

A maneira numérica
   Proprietário   Grupo     Outros   
__________________________________________________________________
LeituraEscritaExe LeituraEscritaExe LeituraEscritaExe
__________________________________________________________________
400 200 100 40 20 10 4 2 1
Para compreender a utilização do chmod com a maneira numérica um exemplo será esclarecedor.

Exemplo: nós queremos estabelecer para um arquivo os seguintes direitos :

- proprietário
Leitura = escrita = execução = 400 + 200 +100 = 700
- grupo
Leitura + execução = 40 + 10 = 50
- Os outros
Leitura = execução = 4 + 1 = 5
Ao todo temos 700 + 50 + 5 = 755

Agora nós vamos utilizar o resultado obtido com o chmod.
chmod -v 0755 arquivo
ou
chmod 0755 arquivo, mas neste caso o resultado do comando não é afixado na saída standard

Pode-se escrever simplesmente chmod 755 arquivo . Assim, o princípio não é complicado. Estabelecem-se os direitos desejados para cada identidade e faz-se a adição. Para o resto, o chmod se encarrega. Nós vimos assim a maneira numérica de utilizar o comando chmod, eu suponho que você tenha encontrado a resposta para uma questão que pode passar pela sua cabeça

Trata-se da atribuição dos direitos de endossamento dos direitos.

SUID SGID Sticky bit
__________________________
4000 2000 1000
__________________________
Para juntar um direito de endossamento, além dos direitos habituais, você deve inserir no cálculo o ou os direitos de endossamento que você necessitaria.

Tomemos o caso precedente 700 + 50 + 5 = 755. Para agregar o direito de endossamento do grupo escreve-se 2000 + 700 + 50 + 5 = 2755

Lembre-se! Trata-se dos direitos para um comando, o que quer dizer que o direito de execução deve ser posicionado.


Uma ideia é antes registrar os direitos existentes em um arquivo com ls -l ou ls -Rl e em seguida criar um scrip para este arquivo, mas isto complicaria as coisas e à bem da verdade eu nunca necessitei fazê-lo. Outra ideia seria a de salvar com tar para em seguida, no caso em que você perdesse seus direitos, voltar para a configuração de origem. Em consequência antes de modificar os direito em um arquivo ou uma arborescência dê uma olhadela antes nos direitos já existentes.

umask

O comando umask permite definir os direitos por padrão de um arquivo ou repertório na sua criação. Ou indicar os direitos a retirar no momento de sua criação. Ao contrário do comando chmod (maneira numérica), ele tem como argumento 3 números, que desta vez representam os direitos que não queremos dar.

$ umask 0022 arquivo


Saiba que a duração de vida do comando umsk é limitada à sessão shell em andamento. Para uma duração permanente ver os arquivos de configuração de seu shell. Para o shell bash pode-se utilizar o arquivo ~/.bashrc. Pessoalmente eu não utilizei o comando umask. Fiz somente pequenos testes com o objetivo de compreensão do comando chmod.

A compreensão dos direitos para os arquivos em um sistema GNU/Linux é fortemente ligada à gestão dos utilizadores e grupos. Além dos direitos que nós vimos acima, no sistema GNU/Linux encontra-se também ACLs (Access Control List) que permitem dar direitos suplementares que nós detalharemos em outro thread. O [/faq/3773-securite-les-access-control-lists-acls securite os access control lists acls).

Foto: © Pixabay

Veja também

Publicado por ninha25.
Este documento, intitulado 'Os direitos de acesso', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.