Solução completa de serviço de correio baseado em software livre (Debian GNU/Linux)
Recompilação do artigo "Postfix-2 + domínios virtuais + MySQL + SASL + PostfixAdmin", de autoria do Sr. Marco A. S. Máximo. Nesse novo artigo os passos foram tomados levando em consideração os recursos do Debian e usando (sempre que possível) os pacotes dos repositórios oficiais.
Parte 10: Instalando o PostfixAdmin
O PostfixAdmin é um ambiente de administração do Postfix+MySQL, feito totalmente em PHP. Com ele, você pode:
- Criar domínio virtuais;
- Criar/Excluir contas virtuais;
- Criar/Excluir aliases;
- Alteração de senhas etc.
o PostfixAdmin não tem pacote na árvore oficial do Debian, então vamos baixar a partir do site oficial. No momento da criação desse artigo, a versão disponível é a 2.1.0.
http://high5.net/postfixadmin/download.php?file=postfixadmin-2.1.0.tgz
# tar zxvf postfixadmin-2.1.0.tgz -C /var/www/
# mv /var/www/postfixadmin-2.1.0 /var/www/postfixadmin
# cd /var/www/postfixadmin
# cp config.inc.php.sample config.inc.php
Edite o arquivo "config.inc.php" e configure as variáveis conforme a sua configuração. As principais são:
// Login information for the database
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'xxxxx';
$CONF['database_name'] = 'postfix';
$CONF['default_language'] = 'pt-br';
$CONF['quota'] = 'YES';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'xxxxx';
$CONF['database_name'] = 'postfix';
$CONF['default_language'] = 'pt-br';
$CONF['quota'] = 'YES';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
Depois disso adicione as seguintes linhas:
//Comando SUDO
$CONF['sudo_path']= "/usr/bin/sudo";
//PATH do script adduser.sh e userdel.sh
$CONF['adduser_path']= "/var/www/adduser.sh";
$CONF['userdel_path']= "/var/www/userdel.sh";
// Diretório base das caixas postais dos usuários
$CONF['home_base'] = "/var/spool/correio/";
// Final das alterações necessárias no arquivo config.inc.php
$CONF['sudo_path']= "/usr/bin/sudo";
//PATH do script adduser.sh e userdel.sh
$CONF['adduser_path']= "/var/www/adduser.sh";
$CONF['userdel_path']= "/var/www/userdel.sh";
// Diretório base das caixas postais dos usuários
$CONF['home_base'] = "/var/spool/correio/";
// Final das alterações necessárias no arquivo config.inc.php
Após isso edite o arquivo /var/www/postfixadmin/delete.php e localize as seguintes linhas:
$result = db_query ("DELETE FROM alias WHERE address='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</div>";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "delete alias", $fDelete);
}
Modifique-as para:
$result = db_query ("DELETE FROM alias WHERE address='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</div>";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "delete alias", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</div>";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "delete alias", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
Depois localize as linhas:
$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</div>";
}
else
{
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($SESSID_USERNAME, $fDomain, "delete mailbox", $fDelete);
}
}
e modifique-as para:
$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</div>";
}
else
{
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($SESSID_USERNAME, $fDomain, "delete mailbox", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
}
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</div>";
}
else
{
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($SESSID_USERNAME, $fDomain, "delete mailbox", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
}
Abra o arquivo /var/www/postfixadmin/admin/delete.php e localize as seguintes linhas:
if ($fTable == "alias" or $fTable == "mailbox")
{
$result = db_query ("DELETE FROM alias WHERE address='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</div>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_log ($CONF['admin_email'], $fDomain, "delete alias", $fDelete);
}
$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</div>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($CONF['admin_email'], $fDomain, "delete mailbox", $fDelete);
}
}
}
e modifique-as para:
if ($fTable == "alias" or $fTable == "mailbox")
{
$result = db_query ("DELETE FROM alias WHERE address='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</div>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_log ($CONF['admin_email'], $fDomain, "delete alias", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</div>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($CONF['admin_email'], $fDomain, "delete mailbox", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
}
}
{
$result = db_query ("DELETE FROM alias WHERE address='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</div>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_log ($CONF['admin_email'], $fDomain, "delete alias", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</div>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($CONF['admin_email'], $fDomain, "delete mailbox", $fDelete);
// Executa o script em shell que APAGA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $userdel_path .' '. $home_base .' '. $fDelete .' '. $fDomain);
}
}
}
Calma!!! Vai dar tudo certo... só faltam mais alguns arquivos ;), vamos para o /var/www/create-mailbox.php e localize as linhas:
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
e modifique-as para:
// Executa o script em shell que CRIA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
Agora vamos para o /var/www/create-alias.php e localize as linhas:
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br /> ";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "create alias", "$fAddress -> $fGoto");
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)<br /> ";
}
e modifique-as para
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br /> ";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "create alias", "$fAddress -> $fGoto");
// Executa o script em shell que CRIA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)<br /> ";
}
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br /> ";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "create alias", "$fAddress -> $fGoto");
// Executa o script em shell que CRIA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)<br /> ";
}
Agora vamos para o /var/www/admin/create-alias.php e localize as linhas:
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />";
}
else
{
db_log ($CONF['admin_email'], $fDomain, "create alias", "$fAddress -> $fGoto");
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)</br />";
}
e modifique-as para:
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />";
}
else
{
db_log ($CONF['admin_email'], $fDomain, "create alias", "$fAddress -> $fGoto");
// Executa o script em shell que CRIA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)</br />";
}
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />";
}
else
{
db_log ($CONF['admin_email'], $fDomain, "create alias", "$fAddress -> $fGoto");
// Executa o script em shell que CRIA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)</br />";
}
Agora vamos para o /var/www/admin/create-mailbox.php e localize as linhas:
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
else
{
db_log ($CONF['admin_email'], $fDomain, "create mailbox", $fUsername);
$tDomain = $fDomain;
e modifique-as para:
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
else
{
db_log ($CONF['admin_email'], $fDomain, "create mailbox", $fUsername);
// Executa o script em shell que CRIA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$tDomain = $fDomain;
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
else
{
db_log ($CONF['admin_email'], $fDomain, "create mailbox", $fUsername);
// Executa o script em shell que CRIA o usuário no sistema e suas configuracões
shell_exec(''. $sudo_path .' '. $adduser_path .' '. $home_base.' '. $fUsername .' '. $fDomain);
$tDomain = $fDomain;
Ufa!!! pronto... vamos ao próximo passo! ;)
A documentação oficial do PostfixAdmin sugere você mudar as permissões dos arquivos conforme os comandos abaixo:
# cd /var/www/
# chown www-data:www-data postfixadmin/ -R
# cd /var/www/postfixadmin
# chmod 640 *.php *.css
# cd /var/www/postfixadmin/admin/
# chmod 640 *.php .ht*
# cd /var/www/postfixadmin/images/
# chmod 640 *.gif *.png
# cd /var/www/postfixadmin/languages/
# chmod 640 *.lang
# cd /var/www/postfixadmin/templates/
# chmod 640 *.tpl
# cd /var/www/postfixadmin/users
# chmod 640 *.php
Depois de configuradas as variáveis e as permissões de diretório, acesse a página principal (http://localhost/postfixadmin/) e clique no link setup, após isso apague o arquivo setup.php.
# rm -f /var/www/postfixadmin/setup.php
Habilite o acesso à página de administração de domínio do PostfixAdmin, no meu caso usarei o usuário "admin":
# cd /var/www/postfixadmin/admin/
# htpasswd .htpasswd admin
New password:
Re-type new password:
Updating password for user admin
Vamos configurar o Apache para validar usuários quando necessário, edite o arquivo /etc/apache2/sites-available/default e troque a seguinte linha:
AllowOverride None
por:
AllowOverride AuthConfig
Crie o arquivo /var/wwww/postfixadmin/admin/.htaccess com o seguinte conteúdo:
# Inicio do arquivo .htaccess
AuthName "Acesso Restrito à Usuários"
AuthType Basic
AuthUserFile /var/www/postfixadmin/admin/.htpasswd
require valid-user
# final do arquivo .htaccess
AuthName "Acesso Restrito à Usuários"
AuthType Basic
AuthUserFile /var/www/postfixadmin/admin/.htpasswd
require valid-user
# final do arquivo .htaccess
Reinicie o servidor Apache:
# /etc/init.d/apache2 restart
Será necessário fazer algumas alterações no postfixadmin para que ele se enquadre em nossa solução:
- Adaptação de 2 scripts para CRIAÇÃO e EXCLUSÃO de usuário. Isso foi necessário, pois o MAILDROP nesse ambiente, não cria o MAILDIR/ do usuário caso ele não exista. Para a EXCLUSÃO, o Postfixadmin não apaga o diretório dos usuários.
- Uso do SUDO para dar permissões de execução para esses dois scripts.
#!/bin/bash
# Script para criacão dos diretórios dos usuários
# Criado por Marco A. S. Maximo
# Modificado em 12/08/2005 por Erlon Sousa Pinheiro
#
home_base=$1
if [ ! "$home_base" ]; then
echo "Falta uma variavel"
exit 0
fi
login=$2
login=`echo $login |cut -f1 -d@`
if [ ! "$login" ]; then
echo "Falta uma variavel"
exit 0
fi
domain=$3
userdir="$home_base/$domain/$login"
maildirmake $userdir
chmod -R 770 $userdir
chown -R maildrop:www-data $userdir
#### Final do Script /var/www/adduser.sh
# Script para criacão dos diretórios dos usuários
# Criado por Marco A. S. Maximo
# Modificado em 12/08/2005 por Erlon Sousa Pinheiro
#
home_base=$1
if [ ! "$home_base" ]; then
echo "Falta uma variavel"
exit 0
fi
login=$2
login=`echo $login |cut -f1 -d@`
if [ ! "$login" ]; then
echo "Falta uma variavel"
exit 0
fi
domain=$3
userdir="$home_base/$domain/$login"
maildirmake $userdir
chmod -R 770 $userdir
chown -R maildrop:www-data $userdir
#### Final do Script /var/www/adduser.sh
Após isso crie o script /var/www/userdel.sh com o seguinte conteúdo:
#!/bin/bash
# Script para exclusão dos diretórios dos usuários
# Criado por Marco A. S. Maximo
# Modificado em 12/08/2005 por Erlon Sousa Pinheiro
#
home_base=$1
if [ ! "$home_base" ]; then
echo "Falta uma variavel"
exit 0
fi
login=`echo $2|cut -d@ -f1`
if [ ! "$login" ]; then
echo "Falta uma variavel"
exit 0
fi
domain=$3
userdir="$home_base/$domain/$login"
rm -rf $userdir
#### Final do script /var/www/userdel.sh
# Script para exclusão dos diretórios dos usuários
# Criado por Marco A. S. Maximo
# Modificado em 12/08/2005 por Erlon Sousa Pinheiro
#
home_base=$1
if [ ! "$home_base" ]; then
echo "Falta uma variavel"
exit 0
fi
login=`echo $2|cut -d@ -f1`
if [ ! "$login" ]; then
echo "Falta uma variavel"
exit 0
fi
domain=$3
userdir="$home_base/$domain/$login"
rm -rf $userdir
#### Final do script /var/www/userdel.sh
Após isso modifique as permissões dos scripts com o seguinte comando:
# chmod 700 /var/www/*.sh
Configuração do SUDO
Como comentei antes, por causa do MAILDROP, nesse ambiente precisei criar 2 scripts "adduser.sh" e "userdel.sh". Esses scripts devem possuir permissão de ROOT para execução. A forma que achei para resolver esse problema, foi o uso do SUDO.
* Se alguém tiver alguma sugestão melhor, por favor entre em contato.
Edite o arquivo /etc/sudoers e adicione as seguintes linhas:
#POSTFIXADMIN
www-data ALL=NOPASSWD:/var/www/adduser.sh
www-data ALL=NOPASSWD:/var/www/userdel.sh
www-data ALL=NOPASSWD:/var/www/adduser.sh
www-data ALL=NOPASSWD:/var/www/userdel.sh
E ponto final (por enquanto), seu postfixadmin já está configurado e pronto para a utilização!
Configurações bem detalhadas... Com certeza vai facilitar a vida de muita gente.
Fica a sugestão para implementar um webmail...