Scripts de importação de usuários (MTA)

De Wiki Hackstore

Importando usuários do /etc/passwd

Este script funciona de uma forma genérica, buscando os usuários do arquivo /etc/passwd e adicionando-os os domínios configurados no qmail.

#!/bin/bash

# Importar destinatarios dos dominios virtuais

while IFS=: read domain virtual;do
grep $virtual /etc/passwd |grep byemail |cut -d: -f1 | \
awk '{print $1 "@'$domain'"}' |sed s/$virtual-//g  > /opt/yaxkin/etc/users-virtual-$domain
done < /var/qmail/control/virtualdomains

# Importar destinatarios do dominio principal

while read dominio;do
grep byemail /etc/passwd | \
cut -d: -f1 |egrep -v "^$|[#;]" |awk '{print $1 "@'$dominio'"}' |grep -v "-" > /opt/yaxkin/etc/users-$dominio
done < /var/qmail/control/defaultdomain

Dê permissão de execução ao script recém criado:

chmod +x /opt/yaxkin/scripts/users_sync.sh

Adicione o script para rodar automaticamente a cada 3 minutos:

echo "*/3 * * * * root /opt/yaxkin/scripts/users_sync.sh > /dev/null 2>&1" > /etc/cron.d/yaxkin_users


Importando usuários do qmail armazenados no mysql

Para o script abaixo, considere algumas informações:

  • Senha de root do mysql: senhabanco
  • Base de usuários: vpopmail
  • Campo onde encontram-se os nomes dos usuários: pw_name
  • Comando egrep -v "^$|[#;]": remove as linhas em branco do arquivo
  • Comando


O script basicamente gera uma lista com todas as tabelas existentes no banco de dados vpopmail. Após isso, é realizado um while utilizando a lista gerada anteriormente para separar as listas de usuários já com o campo @domínio.

Crie um usuário no mysql que tenha permissão de acesso ao banco:

GRANT ALL ON banco.* TO usuario@'%' IDENTIFIED BY 'senha';
#!/bin/bash
date=`/bin/date`
 
#define quais são os domínios
mysql -u root -p'senhabanco' vpopmail -e "show tables" |grep "_" |grep -v "Tables_in_vpopmail" |grep -v "dir_control" |sort > /opt/yaxkin/etc/domains.txt

#gera listas
echo -e "$date, sincronizando usuarios... \n"
 
while read dominio;do
domain=`echo $dominio | sed 's/_/./g'`
echo $domain
mysql -u root -p'senhabanco' vpopmail -e "select pw_name from $dominio;" |grep -v "pw_name" | egrep -v "^$|[#;]"  |awk '{print $1 "@'$domain'"}' > /opt/yaxkin/etc/users-$domain

done < /opt/yaxkin/etc/domains.txt

ou

mysql vpopmail -e "select pw_name,pw_gecos from vpopmail where pw_domain='hackstore.com.br' "|awk '{print $1,":",$2}' | sed s,' : ',:,g |iconv -f iso-8859-1 -t utf-8 > all.txt 

ou

mysql -h 127.0.0.1 -uyaxkin -p'senhabanco' vpopmail -e "select pw_domain from vpopmail"|sort|uniq|grep -v "pw_domain" > /opt/yaxkin/etc/domains.txt


while read dominio;do

domain=`echo $dominio | sed 's/_/./g'`

mysql -h 127.0.0.1 -uyaxkin -p'senhabanco' vpopmail -e "select pw_name from vpopmail where pw_domain='$domain'"|grep -v "pw_name" | egrep -v "^$|[#;]"  |awk '{print $1 "@'$domain'"}' > /opt/yaxkin/etc/users-$domain

done < /opt/yaxkin/etc/domains.txt


Allowto e MYSQL

  • Crie um usuário no mysql e use-o para dar o select dos users;
  • Crie um script que irá gerar automaticamente a lista de usuários válidos;
#!/bin/bash
mysql -uyaxkin -pyaxkin123# mail -e "select email from users;" | egrep -v "^$|[#;]" > /opt/yaxkin/etc/smtp.allowto
  • Dê permissão de execução ao script:
chmod +x /opt/yaxkin/scripts/allowto-mysql
  • Coloque o script para rodar no crontab a cada 1 minuto
echo "*/1 * * * * root /opt/yaxkin/scripts/allowto-mysql" >> /etc/crontab


Padrão PostfixAdmin/IredMail MySQL

1. crie o arquivo /opt/yaxkin/scripts/allowto.sh

vim /opt/yaxkin/scripts/allowto.sh

2. salve o conteúdo do script, alterando a senha em db_password.

#!/bin/bash
date=$(/bin/date)
database='vmail'
db_user='vmail'
db_password='senha_do_banco_vmail'

select_domain(){
mysql -u $db_user -p$db_password $database -e "select domain from domain;" |grep -v domain
return $var
}

sinc_user(){
mysql -u $db_user -p$db_password $database -e "select address from alias where domain = '$1' order by address;" |grep -v address
}
for n in $(select_domain)
 do
    echo -e "$date, Synchronizing the users..."
    echo -e "Domain: $n" 
    sinc_user $n > /opt/yaxkin/etc/users-$n
done >> /var/log/sync_user.log

3. Dê permissão de execução ao script:

chmod +x /opt/yaxkin/etc/scripts/allowto.sh

4. Adicione o script para rodar automaticamente a cada 10 minutos no crond ou crontab.

echo "*/10 * * * * root /opt/yaxkin/scripts/allowto.sh" > /etc/cron.d/yaxkin_users
echo "*/10 * * * * root /opt/yaxkin/scripts/allowto.sh" >> /etc/crontab


Padrão Nettion MySQL

1. crie o arquivo /opt/yaxkin/scripts/allowto.sh

vim /opt/yaxkin/scripts/allowto.sh

2. salve o conteúdo do script, alterando a senha em db_password.

#!/bin/bash
date=$(/bin/date)
database='sq'
db_user='useremail'
db_password='senha_banco'

select_domain(){
mysql -u $db_user -p$db_password $database -e "select DISTINCTROW pw_domain from vpopmail;" |grep -v pw_domain
return $var
}
sinc_user(){
mysql $database --user=$db_user --password=$db_password -e "select DISTINCTROW pw_name as coluna from vpopmail where pw_domain = '$1' union all select  DISTINCTROW  alias as coluna from valias where domain = '$1';" |awk '{print $1 "@'$1'"}' | grep -v coluna@$1
}
for n in $(select_domain)
do
echo -e "$date, Synchronizing the users..."
echo -e "Domain: $n" 
sinc_user $n > /opt/yaxkin/etc/users-$n
done >> /var/log/sync_user.log


3. Dê permissão de execução ao script:

chmod +x /opt/yaxkin/scripts/allowto.sh

4. Adicione o script para rodar automaticamente a cada 10 minutos no crond ou crontab.

echo "*/10 * * * * root /opt/yaxkin/scripts/allowto.sh" > /etc/cron.d/yaxkin_users
echo "*/10 * * * * root /opt/yaxkin/scripts/allowto.sh" >> /etc/crontab