CentOS readonly user voor backup

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Beste Tweakers!

Situatie: twee keer een vps met CentOS 6, op de webserver draaien een aantal websites, deze staan allemaal in /home/admin/domains/

De tweede vps wordt bij een andere partij in een ander datacenter gehuurd, dat is de backup-vps.

Nu wil ik graag op de webserver een 'backupuser' aanmaken die in de eerder vermelde map alleen kan lezen, dan kan ik vanaf de backup-vps een cronjob draaien met rsync en incremental backup maken, op de backup-vps kan ik hem dan inpakken en iedere dag/week/maand laten opslaan.

Vanaf de backup-vps kan ik al op de webserver inloggen zonder wachtwoord. Ik heb al meerdere avonden aan het zoeken geweest, maar kan niet echt de juiste uitleg vinden om een 'backupuser' op de webserver aan te maken.
Een user aanmaken lukt mij wel, alleen met het oogpunt op veiligheid wil ik graag als de backup-user alleen kan lezen in /home/admin/domains/.

Want stel, dat, bijvoorbeeld; op de backup-vps wordt ingebroken, dan kan diegene nooit schade aanrichten op de webserver. :)

//edit;
of nog beter, ik dan met de 'backupuser' ook websites van de user flip in /home/flip/domains/ backuppen?

[ Voor 5% gewijzigd door Martine op 09-02-2014 01:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dit is de verkeerde aanpak. Een backup stuur je naar de backupserver. Je wilt niet dat je vanaf je backupserver kunt inloggen. Zet dus op je webserver een script dat alleen kan rsyncen naar de backupmachine. Je moet even een user aanmaken op de backupserver die alleen rsync kan runnen. Die restrictie kun je keurig in de authorized_keys file zetten. Zie bijvoorbeeld hier voor een hint.

Overigens kun je exact dezelfde techniek gebruiken om wel vanaf de backupserver te verbinden met de webserver, maar dat zou ik dus niet doen. Het is veel ingewikkelder om het dan met rechten goed voor elkaar te krijgen.

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Maar waarom is dat dan de verkeerde aanpak? Wat is het voor- en nadeel om vanaf de webserver naar de backup-server een backup te sturen?

Acties:
  • 0 Henk 'm!

Verwijderd

Wat Cheetah probeert te zeggen is dat wanneer die webserver gekraakt wordt, eventuele toegang naar de back-up server dan ook op gelijk bekend is bij een cracker.

Dus: back-uppen vanaf de back-up server is veiliger dan wanneer het geïnitialiseerd wordt vanaf de webserver.

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Helder verhaal, alleen krijg ik het nog niet helemaal aan de praat. Ja, gewoon zonder restrictie van rsync in authorized_keys wel.

Op de backupserver staat in authorized_keys de volgende regel
command="rsync --server -vvnlogDtprze.iLs . /home/backup_server1/current" ssh-rsa AAAAB3Nz

Als ik nu op de webserver ben ingelogd en het command uitvoer;

rsync -azrv /home/admin/domains backup_server1@backup.domain.nl:/home/backup_server1/current

Dan krijg ik een hele rits bestanden waar achter staat "is uptodate". Dat geloof ik wel, graag wil ik de bestanden zien welke bijgewerkt zijn. Of ik wil helemaal niets zien. Dus de optie z vervangen door de q. (rsync -azrq ...), dan krijg ik niets te zien, maar na de run krijg ik deze melding;

Invalid block length 16777216 [sender]
rsync error: protocol incompatibility (code 2) at io.c(1333) [sender=3.0.6]


Uiteraard getest, en als ik het command=rsync bla bla niet in authorized_keys zet, dan werkt het gewoon super. Het gezocht, gezocht, maar niet gevonden. Ben ik de enige met dit probleem?

[ Voor 4% gewijzigd door Martine op 09-02-2014 15:07 ]


Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-10 08:15

deadinspace

The what goes where now?

Verwijderd schreef op zondag 09 februari 2014 @ 01:38:
Dit is de verkeerde aanpak. Een backup stuur je naar de backupserver. Je wilt niet dat je vanaf je backupserver kunt inloggen.
Daar ben ik het niet per se mee eens. Een backup-server hoeft minder services te draaien (geen webserver bv) en kan dus veiliger zijn. Daarmee zou het juist verstandiger kunnen zijn om de backup-server de verbinding te laten maken.

Bovendien vind ik dat het maken van de backup de verantwoordelijkheid is van de backup-server, en dat het daarmee terecht is als die de verbinding maakt (en foutafhandeling doet als dat mislukt).
Verwijderd schreef op zondag 09 februari 2014 @ 10:17:
Wat Cheetah probeert te zeggen is dat wanneer die webserver gekraakt wordt, eventuele toegang naar de back-up server dan ook op gelijk bekend is bij een cracker.

Dus: back-uppen vanaf de back-up server is veiliger dan wanneer het geïnitialiseerd wordt vanaf de webserver.
Dat is exact het tegenovergestelde van wat Cheetah schreef ;)
Martine schreef op zondag 09 februari 2014 @ 15:06:
Op de backupserver staat in authorized_keys de volgende regel
command="rsync --server -vvnlogDtprze.iLs . /home/backup_server1/current" ssh-rsa AAAAB3Nz
Weet je zeker dat dat de goede opties zijn? Hoe kom je aan die opties? In mijn backup-scenarios heb ik bv ook --sender als optie.
...maar na de run krijg ik deze melding;

Invalid block length 16777216 [sender]
rsync error: protocol incompatibility (code 2) at io.c(1333) [sender=3.0.6]
Zijn de rsync versies aan beide kanten gelijk?

Wat krijg je te zien als je op je webserver
ssh backup_server1@backup.domain.nl

doet (met command= in je authorized keys)?

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Nou, Cheetah heeft ergens wel gelijk, zonder wachtwoord inloggen, authorized_keys wijzigen en draaien met dat spul. Op de backupserver laat ik alle bestanden nu inpakken en naar een andere map weg schrijven dmv een cronjob, dan worden ze direct als root weg geschreven. Waarmee ze in principe veilig zijn.

Voordat de bestanden ingepakt worden checkt het script eerst even op als tweetal cache-files van de website wel geupdate zijn. Zo niet, dan is de rsync niet uitgevoerd en wordt het gestopt en een mail verzonden.

Hoe ik aan die opties kom? Als ik een dry run en voeg een extra -v toe met rsync staat het in een van de eerste regels die hij laat zien.

Als ik "backup_server1@backup.domain.nl", dan krijg ik niets. Er gebeurd niets, helemaal niets.

Beide rsync versies zijn gelijk.

als ik command="rsync --server --sender -vvnlogDtprze.iLs . /home/backup/bla/bla" ssh-rsa AAA met --sender erin heb staan krijg ik deze foutmelding.

sending incremental file list
ERROR: buffer overflow in recv_rules [sender]
rsync error: error allocating core memory buffers (code 22) at util.c(123) [sender=3.0.6]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error allocating core memory buffers (code 22) at io.c(600) [sender=3.0.6]


Zonder --sender krijg ik deze

sending incremental file list
delta-transmission enabled
domain.nl/
domain.nl/fileX
Invalid block length 10485761 [sender]
rsync error: protocol incompatibility (code 2) at io.c(1333) [sender=3.0.6]


Ik ga eens kijken als het vanaf een andere webserver wel lukt. Ben echt nog even aan het zoeken geweest, maar niet ergens krijg ik een duidelijk antwoord of kan ik uberhaupt iets vinden wat erop lijkt. 8)7

//edit;
morgen eens proberen als dit werkt. https://bugzilla.samba.org/show_bug.cgi?id=4163#c4 eerst op bed! :O

[ Voor 41% gewijzigd door Martine op 11-02-2014 02:58 ]


Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-10 08:15

deadinspace

The what goes where now?

Martine schreef op dinsdag 11 februari 2014 @ 01:03:
Nou, Cheetah heeft ergens wel gelijk, zonder wachtwoord inloggen, authorized_keys wijzigen en draaien met dat spul.
Gelijk met wat precies? Ik snap niet helemaal wat je bedoelt...
Hoe ik aan die opties kom? Als ik een dry run en voeg een extra -v toe met rsync staat het in een van de eerste regels die hij laat zien.
Haha, grapjas, hij laat dan doodleuk de opties van de dry run zien. Dus je probeert nu te backuppen met (serverside) een dry run :P

Haal de 'n' optie (ook wel bekend als --dry-run) eens weg, dan zou het wel moeten werken ;)

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Wat ik bedoel is dat het vrij simpel qua setup. Als je vanaf de webserver -> backupserver doet, hoef je op de webserver geen andere users aan te maken en zit je ook niet met rechten te klooien.

Waarmee ik rsync aanroep is het volgende;
rsync -azrv /home/admin/domains backup_server1@backup.domain.nl:/home/backup_server1/current

Als ik daar een extra -v en een -n aantoe voeg, dan geeft hij die "rsync --server -vvnlogDtprze.iLs bla bla" die ik in authorized_keys heb geplaatst. Om deze gegevens te krijgen heb ik deze een keer vanuit de command-line laten lopen en opgeslagen.

Ook vanaf een andere webserver heb ik hetzelfde probleem.


Een andere optie is om een read-only user op de webserver aan te maken die in de gehele map /home mag lezen. Dat kan natuurlijk ook nog. Alleen ik weet niet precies hoe dat moet, ben nog maar een beginner. Echter moet de optie van Cheetah toch werkend te krijgen zijn?

[ Voor 5% gewijzigd door Martine op 11-02-2014 15:21 ]


Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-10 08:15

deadinspace

The what goes where now?

Martine schreef op dinsdag 11 februari 2014 @ 15:20:
Wat ik bedoel is dat het vrij simpel qua setup. Als je vanaf de webserver -> backupserver doet, hoef je op de webserver geen andere users aan te maken en zit je ook niet met rechten te klooien.
Jawel, maar nu moet je op je backupserver een user aanmaken die alleen mag rsyncen, dus het setup-gedoe heb je evengoed, alleen op een andere machine ;)

Cheatahs argument ging over security (en daarop ben ik het met hem oneens).
Waarmee ik rsync aanroep is het volgende;
rsync -azrv /home/admin/domains backup_server1@backup.domain.nl:/home/backup_server1/current
Niet serverside.
Als ik daar een extra -v en een -n aantoe voeg, dan geeft hij die "rsync --server -vvnlogDtprze.iLs bla bla" die ik in authorized_keys heb geplaatst.
Ja... "rsync --server -vvnlogDtprze.iLs bla bla". Wat denk je dat die "n" doet met je rsync server? ;)
Een andere optie is om een read-only user op de webserver aan te maken die in de gehele map /home mag lezen. Dat kan natuurlijk ook nog. Alleen ik weet niet precies hoe dat moet, ben nog maar een beginner.
Dat is hoe ik het aanpak. Simpelweg op dezelfde manier: dat account alleen laten rsyncen dmv command-restricties in authorized_keys :)
Echter moet de optie van Cheetah toch werkend te krijgen zijn?
Uiteraard, het probleem dat je nu hebt staat los van welke machine je de backup laat initieren.

Acties:
  • 0 Henk 'm!

  • Martine
  • Registratie: Mei 2002
  • Niet online
Ehmm, heul erg bedankt!! Tsjaa,, dat is hem! Ik voel me nu toch wel een beetje nou ja. }:O Ik kan niet anders zeggen dat het nu werkt!

[...]
Dat is hoe ik het aanpak. Simpelweg op dezelfde manier: dat account alleen laten rsyncen dmv command-restricties in authorized_keys :)
Ja maar, stel je hebt op de webserver dus gebruikers pietje en jantje. Beide hebben een directory in /home/pietje en /home/jantje.

Hoe maak ik dan een user aan op de webserver die om beide directorys mag lezen en niet mag schrijven? Of nog beter, hoe maak ik een user aan die alleen in /home mag lezen? Want dan kan ik het hele verhaal natuurlijk omdraaien, wat in mijn ogen toch veiliger is en overzichtelijker.

Wat voor gebruiker wordt dat dan? Of moet ik gewoon de root in de authorized_keys file zetten. Is dat wel verstandig? Kun je mij een goede hint of tip geven?

Of moet ik voor iedere gebruiker een authorized_keys file aanmaken? Stel als die server straks 1001 gebruikers heeft, moet ik ze allemaal handmatig bij langs. Daarom backup ik liever gewoon in een keer de /home directory.

Want dan connect de backupserver naar de webserver en tadaa, haalt alle gewijzigde bestanden op, gooit ze in een tar, schijft ze weg, whatever en done. Dan heb je alles op de backupserver, is overzichtelijker. Daarbij komt ook nog als je dan maar één cronjob te laten draaien, in plaats van op iedere webserver een cronjob. Op de backupserver laat je die cronjob een script starten waarin je de hele rambam hebt opgeslagen wordt moet worden gebackupped.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 01-10 21:30

Hero of Time

Moderator LNX

There is only one Legend

Als je zonodig alles in een backup archief wilt hebben op een centrale plek, kijk dan naar echte backup software, zoals Bacula. Nu zit je met half gare oplossingen te werken die meer bedoelt zijn voor het in sync houden van systemen, niet om verschillende locaties naar een centrale plek te consolideren als backup.

Commandline FTW | Tweakt met mate


  • Martine
  • Registratie: Mei 2002
  • Niet online
Buiten het feit als het gemakkelijker is om misschien voor bestaande software te kiezen, wat is het verschil? Als ik dit eenmaal naar wens werkend heb is toch allemaal klaar en een voordeel hiervan is dat ik weet hoe het werkt. Bij het gebruik van backup software heb ik niets geleerd, als er dan een keer écht iets aan de hand heb zit in direct met de handen in het haar.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-10 08:15

deadinspace

The what goes where now?

Martine schreef op dinsdag 11 februari 2014 @ 22:50:
Ehmm, heul erg bedankt!! Tsjaa,, dat is hem! Ik voel me nu toch wel een beetje nou ja. }:O
Achja, dat zijn van die dingen waar je eindeloos overheen kunt kijken :P

Overigens heb ik de benodigde rsync opties op een andere manier uitgevonden: ik heb in authorized_keys het commando vastgezet op een shell-scriptje met de volgende inhoud:
#! /bin/sh
echo "$SSH_ORIGINAL_COMMAND" >> /tmp/ssh-command.log

Het gevolg is dat ssh het gevraagde commando niet uitvoert maar logt. Als je dan dus je rsync client uitvoert (als echte run, niet dry-run) dan krijg je in het log precies te zien wat rsync had willen uitvoeren.

Jouw methode werkt natuurlijk ook, mits je er aan denkt om de -n weg te halen O-)

Overigens, de --sender optie is slecht gedocumenteerd, maar die dient er volgensmij voor om rsync te beperken tot het verzenden van bestanden, wat in het geval van pull-backups de veiligheid zou verhogen.
Ja maar, stel je hebt op de webserver dus gebruikers pietje en jantje. Beide hebben een directory in /home/pietje en /home/jantje.

Hoe maak ik dan een user aan op de webserver die om beide directorys mag lezen en niet mag schrijven? Of nog beter, hoe maak ik een user aan die alleen in /home mag lezen? Want dan kan ik het hele verhaal natuurlijk omdraaien, wat in mijn ogen toch veiliger is en overzichtelijker.

Wat voor gebruiker wordt dat dan? Of moet ik gewoon de root in de authorized_keys file zetten. Is dat wel verstandig? Kun je mij een goede hint of tip geven?

Of moet ik voor iedere gebruiker een authorized_keys file aanmaken? Stel als die server straks 1001 gebruikers heeft, moet ik ze allemaal handmatig bij langs. Daarom backup ik liever gewoon in een keer de /home directory.
Laat ik even beginnen te zeggen dat ik niet vind dat je per se vanaf de backupserver hoeft te backuppen. Ik was het niet zozeer oneens met backuppen vanaf de webserver, maar meer met de notie dat backuppen vanaf de backupserver altijd fout is. Beide zijn valide manieren, en welke het beste is is afhankelijk van allerlei afwegingen :)

Ikzelf gebruik rsync om full-system backups te maken, dat betekent dat elke file op mijn productieserver ook op de backupserver aanwezig is. Inclusief files als /etc/passwd, /etc/shadow, de ssh private host key, ssh public client keys, SSL private keys, en weet ik wat nog meer. Dat geeft een aanvaller zo verschrikkelijk veel ammunitie dat als ze op mijn backupserver inbreken mijn productieserver een peuleschil moet zijn. Andersom is een ander verhaal.

Bovendien draait mijn productieserver veel services en mijn backupserver juist heel minimaal, en omdat ik op mijn backupserver zelden inlog kan ik daar verregaandere veiligheidsmaatregelen nemen zonder mezelf te irriteren. Dat alles maakt dat het risico op inbraak op mijn backupserver lager is en dat ik het dus prettiger vind om vanaf mijn backupserver op mijn productieserver in te loggen dan andersom.

Maar voor jouw situatie ligt dat misschien anders. Geen full-system backups maakt het al anders bijvoorbeeld :)

Voor jouw wensen zijn er verschillende opties, elk met hun eigen voor- en nadelen:

Backups maken als root. Één rsync-actie, leesrechten op alle bestanden. Maar als iemand het voor elkaar krijgt in te loggen op je ssh (door je private key te bemachtigen, door een bug in ssh, etc), en het vaststaande commando voor rsync toch weet te misbruiken, dan heb je een aanzienlijk groter probleem.

Een backup-user aanmaken, die lid maken van de groepen van al je gebruiker in /home, en zorgen dat alle files en directories in /home group-readable zijn (bv dmv een cronjob). Één rsync-actie, en minimale rechten. Alleen het stukje van files group-readable houden is een beetje bewerkelijk.

Per user backuppen. Op zich geen gekke optie; backup kan voor elke user overal bij waar hij bij moet kunnen. Het grootste nadeel is dat het iets meer configuratie is (authorized_keys voor elke user, en elke user instellen op de backupserver). Maar dat is op zich ook af te vangen, de authorized_keys kun je eventueel opnemen in /etc/skel/, en op de backupserver zou je het met één cronjob aan kunnen pakken door een stukje te automatiseren met zoiets:
#! /bin/sh

for USER in jantje pietje klaasje
do
    rsync -blabla "${USER}@webserver:" bla
    tar -bla bla
    rm -r bla
done


Backups van de webserver naar de backupserver pushen is natuurlijk ook nog steeds een optie. Cronjob per user. Public key per gebruiker in de authorized_keys op de backupserver. Maar deze optie is wel lastiger als je processing wil doen na een backup (zoals tarren).

Opties te over :P
Hero of Time schreef op woensdag 12 februari 2014 @ 08:30:
Als je zonodig alles in een backup archief wilt hebben op een centrale plek, kijk dan naar echte backup software, zoals Bacula. Nu zit je met half gare oplossingen te werken die meer bedoelt zijn voor het in sync houden van systemen, niet om verschillende locaties naar een centrale plek te consolideren als backup.
Ik denk dat rsync wel zo'n beetje het meestgebruikte stuk gereedschap is voor backups eigenlijk ;)

Maar je hebt wel een punt; zelf wat in elkaar zetten brengt in plaats van bestaande en geteste backup-software gebruiken brengt risico's met zich mee. Hoe gaat een zelfbouw-oplossing om met bv een volle doel-schijf?

Er zijn best wel relatief simpele pakketten op basis van rsync te vinden (rsnapshot is eentje die me zo te binnen schiet), het is misschien ook wel een goed idee om daar naar te kijken :)
Pagina: 1