Controle de Acesso
Por padrão, quando um novo usuário é criado e não especificar nenhum grupo, ele pertencerá ao grupo de mesmo nome do seu grupo primário (este comportamento é controlado pelo parâmetro USERGROUPS=yes do arquivo /etc/adduser.conf). Veja mais aqui.
Na representação das permissões na forma de mnemônicos, quando há um "-" no lugar da letra, significa que não há essa permissão, ou seja, significa que essa permissão não foi setada.
Ainda na representação das permissões na forma de mnemônicos, o primeiro caracter indica qual é o tipo do arquivo.
- = arquivo comum
d = diretório
c = arquivo especial de caracter
b = arquivo especial de bloco
l = link simbólico
p = named pipe ou FIFO
s = socket
Na representação das permissões em binário temos 4 grupos de 3 bits. O 1º grupo refere-se aos bits especiais (SUID, SGID, Sticky), o 2º grupo refere-se ao dono/proprietário do arquivo, o 3º grupo refere-se aos usuários que fazem parte do grupo do dono do arquivo e o 4º grupo refere-se a todos os usuários que não são os proprietários e nem fazem parte do grupo.
Com a permissão SUID setada, o usuário executa o arquivo ou acessa o diretório como se fosse o dono. Exemplo de aplicação: Para um usuário alterar sua senha ele chama o comando passwd. Esse comando precisa remover a senha antiga e inserir a senha nova no arquivo /etc/shadow. Porém, esse arquivo normalmente só pode ser alterado pelo root. Como fazer isso, se o passwd foi chamado pelo usuário comum? A resposta é ativar o bit SUID. Com esse bit ativado o programa passa a rodar com as permissões do usuário dono do arquivo, e não mais de quem o invocou.
Executando o comando ls -l /usr/bin/passwd temos:
-rwsr-xr-x 1 root root 34740 Fev 15 2011 /usr/bin/passwd
O mnemônico em vermelho corresponde ao bit SUID setado.
Exemplos de binários que geralmente possuem o bit SUID ligado: mount, ping
Com a permissão SGID setada, o usuário executa o arquivo ou acessa o diretório como se fosse membro do grupo ao qual pertence o arquivo/diretório. Exemplo: Se o diretório /bla tem o grupo g1 e tem o SGID habilitado, então todos os arquivos dentro do diretório /bla serão criados com o grupo g1.
Este é um importante atributo para uma equipe, assumindo que todos os arquivos compartilhados devem ter o mesmo grupo.
O bit Sticky era bastante utilizado para realizar otimizações de acesso a conteúdos, entretanto, a partir da série 2.6 do kernel do linux essa tarefa passou a ser realizada diretamente pelo kernel.
Mas então qual a utilidade do bit Sticky atualmente?
Em diretórios, impede que outros usuários removam arquivos dos quais não são donos. Isto é chamado de colocar o diretório em modo append-only. Um exemplo de diretório que se encaixa perfeitamente nesta condição é o /tmp, todos os usuários devem ter acesso para que seus programas possam criar os arquivos temporários lá, mas nenhum pode apagar arquivos dos outros.
Na representação das permissões na forma de mnemônicos, quando as letras s e/ou t aparecem em minúsculo significa que a permissão "x" está habilitada naquela classe. Quando aparecem em maiúsculo significa que a permissão "x" não está habilitada naquela classe.
rwxr-xr-T = 001111101100 (Binário) = 1754 (Octal)
Uma pequena prática:
* mkdir /tmp/dir - Cria o diretório /dir dentro do diretório /tmp (Permissão do diretório /dir: rwxr-xr-x)
* chmod o-r /tmp/dir - Retira para outros usuários a permissão de leitura do diretório /dir, ou seja, para outros usuários não é possível listar o conteúdo do diretório (Permissão do diretório /dir: rwxr-x--x)
* chmod o-x /tmp/dir - Retira para outros usuários a permissão de execução do diretório /dir, ou seja, para outros usuários não é possível acessar o diretório (Permissão do diretório /dir: rwxr-x---)
* chmod o+r /tmp/dir - Adiciona para outros usuários a permissão de leitura do diretório /dir (Permissão do diretório /dir: rwxr-xr--)
Verifique as permissões dos diretórios abaixo utilizando o comando stat:
/home rwxr-xr-x
/etc/passwd rw-r--r--
/bin/bash rwxr-xr-x
/tmp rwxrwxrwt
Quando novos arquivos são criados, eles são criados com as permissões definidas pela configuração do sistema (PAM - Pluggable Authentication Modules) ou do usuário (editando o arquivo /etc/profile ou ~/.profile).
A umask é um número octal de três algarismos que define a permissão inicial que os arquivos e diretórios receberão quando forem criados.
Digitando o comando umask sem parâmetros é retornado o valor de sua umask atual. A umask padrão no sistema Debian é a 022 .
No Linux, as permissões padrão para criação de arquivos e diretórios para todos os usuários são 666(-rw-rw-rw-) e 777 (drwxrwxrwx), respectivamente. Então, assumindo que o umask tenha o valor 022, qualquer novo arquivo será criado com a permissão 644 (-rw-r--r--) e qualquer novo diretório com a permissão 755 (drwxr-xr-x).
| Decimal | r | w | x |
| 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 1 | 1 |
| 4 | 1 | 0 | 0 |
| 5 | 1 | 0 | 1 |
| 6 | 1 | 1 | 0 |
| 7 | 1 | 1 | 1 |
666
022 -
---
644 (octal) = 110 100 100 (binário) = -rw-r--r--
777
022 -
---
755 (octal) = 111 101 101 (binário) = drwxr-xr-x
Outros exemplos:
1) Assumindo que o umask tenha o valor 002, qualquer novo arquivo será criado com a permissão 664 (-rw-rw-r--).
666
002 -
---
664 (octal) = 110 110 100 (binário) = -rw-rw-r--
2) Assumindo que o umask tenha o valor 001, qualquer novo arquivo será criado com a permissão 665 (-rw-rw-r-x).
666
001 -
---
665 (octal) = 110 110 101 (binário) = -rw-rw-r-x
3) Assumindo que o umask tenha o valor 077, qualquer novo diretório será criado com a permissão 700 (drwx------).
777
077 -
---
700 (octal) = 111 000 000 (binário) = drwx------
Veja mais sobre permissões em Unix e Linux aqui.
Exercitando o uso do comando chmod na sintaxe com letras
1) Suponha que o arquivo file01 tenha sido criado no diretório /tmp com a seguinte permissão (-r--r--r--), mostre como fica a permissão após a execução de cada um dos comandos abaixo. Considere que os comandos abaixo estão sendo executados em seqüência.
a) chmod +w /tmp/file01 => Teoricamente, a permissão deveria ficar -rw-rw-rw-, mas a permissão ficou -rw-r--r--. Não sei explicar o motivo, pois tanto em aula como em fontes na internet é dito que caso não seja especificada a classe dos usuários para os quais se está alterando as permissões, o sistema usa a opção "a" (todos os usuários), entretanto não é isto que está acontecendo tanto para arquivos quantos para diretórios.
Quando souber o motivo atualizo a postagem :)
Por hora recomendo sempre especificar a classe dos usuários para os quais se está alterando as permissões.
Para que a permissão ficasse como deveria ser em teoria deveríamos executar o comando chmod a+w /tmp/file01.
b) chmod o - w /tmp/file01 => -rw-rw-r--
c) chmod a = rw /tmp/file01 => -rw-rw-rw-
d) chmod a = r /tmp/file01 => -r--r--r--
e) chmod o = rw /tmp/file01 => -r--r--rw-
f) chmod u + s /tmp/file01 => -r-Sr--rw-
Note que o "S" que representa a permissão SUID (4ª posição) é maiúsculo, indicando que a permissão "x" (escrita) NÃO está habilitada.
g) chmod g + s /tmp/file01 => -r-Sr-Srw-
Note que o "S" que representa a permissão SGID (7ª posição) é maiúsculo, indicando que a permissão "x" (escrita) NÃO está habilitada.
h) chmod ugo + x /tmp/file01 => -r-sr-srwx
Note que os "s" que representam a permissão SUID (4ª posição) e SGID (7ª posição) são minúsculos, indicando que a permissão "x" (escrita) está habilitada.
O comando chmod a+x /tmp/file01 teria o mesmo efeito.
i) ug + x => Não afeta a permissão anterior.
j) O que aconteceria se o comando chmod u = X /tmp/file01 fosse aplicado em um arquivo cuja permissão é (-r--r--r--)? Observação: O "X" é maiúsculo.
A permissão ficaria ----r--r--. Nesse caso não é aplicada a permissão de execução ao dono do arquivo e apenas retirada a permissão de leitura. Se já tivesse permissão de execução para o grupo ou outros usuários, além de retirada a permissão para leitura, seria aplicada a permissão de execução. Se o "x" fosse minúsculo também seria retirada a permissão para leitura e aplicada a permissão de execução
AGORA VAMOS PRATICAR!!!!!
1) Criar novo usuário:
Execute o comando adduser < nome_do_usuario >
Em seguida deve-se digitar e confirmar uma senha. Os campos nome completo, número da sala, fone de trabalho, fone doméstico e outro podem ser deixados em branco...basta pressionar Enter. Por fim, confirma as informações digitando 'S'.
2) Solicite do sistema um novo console em modo texto combinando as teclas Ctrl + F2, por exemplo. Para voltar ao console anterior basta pressionar Ctrl + F1. Deve-se utilizar o Ctrl do lado direito e pode-se usar até o F6.
Pra quem está fazendo as práticas direitinho agora temos dois usuários não-root que representarei aqui por usuário 1 (U1) e usuário 2 (U2).
Faça o login de U1 e U2, um em cada console e execute os seguintes comandos:
Observação: Destacarei de vermelho ao lado dos diretórios e arquivos criados a permissão de cada um. E para cada bloco de comandos, de forma breve, explicarei o que ocorreu.
U1: mkdir teste (drwxr-xr-x)
U1: touch teste/arqtxt (-rw-r--r--)
U2: cd /home/< U1 >/teste
U2: ls -l
Note que o diretório teste tem permissão de leitura e execução para outros usuários, portanto U2 consegue acessar o diretório e listar o seu conteúdo. Além disso, o dono é U1 e o grupo U1, tanto para o arquivo quanto para o diretório.
U1: chmod o-r teste (drwxr-x--x)
U2: cd
U2: cd /home/< U1 >/teste
U2: ls -l
Note que foi retirada a permissão de leitura para o diretório teste, portanto U2 conseguirá acessar o diretório, entretanto não poderá listar seu conteúdo.
U1: chmod o+r, o-x teste (drwxr-xr--)
U2: cd
U2: cd /home/< U1 >/teste
U2: ls -l /home/< U1 >/teste
Nesse caso para U2 só é possível listar o conteúdo do diretório teste. Permissão negada para acessar o diretório utilizando o comando cd.
U1: chmod a+rwx teste (drwxrwxrwx)
U2: touch /home/< U1 >/teste/arq2txt (-rw-r--r--)
U2: ls -l /home/< U1 >/teste/arq2txt
Foi dada permissão de leitura, escrita e execução no diretório teste para todos. Sendo assim, torna-se possível que outro usuário crie e remova arquivos dentro do diretório teste.
O arquivo arq2txt criado por U2 tem como dono U2 e como grupo U2 também.
U1: chmod g+s teste (drwxrwsrwx)
U2: touch /home/< U1 >/teste/arq3txt (-rw-r--r--)
U2: ls -l /home/< U1 >/teste/arq3txt
Foi ativado o bit SGID. O arquivo arq3txt criado por U2 tem como dono U2 e como grupo U1.
U1: chown -R < U1 >.< U1 > teste
Permissão negada. Apenas o root tem permissão para executar o comando chown.
Então deveríamos fazer como root chown -R < U1 >.< U1 > /home/< U1 >/teste
Em tempo: Fiz uns testes e parece que os comandos chown e chgrp só funcionam com o root. Vou verificar se essa informação procede e depois atualizar aqui :)
E assim terminou os assuntos da aula de hoje!
Em seguida tivemos a apresentação de Daniel sobre o Projeto GNU e a FSF. Você pode ver os slides aqui.
Nenhum comentário:
Postar um comentário