Sincronizarea datelor între două servere cu LsyncD

Pentru sincronizarea datelor între servere, de obicei se folosește rsync pornit de un cronjob. Dar acesta presupune verificarea tuturor fișierelor dintr-o mapă ceea ce consumă resurse și timp în cazul unui volum mare de date.

LsyncD monitorizează fișierele modificate și le sincronizează doar pe ele, astfel impactul asupra performanței este practic nul. Pentru asta LsyncD utilizează inotify / fsevents.

Sincronizarea datelor este necesară cel mai des în cazul balansării sarcinii între două WEB Servere și mai multe, cînd conținutul dintre ele trebuie mențiunut identic.

Setările din acest tutorial au fost verificate pe sisteme Debian 7.9 și lsyncd 2.0.7.

Se instalează pachetele necesare:

apt-get install lsyncd pkg-config lua5.2 liblua5.2 rsync

Se adaugă mapă pentru setările lsyncd:

mkdir /etc/lsyncd/

Se adaugă fișierul de configurare:

vim /etc/lsyncd/lsyncd.conf.lua

Se inserează următorul conținut în el:

settings = {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.status",
statusInterval = 10
}
sync {
default.rsync,
source="/var/www/",
target="server2.md:/var/www/",
delete = false,
rsync = {
compress = true,
acls = true,
verbose = true,
owner = true,
group = true,
perms = true,
delete = false,
rsh = "/usr/bin/ssh  -o StrictHostKeyChecking=no"
}
}

În loc de server2.md se indică numele sau adresa IP a celui de-al doilea server. Pentru source și target se indică dosarele corespunzătoare. Pentru al doilea server se procedează la fel, indicîndu-se corect numele/adresa primului server.

Parametrul delete = false este foarte important în cazul dat, pentru că în caz contrar foarte ușor s-ar putea pierde date în caz de careva probleme de sincronizare.

Pe primul server se generează o cheie de securitate pentru utilizatorul root:

ssh-keygen -t rsa

Se afișează conținutul cheiei private:

cat /root/.ssh/id_rsa.pub

Cheia are următoarea formă:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAvmyHLLtwnZY9xDFOLV1oKteecmfukqgT+nK0Yr5DMySM7gvqNKiJbIjdxnYrpuQP1mNYWWCtvgf146LUiC9bVjeZIgjZZl93yi5PGKLGSknTNB0pQVNWx3aT6+UqbtEJVBUHWCu3KxWD5VIXD0gIpnqyPbIVft5hZXzmGZ2+F+TF6S++W5ygiYD47GkC9Ljs2iwvl6xKxlkRuZ4lrgsQng92AErBAjsH+dVGQx0I3niZEcCMagp4KOadxrEoqH/uEbr8i+MyaE1wG8opqsZ5KueCBvEdPS+K3S9DQ4D1MxHml2YVfgr/aGozb0rUpTJU9OQE1Qsy63HGt+VLTAOD [email protected]

Se inserează această cheie în fișierul /root/.ssh/authorized_keys de pe cel de-al doilea server.

În același mod se generează o cheie pe serverul al doilea și se autorizează conexiunea pe primul server.

Aceeași procedură se folosește pentru a permite conexiunea dintre servere fără parole.

Se pornește serviciul LsyncD:

service lsyncd start

Se verifică logurile pentu a determina dacă sincronizarea funcționează:

cat /var/log/lsyncd.log

Pentru monitorizare continuă:

tail -f /var/log/lsyncd.log

Salvarea setărilor curente pentru iptables ca script sh

Pentru aceasta vom folosi un script perl.  Creați un fișier cu numele:

mkscript.pl

Adăugați în el următorul conținut:

#!/usr/bin/perl 
use strict;

if (@ARGV && $ARGV[0] =~ /^-/) {
	print 'converts an iptables-save file to a shell script',
	"\nUse: $0 [filename]\n";
	exit 0;
}

open I, shift || '-' or die $!;

my($table,$ipt);

print "#!/bin/sh
#iptables script, generated from iptables-save file
IPT='/sbin/iptables'
";

while (<I>) {
	if (/^\s*(#|$)/) {
		print;
		next;
	}
	if (/^\*(.*)/) {
		$table = $1;
		$ipt = $table eq 'filter' ? '$IPT' : '$IPT -t '.$table;
		print "$ipt -F\n";
		print "$ipt -X\n";
		next;
	} elsif (/^COMMIT/) {
		$table = 0;
		next;
	}
	die unless $table;
	if (/^:(\S+) +([^- ]\S*)/) {
		print "$ipt -P $1 $2\n";
		next;
	} elsif (/^:(\S+)/) {
		print "$ipt -N $1\n";
		next;
	}
	s/^\[[0-9:]+\]\s*//;
	die unless /^-A/;
	print "$ipt $_";
}

Folosiți următoarea comandă pentru a genera scriptul:

iptables-save | mkscript.pl > /etc/firewall.sh

Convert iptables-save output to shell script.

Configurarea serverului ProFTPD pentru autentificare cu utilizatori de sistem şi conexiune SFTP

Implicit, serverul SSH pe sisteme GNU/Linux permite transferul de date prin protocolul SFTP. Pentru un sistem care nu implică conexiunea persoanelor cu drepturi restricţionate, e suficient.

Dar dacă este nevoie de a configura accesul unor persoane terţe, atunci apare necesitatea de izola aceşti utilizatori. Cea mai simplă şi funcţională soluţie în cazul dat este configurarea unui server FTP ce va lucra şi pe protocolul SFTP, pe un port aparte.

În acest exemplu vom utiliza ProFTPD şi un sistem de operare Ubuntu/Debian.

Instalăm serverul ProFTPD:

apt-get update && apt-get install proftpd

În fişierul /etc/proftpd/conf.d/sftp.conf adăugăm următorul conţinut:

<IfModule mod_sftp.c>
 SFTPEngine on
 Port 2222
 SFTPLog /var/log/proftpd/sftp.log
 SFTPHostKey /etc/ssh/ssh_host_rsa_key
 SFTPHostKey /etc/ssh/ssh_host_dsa_key
 SFTPAuthMethods password
 SFTPCompression delayed
 </IfModule>

În fişierul /etc/proftpd/proftpd.conf decomentaţi şi modificaţi (sau adăugaţi dacă lipsesc) următoarele rînduri:

DefaultRoot ~
 PassivePorts 50000 50010
 AuthOrder mod_auth_pam.c* mod_auth_unix.c

Dacă doriţi să dezactivaţi posibilitatea de conectare SFTP oferită de SSH (pe portul 22), atunci comentaţi (sau ştergeţi) în fişierul /etc/ssh/sshd_config următorul rînd:
Subsystem sftp /usr/lib/openssh/sftp-server

Reporniţi serverul ProFTPD:

service proftpd restart

Reporniţi serverul SSH (dacă aţi făcut modificări în el):

service ssh restart

Pentru autentificare se for folosi datele utilizatorilor din sistem. Pentru a adăuga un utilizator nou folosiţi instrucţiunea:

adduser numele_utilizatorul

Pentru conectare puteţi folosi FileZilla sau oarecare alt client. Setările sînt următoarele:
Host: hostname sau IP
Port: 2222
Protocol: SFTP
User: numele_utilizatorul
Password: parola_utilizatorului

Apache/PHP, Sendmail și SELinux împreună

SELinux este un modul de securitate a nucleului linux. Implicit, SELinux nu permite ca WEB-Serverul Apache să poată expedia mesaje prin intermediul componentei Sendmail, afișînd în mail.log următoarea eroare:
NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied

Această eroare poate induce în eroare, pentru că e un banal mesaj ce indică permisiuni greșite asupra dosarului. Variabila SELinux care gestionează permisiunea de expediere este httpd_can_sendmail

Pentru a verifica ce valoare are, se folosește instrucțiunea:

getsebool -a | grep httpd_can_sendmail

Rezultat:

httpd_can_sendmail --> off sau httpd_can_sendmail --> on

Dacă rezultatul este off, atunci trebuie setat în on pentru a permite expedierea mesajelor. Se folosește instrucțiunea:

setsebool -P httpd_can_sendmail 1

Montarea adițională a dosarelor în Linux (Permanent mount and bind)

Montare permanentă a unui dosar. fstab bind

Utilizînd un sistem de operare Linux, poate apărea necesitatea de a monta un dosar în altă locație.

Scop

Principalele motive sînt două: Pentru a oferi unui dosar spațiu de pe altă partiție fără a modifica structura partițiilor sau pentru a oferi unui utilizator acces într-un dosar în care el nu are acces direct. În primul caz se face montarea adițională atunci cînd conținutul unui dosar depășește spațiul alocat inițial și nu se dorește redimensionarea partițiilor, care implică mai multe cunoștințe, riscuri și timp. În cazul al doilea, montarea adițională reprezintă o modalitate eficientă și comodă de a oferi acces unor utilizatori sau programe în dosarele spre care ei/ele nu au acces direct, spre exemplu acces pentru un utilizator FTP în alt dosar decît dosarul gazdă. Montarea poate fi curentă, ceea ce înseamnă că la repornirea calculatorului va dispărea, sau permanentă.

Realizare

Pentru montarea curentă, în consola linux executați cu drepturile de administrator o comandă de tipul:
mount –bind /locație/nouă/ /dosarul/sursă/
Unde: /dosarul/sursă/ – este locul real unde se va afla tot conținutul, iar /locație/nouă/ – este dosarul în care conținutul se va afișa repetat.

Pentru montare permanentă, în fișierul de configurare /etc/fstab se adaugă pentru fiecare montare adițională cîte o înregistrare de tipul:
/dosarul/sursă/ /locație/nouă/ bind rw,bind 0 0

Atenție!

Dacă conținutul /etc/fstab va fi incorect, sistemul de operare nu va putea să se încarce! Orice modificare care o faceți în una din locații se va răsfrînge asupra conținutului real! Dacă la același dosar cu conținut au acces mai mulți utilizatori, modificați drepturile de acces conform necesităților!