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

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


Página e script para adicionar usuários



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

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

Observem acima o path para onde está apontando para o script PHP, este é o script que adiciona usuários ao Linux e ao Samba.

Segue adiante o código PHP responsável pela adição de usuários (arquivo add_tux.php):

<?
$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);

$addsmb = "( echo {$_POST['senha']} ; echo {$_POST['senha']} ) |
sudo smbpasswd -as {$_POST['login']}";
$cmd = shell_exec($addsmb);

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

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

?>

As linhas comentadas logo acima são para caso você deseje que o PHP redirecione após adicionar um usuário para uma página com uma mensagem de sucesso, preferi usar apenas uma mensagem de echo, caso você opte por usar uma página de sucesso, comente a linha de echo de descomente as demais. O mesmo vale para os demais scripts que seguirão adiante.

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

Obtendo TimeStamps da Blockchain com OpenTimestamps

Quando próximo, finja estar longe; quando longe, finja estar próximo

Sistema de arquivos criptografado

SSH Connection With non-NIST Russian Cipher and Distro for Military Use

Balanceamento de carga e alta disponibilidade com Bonding Driver e Iproute2

Leitura recomendada

Utilizando PEAR

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

Organizando projetos com a classe FastTemplate (parte 1)

Engenharia de Software - Fazer melhor o software e fazer o software melhor

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