
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.
1°
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.
2° 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.
3° 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.
1° 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/
2° 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.
3° 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
4° 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:
5° 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
6° 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.
7° 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
8° 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.
1° 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
2° 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
3° 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








Parabéns pelo seu artigo ficou muito bom e me ajudou bastante.
ResponderExcluirObrigado você pelo retorno. :)
Excluir