Linux e permissões



Introdução


Esse artigo visa instruir no gerenciamento de usuários e grupos do GNU/Linux para determinados comandos.


Recentemente houve a necessidade de criar um usuário e permitir acesso somente a alguns comandos.

Como sou meio exagerado pensei em retirar TUDO e depois liberar aos poucos, mas então a duvida, como liberar só um comando e bloquear todos os outros.

Achei que seria fácil, porém por padrão muitos comandos básicos vem liberados, por exemplo mkdir...
Com isso tive meu primeiro medo, digamos que o usuário crie infinitas pastas, deixando o HD lotado, logo ele irá travar todo os sistema.

Então resolvi realizar duas coisas:


1. Bloquear todos os comandos e permitir só o necessário.
2. Criar um espaço limitado para o usuário





Entendendo


O GNU/linux por padrão usa alguns arquivos para determinar senhas e permissões,
então vamos conhecer o básico deles antes de prossegir para os comandos.


Onde fica guardado as informações dos usuários ?


As informações mais importantes fica dentro de:



O passwd é o arquivo principal por armazenar as informações de cada usuário, dentro dele é possível ver qual grupo cada usuário pertence, se existe senha criptografada e qual é sua pasta de armazenamento.

Dentro dele temos algo semelhante a isso:



Uma explicação básica e comun em diversos foruns é:



root         = Usuario
x              = Senha criptografada estilo md5 ou superior
0              = Primeira sequencia de números indica a ID do usuário, tem que ser unica
0              = Segunda sequencia indica a ID do grupo também unica
/root/       = Pasta pessoal
/bin/bash = Shell que interpreta os comandos


Bom qualquer tutorial sobre permissão tem mais detalhes sobre essa pasta então não vou explicar muito.


Permissões de cada comando

No GNU/linux cada comando é separado por três classes de permissões, podemos ver elas entrando em algumas pasta e digitando o seguinte comando:



Veja a imagem abaixo:




Na esquerda repare a seguinte sequencia: -rwxr-xr-x

Vamos começar da esquerda para direita, temos o 1° caracter ele indica o tipo de arquivo por exemplo:

-      = arquivo comun
d     = pasta
l       = link simbolico



Depois temos o primeiro grupo de 3 casas -RWXr-xr-x, essas casas são a permissão do usuario ROOT:

Depois temos o segundo grupo de 3 casas -rwxR-Xr-x, essas casas são a permissão dos grupos.

Depois temos o terceiro grupo de 3 casas -rwxr-xR-X, essas casas são a permissão de qualquer usuário.

R = read ( Leitura )
W = Write ( Escrita )
X = Execute ( Executar)

Quem tiver duvidas sobre essa parte, consulte esse link http://www.infowester.com/linuxpermissoes.php

Lá está mais explicado e ilustrado.


Vendo os grupos existentes:

No GNU/linux o arquivo padrão responsável por armazenar os grupos é : /etc/group



Veja a imagem abaixo:



Esse arquivo é parecido com o /etc/passwd

A primeira linha da imagem, temos as seguintes informações.



root = Nome Grupo
x = Senha
0 = ID do grupo lembrando que ela é unica
tonnytg = Usuários dentro desse grupo



Permissão Acesso e Execução


Um bom motivo que me levou a escrever sobre isso, não foi a falta de conteúdo, pois existe uma grande quantidade na internet, o problema é que todos falam a mesma coisa só parte teorica.
Minha real necessidade não era criar grupo ou adicionar e retirar usuário, mas entender como fazer um determinado usuário realizar somente 1 comando.


Onde fica os comandos:

Os comandos básicos do GNU/Linux ficam dentro de: /bin

Temos também a pasta com os comandos de boot: /sbin1

Talvez alguns comandos que fiquem dentro de /usr/bin ou /usr/sbin estejam liberado

Se quiser saber mais sobre as pastas consulte o básico no link abaixo:

Link http://meupinguim.com/pastas-basicas-comuns-sistemas-linux/


Alterando as permissões


Vamos agora fazer todas as alterações somente em dois comandos mkdir responsável por criar as pastas e date por trocar a data.

Antes vamos fazer uma cópia de segurança:


$ cp -R /bin/mkdir /bin/mkdir_backup
$ cp -R /bin/date /bin/date_backup


Agora listaremos as permissões do comando mkdir:

$ ls -l /bin/mkdir /bin/date




Repare que o grupo é o root e que as ultimas 3 letras estão permitindo leitura e execução.
Então qualquer usuário que não esteja do grupo root entra na condição das 3 ultimas letras.
Para que isso não ocorra mais vamos remover essa ultimas 3 linhas.

$ chmod 750 /bin/mkdir
$ chmod 750 /bin/date

Agora vamos verificar com o ls novamente:

$ ls -l /bin/mkdir /bin/date

Com essa modificação só os usuários root ou quem for do mesmo grupo do comando terá permissão para executar.
Porém não é inteligente adicionar os usuários dentro do grupo root.



Se você quiser logue em um usuário comun e execute um dos comandos.


Criando novo Usuario

Para realizarmos nossos teste vamos criar um novo usuário assim não precisamos mecher em um usuário que usamos.

Crie usando o seguinte comando:

$ adduser testeuser


Testando

Logue com o usuário testeuser

$ su testeuser

Execute o comando mkdir ou date você verá falta de privilégio ou algo semelhante a isso:




Criando um novo grupo

Agora que retiramos as permissões para que qualquer usuário não executar o comando mkdir ou date, vamos criar nosso grupo.

$ groupadd especial


Dando permissão

Agora que temos nosso grupo especial e nosso usuario testeuser, vamos atribuir as permissões ao comando.

Antes vamos adicionar o comando ao grupo especial:

$ chgrp especial /bin/mkdir

O comando acima troca o grupo do mkdir de root para especial.

Vamos verificar se o grupo mudou

$ ls -l /bin/mkdir




Vamos deixar o date fora do grupo especial, assim podemos fazer comparações futuras.


Adicionando no grupo

Agora vamos adicionar o usuário ao grupo, o bom de tudo isso é que podemos liberar o comando para os usuários apenas adicionando eles a um grupo.

No Arch Linux executamos o seguinte comando:

$ usermod -G GRUPO USER

No nosso cenário ficará assim:

$ usermod -G especial testeuser

Vamos conferir se foi adicionado corretamten com o seguinte comando.

$ id testeuser

Repare que o id do grupo já foi atribuindo ao usuário


Testando Novamente

Logue com o usuário testeuser

$ su testeuser

Execute o comando mkdir, depois o date e você verá algo semelhante a isso:



Pronto agora temos nossos comandos funcionando somente para quem estiver dentro daquele grupo, caso queira fazer o mesmo para outros comandos não esqueça de criar uma cópia de segurança dos arquivos originais para evitar qualquer problema afinal seu sistema precisa deles para funcionar.

Caso você troque as permissões da pasta original basta chamar pelo comando que está dentro da pasta backup.

$ /bin_backup/mkdir

Da forma acima você está chamando o comando mkdir que está dentro de outra, pasta. Agora vamos para a outra parte do how to...


Criando uma pasta limitada


Agora que temos nossas permissões baseada em grupos, vamos criar um espaço limitado e colocar de uma forma que o user só possa gasta aquele espaço. Isso será bom para resolver aquele problema que imaginei, se um usuário criar N arquivos só apara lotar o HD.


O espaço na Home

Existem algumas opções para especificar as cotas como por exemplo o pacote: quota-tools

Instalando essa ferramente acima o linux tem uma forma controlada sobre a quota do usuário, porém irei fazer de uma forma antiga a grosso modo.

Primeiro irei criar um arquivo com determinado tamanho:

$ dd if=/dev/zero of=/opt/testeuser_arquivos bs=1M count=10

O comando acima irar criar um arquivo chamado testeuser_arquivo, com o tamanho de 10Megas

$ mkfs.ext3 /opt/testeuser_arquivos

O comando acima irá FORMATAR no tipo EXT3, mas você pode usar o seu tipo preferido, o padrão atualmente é EXT4

Montando o espaço

Depois que criamos o usuário por padrão ele tem uma pasta com seu nome dentro de /home/testeuser

Então basta montar nosso arquivo de 10 Megas dentro dessa pasta

$ mount -o loop /opt/testeuser_arquivos /home/testeuser


Verificando

Para verificar basta digitar o comando abaixo e ver o tamanho da pasta:

$ df -h

Pronto temos nossa pasta criada e limitada e nossos arquivos com as permissões que quisermos.



Resumindo


Achei bem interessante o tema desse artigo, pois sempre há um problema em colocar um desconhecido a usar nossa maquina ou servidor.

Espero que se alguém tiver opções melhores de como agir em uma situação como essa deixe o comentário para enriquecer o conteúdo e ajudar quem estiver precisando dessas informações.

Afinal o mundo Open-Source está vivo até hoje graças a ajuda e compartilhamento de TODOS NÓS.



Att.
Antonio Thomacelli Gomes
E-mail tonnytg@gmail.com
http://linuxresort.blogspot.com

2 comentários:

  1. Parabéns pelo seu artigo ficou muito bom e me ajudou bastante.

    ResponderExcluir