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.040 ]

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


Página e script para desabilitar usuários



<html>
<head>
<title>blockuser</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form action="http://127.0.0.1/testadm/disable_tux.php" method="post" name="comando" id="comando">
<input name="login" type="text" id="login" size="30"
maxlength="30">
L<br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="Submit2" value="Reset">
</form>
</body>
</html>

Segue abaixo o código PHP responsável por desabilitar usuários (arquivo disable_tux.php):

<?
$disblesmb = "sudo smbpasswd -d {$_POST['login']}";
$cmd = shell_exec($disblesmb);

echo "O usuário {$_POST['login']} foi desabilitado com êxito no sistema";

#$insertGoTo = "./okdis.htm";
#if (isset($_SERVER['QUERY_STRING'])) {
#$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
#$insertGoTo .= $_SERVER['QUERY_STRING'];
#}
#header(sprintf("Location: %s", $insertGoTo));

?>
Página anterior     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

Access Point com cartão Atheros em Slackware 12.0

Enviando e-mail pelo shell com smtp remoto

O que é ForceCommand

Impedindo o compartilhamento de conexão

Reconhecimento de placas de veículos com OpenALPR

Leitura recomendada

Método de Newton e PHP

Utilizando PEAR

Trabalhando conteúdo dinâmico com Smarty

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

Polimorfismo e PHP 5

  
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