terça-feira, 19 de janeiro de 2016

Perissões especiais de Acesso a Arquivos e Diretórios Sticky bit SUID SGID


Segurança da Informação regras de acesso a arquivos e Diretórios.

Como aplicar as regras de permissões de arquivos e diretórios em sistemas Unix/Like, de uma forma mais abrangente, e acadêmica.



Gerenciamento de Permissões no sistema de arquivos:
Como sabemos o sistema Linux oferece um ambiente Multitarefa e Multiusuário, onde uma mesma maquina pode executar vários trabalhos por vários usuários simultaneamente, então e óbvio que pra que se tenha uma certa organização e não cairmos num caos, é preciso por ordem na casa, e é nesse ponto que entra em cena um tópico que esta muito em alta atualmente e promete seguir chamando ainda mais a atenção dos administradores e usuários de sistemas, “A Segurança da Informação”, então é nesse cenário que vamos abordar as regras de permissões de acesso a arquivos e diretórios do sistema.
Como num ambiente compartilhado não podemos deletar ou modificar qualquer coisa à que tenhamos acesso, nada mais lógico e funcional que impor regras de acessos aos arquivos e diretórios, evitando assim perdas e transtornos indesejáveis aquilo que consideramos ser o bem mais precioso de uma empresa, a nossa informação.
Essas regras de acesso nada mais são que atributos dados aos arquivos e diretórios, que determinam quem pode acessá-los, tendo em mente três ações básicas, Leitura, Escrita e Execução, essas regras podem ser definidas para Usuários e Grupos.


Permissao
Açao
NO ARQUIVO
NO DIRETORIO
READ (r) - 4
LEITURA
Pode Ver Arquivo
Pode ver Diretório
WRITE (w) - 2
ESCRITA
Modificar e Deletar
Criar e Deletar
EXECUTE (x) - 1
EXECUÇÃO
Execução
Navegar Pelo Diretório


No Linux aplicamos essas permissões a arquivos e diretórios, três modos de acesso, Usuário , Grupo e Outros cada um pode receber até três permissões; compondo uma string de 9 letras.
Ex: rwx-r-w-x. Os três primeiros são permissões do usuário, grupo e outros respectivamente.
Veja o arquivo variáveis.odt
edson@edson-desktop:~/Documentos$ ls -la variáveis.odt
-rw-r--r-- 1 edson edson 59587 Dez 26 16:31 variáveis.odt
O usuário edson tem permissão de Leitura e Gravação o Grupo e Outro só de Leitura.
Podemos alterar essas permissões com o comando chmod em modo root.
edson@edson-desktop:~/Documentos# chmod ugo+wrx variáveis.odt
Agora todos tem permissões de Leitura Gravação e Escrita.
edson@edson-desktop:~/Documentos$ ls -la variáveis.odt
-rwxrwxrwx 1 edson edson 59587 Dez 26 16:31 variáveis.odt
edson@edson-desktop:~/Documentos$
Também podemos fazer uma representação numérica octal 3 dígitos..
Onde :
4 = leitura.
2 = Escrita
1 = Execução
a soma dos números agrega permissões.
Exemplo 775 , 640 , 555 etc.
Onde 7 = 4+2+1 Leitura gravação e Execução
onde 5 = 4 + 1 Leitura e Execução
onde 6 = 4 + 2 Leitura e Gravação
onde 3 = 2 + 1 Gravação e Execução.
Assim por diante.
Da mesma forma como trabalhamos antes podemos alterar as permissões numérica com o comando chmod.
Chmod 777 arquivo → dá todas as permissões a todos os usuários
chmod 111 arquivo → dá permissão de execução a todos usuários.
Chmod 42l arquivo → Leitura para o dono escrita para o Grupo e Execução outros
Pela ordem primeiro dígito refere-se ao Usuário , segundo dígito ao Grupo, terceiro dígito a outros que não Usuário e Grupo.
Acabamos de ver as permissões de acesso para arquivos e diretórios, mas além dessas atribuições ainda existe os bits de atributos especiais,
Sticky Bits, Setuid and Setgid


  • Sticky bit e usado nos diretórios para prevenir deleções não desejadas, ou seja deleções acidentais provocadas por não proprietário, ou seja essa regra se aplica aos arqivos.
  • Setuid ou SUID, e aplicada ao campo de execução e permite a usuáios normais executarem a aplicação com se fossem os Proprietários, wSr.
  • Setgid ou SGID tem o mesmo efeito que SUID apenas ue se aplica as permissões de grupo.


SUID

Esta regra se aplica somente para arquivos executáveis (não tem efeito em diretórios).

Normalmente quem executa o programa é o dono do processo. Mas quando o arquivo tem a propriedade SUID ligada, o programa roda com o ID do proprietário do arquivo, e não com o ID de quem esta executando o programa. ou seja, quando um arquivo/programa executável tem o controle de acesso SUID, ele é executado como tivesse sido iniciado pelo próprio proprietário do arquivo/programa/processo.

A permissão de acesso especial SUID pode aparecer somente no campo Dono.

Exemplo:
O sistema Linux tem muitos arquivos com a propriedade SUID ligada, e isto obviamente tem um motivo lógico, é preciso ter muita cautela quando ligamos a permissão SUID, um exemplo é 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

Comandos:

Como ligar a opção SUID:

# chmod u+s exemplo.sh
# ls -lah
exemplo.sh
-rwsr-xr-x 1 root edson 0 2009-09-29 12:37 exemplo.sh
Note que a letra S apareceu no campo do usuário com executavél
Utilizando formato octal (4):

# chmod 4750 exemplo.sh
# ls -lah
exemplo.sh
-rwsr-xr-x 1 root edson 0 2009-09-29 12:37 exemplo.sh

Cpomo desligar o SUID:

# chmod u-s exemplo.sh
# ls -lah
exemplo.sh

-rw-r-xr-x 1 root edson 0 2009-09-29 12:37 exemplo.sh

Procurando SUID:
Por alguma ração você pode querer procurar por arquivos SUID, para evitar transtornos.

Procurando por SUID em um arquivo executável utilizando formato simbólico (s):
Faça isso dentro de seus diretórios, com já foi dito o linux tem inúmeros arquivos SUID.
Com o commando find com a opção -perm de permissão.

# find /home/edson -perm u=s
/home/edson/exemplo.sh

Utilizando o formato octal (4):

# find /home/edson -perm -4000
/home/edson/exemplo.sh

SGID


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.

Exemplo:
Se no diretório /home/edson tem o grupo progs e tem o SGID habilitado, então todos os arquivos dentro do diretório /home/edson serão criados com o grupo progs.
Assumindo que todos os arquivos compartilhados devem ter o mesmo grupo. A SGID se torna uma regrfa interessante.

Aplicando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# chmod g+s /home/progs
# ls -lah /home/
progs
drwxr-sr-x 2 TI progs 48 2106-03-16 13:21 .

Utilizando o formato octal (2):

# chmod 2750 /home/progs
# ls -lah /home/
progts
drwxr-s--- 2 TI progs 48 2006-09-26 23:21 .

Retirando SGID:

# chmod g-s /home/progs
# ls -lah /home/
progs
drwxr-xr-x 2 TI progs 48 2016-01-16 13:21 .

Procurando SGID:

Procurando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# find /home -perm /g=s
/home/progs

Procurando a propriedade SUID em um diretório executável utilizando formato octal (2):

# find /home -perm -2000
/home/TI

Sticky (Sticky bit)




Nos arquivos onde propriedade Sticky e aplicada, faz com que o sistema tenha um comportamento diferente mantendo uma cópia do programa na memória depois que o programa finaliza.
Esta mudança melhora o desempenho, com o implemento de um cache do programa para a memória dessa forma acelera as próximas execuções .

A propriedade Sticky impede que os arquivos possam ser deletados ou alterados por outros usuarios. Isso extremamente desejável quando pensamos em seguranç,, com o diretório em modo append-only (somente incremente). somente o usuário que é Dono do arquivo, poderá modificar os arquivos dentro de um diretório com essa a propriedade aplicada.

A permissão especial Sticky e aplicável somente para outros usuários nas permissões de acesso.

Exemplo:

Em um diretório onde todos os usuários devem ter acesso para criar arquivos temporários, e interessante aplicar a propriedade Sticky, para evitar transtornos.

Aplicando a propriedade Sticky em um arquivo executável com o formato octal (1):

# chmod 1750 pesadelo.sh
# ls -lah
pesadelo.sh
-rwxr-x--T 1 root root 2,2M 2016-01-12 12:45 pesadelo.sh

Aplicando a propriedade Sticky em um arquivo executável utilizando formato simbólico (t):

# chmod o+t pesadelo.sh
# ls -lah
pesadelo.sh
-rwxr-x--T 1 root root 2,2M 2016-01-12 12:45 pesadelo.sh

Aplicando a propriedade Sticky em um diretório utilizando formato simbólico (t):

# chmod o+t /meu
# ls -lah /
meu
drwxrwxrwt 8 root root 232 2016-01-13 00:22 .

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# chmod 1777 /meu
# ls -lah /
meu
drwxrwxrwt 8 root root 233 2016-01-13 23:22 .

Retirando Sticky:

# chmod o-t /tmp
# ls -lah /tmp

drwxrwxrwt 8 root root 233 2016-01-13 23:22 .

Procurando Sticky:

Aplicando a propriedade Sticky em um diretório utilizando simbólico (t):

# find /home/edson/ -perm /o=t

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# find /home/edson/ -perm -1000
/home/edson/pesadelo.sh

Referência:

Linux
Guia do Administrador do Sistema.
Editora Novatec – Rio de Janeiro
Segunda Edição – Revisada e Ampliada.
Author - Rubem E. Ferreira

Certificação LPI-1.
Editora Linux New Media do Brasil Ltda – 2009
Author – Luciano AntonioSiquieira.