Linux - Permissões de Acesso Especiais
O controle de acesso em arquivos e diretórios é a segurança fundamental para qualquer sistema multi-usuário.
Os sistemas de arquivos nativos do Linux implementam controle de acesso utilizando algumas propriedades dos arquivos/diretórios.
Conteúdo:
1 - Lembrando como as permissões básicas funcionam:
2 - Permissões de Acesso Especiais:
3 - SUID ( Set User ID):
3.1 - Exemplo
3.2 - Comandos
4 - SGID ( Set Group ID ):
4.1 - Exemplo
4.2 - Comandos
5 - Sticky ( Sticky bit):
5.1 - Exemplo
5.2 - Comandos
Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:
- O texto em Negrito assume que se trata de um comando que deve ser digitado.
- O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
- O ">>>" significa que você deve digitar no interpretador do Python.
- O "#" significa que o comando dever ser executado como usuário "root".
- O "$" significa que o comando deve ser executado como usuário sem privilégios.
1 - Lembrando como as permissões básicas funcionam:
No Linux há três modelos de controle de acesso básicos: Read, Write e Execution.
Veja um exemplo de permissão básica na figura abaixo:
O Tipo do Objeto significa:
d => diretório
b => arquivo de bloco
c => arquivo especial de caractere
p => canal
s => socket
- => arquivo normal
Já os outros caracteres significam:
r => significa permissão de leitura (read);
w => significa permissão de gravação (write);
x => significa permissão de execução (execution);
- => significa permissão desabilitada.
Explicando um pouco mais:
Leitura (r):
Em arquivos, permite examinar o conteúdo do arquivo.
Em diretórios permite listar conteúdo do diretório.
Escrita (w):
Em arquivos, permite escrever, remover e alterar o arquivo.
Em diretórios, permite criar e remover arquivos dentro do diretório.
Execução (x):
Em arquivos, permite executar um arquivo como um programa.
Em diretório, permite ler e escrever em arquivos dentro do diretório.
Sendo que os três primeiros rwx primeiros pertencem ao Dono do arquivo, e os outros três rwx pertencem ao Grupo e por fim os últimos três rwx pertencem há outros usuários que não fazem parte do grupo.
2 - Permissões de Acesso Especiais:
Mas somente as três permissões básicas (rwx), não dão toda flexibilidade para controlar acesso aos arquivos e diretórios.
Por isso o Linux tem mais três modelos especiais para controle de acesso, chamados suid (set user id), sgid (set group id) e Sticky (Sticky bit).
Veja um exemplo de permissão especial na figura abaixo:
3 - SUID ( Set User ID):
A propriedade SUID é somente para arquivos executáveis e não tem efeito em diretórios.
Nas permissões básicas, o usuário que executou o programa é dono do processo.
Mas, em arquivo executável com a propriedade SUID aplicada, o programa rodará com o ID do dono do arquivo, não com o ID do usuário que executou o programa.
Normalmente o usuário dono do programa executável é também dono do processo sendo executado.
Ou seja, quando um arquivo/programa executável tem o controle de acesso SUID, ele é executado como se ele estivesse iniciado pelo dono do arquivo/programa.
A permissão de acesso especial SUID pode aparecer somente no campo Dono.
3.1 - Exemplo:
Um exemplo para arquivo executável com a propriedade SUID é o arquivo /usr/bin/passwd.
Ou seja, quando executamos o comando passwd com qualquer usuário normal, o processo é executado com ID do usuário root ( como se o usuário root tivesse executado o comando passwd), pois somente o usuário root tem permissão para alterar o arquivo /etc/passwd.
# ls -lah /usr/bin/passwd
-rwsr-xr-x 1 root root 27K 2006-04-03 10:37 /usr/bin/passwd
3.2 - Comandos:
- Aplicando SUID:
Aplicando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):
# chmod u+s programa.sh
# ls -lah programa.sh
-rwsr-xr-x 1 root roberto 0 2006-09-26 22:57 programa.sh
Aplicando a propriedade SUID em um arquivo executável utilizando formato octal (4):
# chmod 4750 programa.sh
# ls -lah programa.sh
-rwsr-x--- 1 root roberto 0 2006-09-26 22:57 programa.sh
- Retirando SUID:
# chmod u-s programa.sh
# ls -lah programa.sh
-rwxr-x--- 1 root roberto 0 2006-09-26 22:57 programa.sh
- Procurando SUID:
Procurando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):
# find /home/roberto -perm u=s
/home/roberto/programa.sh
Procurando a propriedade SUID em um arquivo executável utilizando formato octal (4):
# find /home/roberto -perm -4000
/home/roberto/programa.sh
4 - SGID ( Set Group ID ):
A propriedade SGID tem a mesma função que o SUID para arquivos executáveis.
Mas, a propriedade SGID tem um efeito especial para os diretórios.
Quando SGID é aplicado em um diretório, os novos arquivos que são criados dentro do diretório assumem o mesmo ID de Grupo do diretório com a propriedade SGID aplicado.
A permissão de acesso especial SGID pode aparecer somente no campo Grupo.
4.1 - Exemplo:
Se no diretório /home/roberto tem o grupo casa e tem o SGID habilitado, então todos os arquivos dentro do diretório /home/roberto serão criados com o grupo casa.
Esta é um importante atributo para um equipe, assumindo que todos os arquivos compartinhados devem ter o mesmo grupo.
4.2 - Comandos:
- Aplicando SGID:
Aplicando a propriedade SGID em um diretório executável utilizando formato simbólico (s):
# chmod g+s /home/equipe
# ls -lah /home/equipe
total 0
drwxr-sr-x 2 roberto equipe 48 2006-09-26 23:21 .
Aplicando a propriedade SGID em um diretório executável utilizando formato octal (2):
# chmod 2750 /home/equipe
# ls -lah /home/equipe
total 0
drwxr-s--- 2 roberto equipe 48 2006-09-26 23:21 .
- Retirando SGID:
# chmod g-s /home/equipe
# ls -lah /home/equipe
total 0
drwxr-xr-x 2 roberto equipe 48 2006-09-26 23:21 .
- Procurando SGID:
Procurando a propriedade SGID em um diretório executável utilizando formato simbólico (s):
# find /home -perm /g=s
/home/equipe
Procurando a propriedade SUID em um diretório executável utilizando formato octal (2):
# find /home -perm -2000
/home/equipe
5 - Sticky ( Sticky bit):
Em arquivos executáveis, a propriedade Sticky faz com que o sistema mantenha uma imagem do programa em memória depois que o programa finalizar.
Esta capacidade aumenta o desempenho, pois será feito um cache do programa para a memória, e da próxima vez que ele for executado, será carregado mais rápido.
Em diretórios, a propriedade Sticky impede que outros usuários deletem ou renomeam arquivos dos quais não são donos.
Isso normalmente é utilizado para aumentar a segurança, pois o diretório estará em modo append-only ( somente incremente )
Sendo assim, somente o usuário que é Dono do arquivo, poderá deletar ou renomear os arquivos dentro de um diretório com a propriedade Sticky aplicada.
A permissão especial Sticky, pode ser especificada somente no campo outros usuários das permissões de acesso.
5.1 - Exemplo:
No diretório /tmp, todos os usuários devem ter acesso para que seus programas possam criar os arquivos temporários, mas nenhum pode apagar arquivos dos outros.
Então é interessante aplicar a propriedade Sticky no diretório /tmp.
5.2 - Comandos:
- Aplicando Sticky:
Aplicando a propriedade Sticky em um arquivo executável utilizando formato octal (1)
# chmod 1750 programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x--T 1 root root 2,9M 2006-09-26 23:51 programa_pesado.sh
Aplicando a propriedade Sticky em um arquivo executável utilizando formato simbólico (t):
# chmod o+t programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x--T 1 root root 2,9M 2006-09-26 23:51 programa_pesado.sh
Aplicando a propriedade Sticky em um diretório utilizando formato simbólico (t):
# chmod o+t /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwt 8 root root 264 2006-09-26 23:22 .
Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):
# chmod 1777 /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwt 8 root root 264 2006-09-26 23:22 .
- Retirando Sticky:
# chmod o-t /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwx 8 root root 264 2006-09-26 23:22 .
- Procurando Sticky:
Aplicando a propriedade Sticky em um diretório utilizando simbólico (t):
# find /home/roberto/ -perm /o=t
/home/roberto/programa_pesado.sh
Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):
# find /home/roberto/ -perm -1000
/home/roberto/programa_pesado.sh
Referência:
Guia Foca Linux - Permissões especiais
LPI Linux Certification in a Nutshell
IBM DeveloperWorks - Linux LPI - Tópico 104.
http://robertors.blogspot.com/2006/09/linux-permisses-de-acesso-especiais.html
0 Comments:
Postar um comentário
<< Home