Beveiliging server [Ubuntu]

Status
Niet open voor verdere reacties.

Bramvr

Gebruiker
Lid geworden
25 nov 2012
Berichten
216
Beste,

Ik ben bezig met het opzetten van een server (Ubuntu server) waarop een MySQL database zal draaien. Deze zal over het internet beschikbaar zijn. Dit omdat ik een programma in C# ga schrijven die de gegevens naar de database moet kunnen schrijven en lezen. Het C# programma moet buiten het netwerk ook aan de database kunnen daarom zal ik de MySQL server via port forwarding naar buiten brengen. Als eerste beveiliging dacht ik er dan ook aan om niet de standaard poort van MySQL te gebruiken maar zelf een poort te kiezen (verbeter me als ik fout moest zijn). Ook zal ik de MySQL verbinding over SSH laten gaan. Er is nog wel een nadeel verbonden met het verbinden naar de server over het internet. De aansluiting die ik heb heeft geen statisch IP adres maar daar heb ik ondertussen wel een oplossing voor gemaakt. Ik had al eens NO-IP gebruikt maar als het IP veranderd vind ik dat het wat lang duurt vooraleer de aanpassing is door gevoerd +- 5min. Ik heb nu zelf in Python een scriptje gemaakt waarbij ik steeds het publieke IP adres ga controleren. Als dit is veranderd upload ik het nieuwe IP adres naar een SFTP server die ik heb en deze is wel altijd beschikbaar (voor er vragen komen deze SFTP server heeft maar een beperkte opslag ruimt waardoor ik deze niet over heel het project gebruik). Dus als ik het C# programma start ga ik het publieke IP adres controleren dat op de SFTP server staat. Dit doe ik ook als er geen verbinding met de server kan worden gemaakt. Enkel zit ik hier nog wat met veiligheidsproblemen. Om te kunnen verbinden naar de SFTP server moet ik een gebruikersnaam en paswoord opgeven in de Python code maar deze paswoorden staan gewoon in plain tekst in de code. Dus als er nu iemand inbreekt in mijn server kan hij door de Python code te openen ook achter mijn gebruikersnaam en paswoord van de SFTP server komen zonder al te veel moeite te doen. Ik dacht al ik compileer deze code naar een pyc code maar helaas blijven de paswoorden nog steeds zichtbaar. Wat ik dan nog als enigste oplossing zie is dat ik de paswoorden lokaal encrypteer en dan het geëncrypteerde paswoord in de code op geef en dus zal het paswoord niet meer in plain tekst in de code staan. In de code zal dan het paswoord terug moeten gedecodeerd worden. Ook zal ik dan nog steeds de code moeten compileren naar een pyc extensie want anders kan de inbreker gewoon zien hoe ik het paswoord decodeer en kan hij dit ook gewoon doen. Dit heeft als gevolg heeft dat hij het paswoord nog snel te weten komt. Laat maar weten of mijn gedachten gang goed of slecht zit en wat ik het beste kan doen om het zo veilig als mogelijk te maken.

Nu kom ik terecht op de gebruikers. Ik heb nu enkel Ubuntu server geïnstalleerd (momenteel VirtualBox) dus ik heb nog maar enkel een root account. Nu dacht ik om de Python code op dit account te laten werken en voor de MySQL service een ander account aan te maken. Dus voor aan de Python code te geraken moet men dan het root paswoord kraken. Maar ik vraag me af hoe veilig is het root paswoord want eens men dit heeft kan men aan alles aan. Of doe ik dit beter op een andere manier?

Ik hoop dat het een beetje duidelijk is want het zit wel in mijn hoofd maar het is moeilijk te verwoorden :p
Dus als er nog vragen zijn hoor ik het graag!

Bram
 
Ik heb het even door gelezen en wat ik hierbij kan op uit opmaken is dat je nooit een virusscanner mag installeren want deze kan nog voor meer beveiligingslekken zorgen. Firewall met de standaard instellingen is wel aan geraden. Ook moet men vermijden om in te loggen als administrator men kan beter gebruik maken van sudo. Daar zit ik nog wel met een vraag. Dus met sudo krijg je evenveel rechten dan als je inlogt als administrator waarom is het dan het beste om niet in te loggen als administrator maar gewoon die taken te vervullen met sudo? Ook is het aangeraden om een stek wachtwoord te gebruiken voor het administrator account (dit is zeer logisch). Het goed beveiligen van het draadloze netwerk is ook sterk aangeraden. Ook het gebruik van verschillende gebruikersaccounts met de juiste premisions is strek aangeraden. Maar het C# programma heeft ook een login waarvan ik de login gegevens uit de MySQL database ga halen dus heb ik eigenlijk maar 1 gebruiker denk ik dan want ik moet al op de server aangemeld zijn voordat ik verder kan in het C# programma.

En ja enkel poort forwarding doen voor de poorten die ik nodig heb en alles over een SSL verbinding.

Zijn er nog tips?

EDIT: Standaard kan een MySQL niet bereiken over het internet maar enkel lokaal op de server zelf als ik deze aan pas dat deze wel bereikbaar is over het internet met een SSL verbinding is dit dan veilig genoeg?

Bram
 
Laatst bewerkt:
Laatst bewerkt:
Grafiche programma's zal ik niet hebben want ik maak gebruik van een Ubuntu Server versie. Maar het sudo gebeuren snap ik nu wel beter.

In mijn openingspost had ik al even verduidelijkte dat ik een klein Python programma had geschreven voor het snel ophalen van het publieke IP adres. Nu is de vraag hoe ik dit het beste kan beveiligen omdat dit een programma is waarin enkele paswoorden zijn opgenomen. De paswoorden zijn in plain text momenteel. Ik vermoed dat dit zeker niet veilig is. Ik heb al geprobeerd om deze code te compileren naar een pyc code maar de paswoorden zijn nog steeds zichtbaar. Hoe kan ik dit het beste oplossen?

Dit programma zal dus steeds werken als de server opstaat dus nu was de vraag of ik dit programma in een user zijn home directory moet zetten of ik het beter kan plaatsen in de /etc directory?
 
Grafiche programma's zal ik niet hebben want ik maak gebruik van een Ubuntu Server versie. Maar het sudo gebeuren snap ik nu wel beter.

In mijn openingspost had ik al even verduidelijkte dat ik een klein Python programma had geschreven voor het snel ophalen van het publieke IP adres. Nu is de vraag hoe ik dit het beste kan beveiligen omdat dit een programma is waarin enkele paswoorden zijn opgenomen. De paswoorden zijn in plain text momenteel. Ik vermoed dat dit zeker niet veilig is. Ik heb al geprobeerd om deze code te compileren naar een pyc code maar de paswoorden zijn nog steeds zichtbaar. Hoe kan ik dit het beste oplossen?

Dit programma zal dus steeds werken als de server opstaat dus nu was de vraag of ik dit programma in een user zijn home directory moet zetten of ik het beter kan plaatsen in de /etc directory?

Wachtwoorden dienen opgeslagen te worden in een file die niet leesbaar is voor een ander (wss chmod 600) en ingelezen IN de software.

Neem bijv de volgende config file:
Code:
[loginDetails]
name: admin
password: admin

Het python scriptje wat het inleest werkt dan als volgt:
Code:
import ConfigParser
Config = ConfigParser.ConfigParser()
Config.read("/opt/config.ini")

pass=Config.getString("password")

Overigens hoef je voor het ophalen van een public IP geen python the gebruiken, dit kan bash prima zelf met het curl commando:
Code:
curl http://ipecho.net/plain; echo

Voor meer handige cli snippets als deze zie: https://github.com/Mastermindzh/Scripts/blob/master/bash/bashrc/.alias
 
Maar in die file mag het paswoord dan wel in plain text staan? Wat als de hacker deze file op een of andere manier wel te lezen kan krijgen? Oke je zit met rechten op die file maar dan kan ik toch ook gewoon deze rechten toepassen op de code zelf want deze code moet altijd werken en dus moet niet gestart worden door een gebruiker maar door het systeem zelf (crontab). Of zit ik fout?

PS: Ik zag iet leuks passeren op het net om de server een klein beetje in de gate te houden. Het is het programma Netdata maar nu is het de vraag heeft er iemand van jullie een gedacht of dit veilig is omdat dit niet standaard in de Ubuntu packages zit?


Bram
 
Wachtwoorden opslaan in plain text is nooit een goed idee, nee. Je zou er een hash over kunnen gooien maar ook die zijn terug te draaien (overigens zal dat moeten want het wachtwoord wordt weer ergens gebruikt).
Maar door ze in een config te zetten kan je het script wel delen/aanpassen zonder problemen.
Ook is het makkelijker om van account te wisselen etc.
 
Dus als ik het goed begrijp moet ik even nog een scripje maken waarin er in de terminal wordt gevraagd om het paswoord in te vullen als dit nieuw of gewijzigd moet worden. Dit scriptje maakt dan een file aan waarin het paswoord dat is opgegeven in de terminal wordt opgeslagen maar dan met een hash er over.

Iemand nog ervaring met de beveiliging van de Netdata package?
 
Persoonlijk zou ik dit allemaal in 1 enkel programma gooien (verschillende methoden uiteraard) en dan werken met command line parameters.
Dan zou je dus bijv. hebben:

Code:
bash script.sh -p "newpassword"
en dan roept het bestand "script.sh" de methode om het wachtwoord te veranderen.

Een voorbeeld hiervan kan je vinden op: https://github.com/Mastermindzh/Code-examples/blob/master/Bash/parsing_command_line_paramaters.sh

PS:

Ik lees net de vraag opnieuw en merk dat er verbinding gemaakt wordt met een SFTP server (en niet FTP server), een SFTP server kan gewoon werken met keys :)
Door gebruik te maken van een key heb je geen wachtwoord meer nodig, je zet de trusted keys op de machine en hij kan inloggen zonder password prompt :)

Dit alles kan je doen met het relatief simpele "ssh-keygen" commando, een tutorial over hoe dit moet vindt je hier.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan