Administrando usuários no GNU/Linux e Samba via web com PHP

Fiz um pequeno servidor Samba com o Slackware 11, o cliente queria poder administrar os usuários por meio de uma página web, tarefa até muito simples para quem é habituado com programação em shell, PHP ou Perl, mas para mim e muitos administradores não. Depois de pesquisar consegui implementar scripts PHP para realizar estas tarefas.

[ Hits: 79.062 ]

Por: Carlos Affonso Henriques. em 08/02/2007


Configurando o Apache:



Primeiramente crie um usuário e um grupo para o Apache, ou seja, o "apache" será no sistema um usuário que atuará como as "mãos" do interpretador PHP para atuar no sistema operacional criando, deletando, habilitando e desabilitando usuários, tanto no Linux como no Samba.

# groupadd -g 48 -o apache
# useradd -u 48 -o -g apache -d /var/www -s /bin/false apache


Feito isso vamos definir no /etc/apache/httpd.conf o usuário "apache" bem como seu diretório raiz (DocumentRoot). Verifique os parâmetros abaixo se estão de acordo com seu httpd.conf, caso não estejam, coloque-os como está listado abaixo.

DocumentRoot "/var/www"
<Directory "/var/www/">
User apache
Group apache
Loadmodule php4_module libexec/apache/libphp4.so # Obs: No
Slackware 11 é desnecessária esta linha
Include /etc/apache/mod_php.conf
<IfModule mod_dir.c>
    DirectoryIndex index.html index.php index.htm default.php
</IfModule>

Pronto, seu servidor Apache já está pronto para comunicar-se com o seu interpretador PHP!

Considerações sobre segurança

ATENÇÃO: Estes scripts são muito simples e a configuração do PHP está default, não há qualquer implemento de segurança, portanto a página deve ficar em um diretório protegido por algum .htaccess, pois por tratar-se de uma rede pequena de uma pequena empresa de orçamento menor ainda, não foi necessário uma implementação mais sofisticada, portanto cuidado ao empregá-los em ambientes de produção mais sofisticados.

    Próxima página

Páginas do artigo
   1. Configurando o Apache:
   2. Configurando o seu arquivo /etc/sudoers
   3. Página e script para adicionar usuários
   4. Página e script para remover usuários
   5. Página e script para desabilitar usuários
   6. Página e script para habilitar usuários
   7. Bibliografia, fontes de consulta e agradecimentos
Outros artigos deste autor

Reconhecimento de placas de veículos com OpenALPR

Enviando e-mail pelo shell com smtp remoto

Obtendo TimeStamps da Blockchain com OpenTimestamps

Sistema de arquivos criptografado

Gateway autenticado com Apache, Iptables e CGI em shell

Leitura recomendada

PHP5 Orientado a Objetos: Visibilidade, herança e extensões de classes

Organizando projetos com a classe FastTemplate (parte 1)

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 2)

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 1)

Utilizando PEAR

  
Comentários
[1] Comentário enviado por andersonjackson em 08/02/2007 - 18:59h

Legal!!!

Só uma dica para a moçada, o pagode faz isso e muito mais.

http://lesp.anahuac.biz/index.php?option=com_content&task=section&id=1&Itemid=3

[2] Comentário enviado por jgama em 08/02/2007 - 21:07h

Se é para adcionar ou remover usuarios, não seria mais facil usar ssh, alias ficaria mais rapido.

Este é o meu ponto de vista, não quero desmerecer o tutorial do amigo.

Abraço

[3] Comentário enviado por capitainkurn em 09/02/2007 - 02:31h

Jgama, concordo com você mas quem vai administrar o sistema é o dono da empresa, que não sabe nada de Linux ou Shell e precisava de uma interface amigável.

[4] Comentário enviado por peregrino em 09/02/2007 - 09:33h

concordo com o capitainkurn e tambem fica aii uma boa fonte de estudos para poder apreimorar mais esse script por exemplo fazer ele trabalhar com LDAP

[5] Comentário enviado por lord_roxton em 09/02/2007 - 11:33h

Para administração de um ambiente com SAMBA/OpenLDAP já existem muitas ferramentas gráficas que são muito intuitivas, como por exempo phpldapadmin e GOSA! Neste caso específico usando apenas SAMBA acho que a idéia foi muito boa!

[6] Comentário enviado por capitainkurn em 10/02/2007 - 10:07h

Ah... mas só o trabalho que ia dar... como disse no artigo é um servidor pequeno, para uma empresa pequena e um orçamento menor ainda! Rssssssss é só um quebra galhos

[7] Comentário enviado por glasswalk3r em 12/02/2007 - 13:29h

Essa é uma excelente maneira de expor o servidor a crackers:

$adduser = "sudo useradd -g
users -d /home/{$_POST['login']} -m -s /bin/bash
{$_POST['login']} | echo {$_POST['login']}:{$_POST['senha']} |
sudo
chpasswd";
$cmd = shell_exec($adduser);

O script não filtra os valores recebidos pela aplicação web. Uma pessoa mais criativa poderia digitar algo como "jose > /etc/passwd" para a variável $_POST['login'] no script e corromper o servidor. Por favor, nem me falem de validação via Javascript, porque isso não funciona.

A iniciativa de desenvolver algo e liberar para outros utilizarem é muito legal, mas a primeira regra deveria ser verificar se já não existe um projeto iniciado dessa forma e tentar trabalhar nele. Além de evitar o desperdício de energia você tem a oportunidade de aprender com outras pessoas.

Existem vários sistemas de gerenciamento de usuários do Samba via web, a maioria para manipular servidores que usam LDAP como base de dados. Eu mesmo desenvolvi um em http://faus.sourceforge.net.

Esse projeto está parado há alguns meses quando eu percebi que a execução dos comandos do próprio Samba dá várias dores de cabeça além dos problemas de segurança. A melhor maneira de fazer isso seria integrar o código do próprio Samba para fazer chamadas RPC e manipular os usuários, da mesma forma que o UserManager do Windows faz. Claro que identificar quais bibliotecas do Samba usar e como usar requer um tempo considerável do qual não disponho.

É nessas horas que eu gostaria de receber mais ajuda com codificação. :-)

[8] Comentário enviado por coffani em 12/02/2007 - 14:03h

Parabéns pela iniciativa, como vc disse, empresa pequena, servidor pequeno e orçamento nem se fala...
Para quem num tem nada em mãos esse é um bom começo.. Vlw

[9] Comentário enviado por capitainkurn em 13/02/2007 - 11:16h

Conheço o FAUS, mas isso é um quebra galhos, apenas o dono da empresa que usa, quanto aos crackers que possam corromper o servidor isso pode ser fcilmente resolvido colocando-se os scripts e páginas de formulário dentro de um diretório protegido por um .htaccess em um servidor https. Na verdade eu ia postar como uma dica e não como um artigo, mas dada a quntidade de passos achei melhor postar como artigo.

[10] Comentário enviado por maurin em 28/02/2007 - 00:12h

Desculpe a ignorância,
Mas pelo que entendi neste site http://www.php.net/manual/pt_BR/function.escapeshellcmd.php

Este simples script evitaria esse problema ou não?
Ex.
<?php
$e = escapeshellcmd($userinput);

// Aqui não nos preocupamos se $e tem espaços
system("echo $e");
$f = escapeshellcmd($filename);

// aqui sim
system("touch \"/tmp/$f\"; ls -l \"/tmp/$f\"");
?>

Estou desenvolvendo uma solução OpenSource e na verdade seria bom verificar essa situação, antes de implementar esse codigo.

Atenciosamente,
Marcelo Maurin Martins
Coordenados do Projeto Jornada
http://maurinsoft.myvnc.com

[11] Comentário enviado por quartodazona em 20/09/2010 - 07:50h

Caro amigo, sei que já faz tempo este post, porém eu não consigo fazer o Debian 5 criar usuário pelo PHP de forma alguma.

Fiz todos os seus passos.

Criei um usuário apache e o coloquei num grupo específico como você mencionou, mas ele só consegue criar diretórios e arquivos quando eu o executo no php, ou seja, executo uma página em php passando um comando ou mandando executar um script que já faz isso.

Já tentei de várias formas e nada, mas como eu disse acima, se eu quiser criar diretórios ou arquivos usando os comandos abaixo, funciona numa boa:

echo `sudo useradd kibeloco`;

echo `useradd kibeloco`;

echo `sudo sh usernovo.sh`;

exec("sudo sh usernovo.sh");

$last_line = "sudo useradd kibeloco";
$cmd = shell_exec($last_line);

Já o coloquei no arquivo sudoers de várias formas:

- apache ALL=NOPASSWD: useradd smbpasswd userdel chpasswd <-- Este não rola nada destes comandos
- apache ALL=NOPASSWD: ALL <-- Totalmente inseguro este e não funciona o comando useradd
- apache ALL=NOPASSWD: /usr/sbin/useradd, /usr/bin/passwd, /usr/bin/openssl, /bin/false
- apache ALL=(ALL) ALL <-- Totalmente inseguro também, mas não funciona o comando useradd

O que eu descobri foi que se eu crio um usuário no Linux e dou privilégios no arquivo sudoers como fiz acima e executo o comando useradd dentro do Linux, consigo fazer tudo o que o root faz como descrito no arquivo sudoers, porém se eu pego este mesmo usuário e o coloco no grupo do apache como você falou e tento executar o comando useradd, não funciona.

Já revirei a net e não encontrei nada mais interessante que este e outro post aqui no Viva o Linux. Preciso implementar uma solução em uma determinada empresa e só preciso executar o comando useradd via browser para que este sufoco termine.

Alguém aí pode me ajudar?


[12] Comentário enviado por leandrosoaresluz em 20/03/2011 - 12:38h

cara, estou precisando de algo parecido para adicionar usuarios no squid....tem como?
abraços!!!

[13] Comentário enviado por walkerfelipe em 21/03/2012 - 23:30h

o Meu não deu certo quando clico em "Submit" aparece o código do php. o que faço?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts