Kan AI vechten met toenemend aantal ransomware-aanvallen?
Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek
Er zijn veel manieren om het instellen en configureren van een box te automatiseren. Om welke reden dan ook, als ons hele systeem op dit moment uit slechts één enkele box bestaat, is het opzetten van een volledige SCM-infrastructuur (Software Configuration Management) overdreven. Shell-scripts zijn een optie, maar we kunnen ook een uitgeklede versie van SCM gebruiken die beschikbaar is in enkele van de tools die er zijn. Chef is een van de populaire opties en "chef-solo" is de stand-alone configuratiemodus van Chef, waarbij we geen extra knooppunt nodig hebben om op te treden als "chef-server". Het enige dat nodig is, is een URL of een pad naar een tarballpakket met kookboeken van chef-koks. Vergeleken met shell-scripts is dit type aanpak meer declaratief en efficiënter en is het ook een goede introductie om aan de slag te gaan met SCM's of IaC-processen (Infrastructure as Code).
De 'recepten' in een 'kookboek' van een chef hebben een robijnrode DSL die 'middelen' beschrijft om zich in een bepaalde staat op een knooppunt te bevinden. Laten we doorgaan met een walkthrough om kennis te maken met een paar Chef-concepten die ook van toepassing zijn op chef-solo. Ons doel is om een Ubuntu-knooppunt op te zetten met een Python / Django-webapp met Gunicorn en NGINX.
Opmerking: we hoeven ChefDK niet noodzakelijkerwijs te installeren op ons "Chef-werkstation" (onze machine), hoewel we hiermee 'chef-genereer'-opdrachten kunnen gebruiken om te beginnen met een directorystructuur voor het maken van kookboeken, recepten en meer. In dit artikel gaan we ervan uit dat ChefDK op ons werkstation is geïnstalleerd. Commando's zijn uitgevoerd met versie 4.7.26-1 van ChefDK.
(Vanaf dit punt moet alles, tenzij anders vermeld, worden uitgevoerd op onze machine, ook wel de 'Chef Workstation' genoemd)
Kookboeken in chef zijn herbruikbare eenheden die alles bevatten wat nodig is om een configuratiescenario te ondersteunen. Kookboeken kunnen meerdere 'recepten' bevatten en 'recepten' bestaan meestal uit bronpatronen. default.rb
is het standaardrecept dat wordt uitgevoerd wanneer naar het kookboek wordt verwezen in een uitvoeringslijst . Verschillende recepten maken het mogelijk om zorgen te scheiden. Voor deze zelfstudie voegen we echter alle bronverklaringen toe in één hoofdreceptbestand, namelijk de default.rb
.
Maak een map met de naam "mijn-chef-project" en maak een map erin met de naam "kookboeken". Van ./my-chef-project/cookbooks/
, voer:
$ chef generate cookbook my-cookbook
Onze mappenstructuur ziet er nu als volgt uit:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
De eerste stap bij het instellen van ons knooppunt is om te bepalen welke pakketten onze app nodig heeft. Ons knooppunt is geselecteerd als Ubuntu, dus we kunnen vertrouwen op de APT-pakketbeheerder om de afhankelijkheden te verzamelen. Het installeren van de pakketten die door de OS-distributie worden geleverd, is dan een fluitje van een cent:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
Deze spreken voor zich. De eerste regel werkt de apt-repository bij en de volgende regels installeren die pakketten.
Opmerking: de pakketten die 'nginx' volgen, zijn nodig voor het compileren van enkele van de python-afhankelijkheden via pip. Deze kunnen verschillen afhankelijk van uw python / django-projectafhankelijkheden gespecificeerd in
requirements.txt
. U kunt een methode van vallen en opstaan gebruiken om te bepalen welke pakketten u in uw kookboek moet opnemen. Om dat te doen, voert u een handleiding uitsudo pip install -r requirements.txt
(Opmerking: dit installeert pakketten in het hele systeem!) Op een nieuwe instant ubuntu-machine om te zien of deze succesvol werkt. Zo niet, dan zou de stderr u hints moeten geven over welke pakketten ontbreken.
Zodra we klaar zijn met het toevoegen van de vereiste pakketten, moeten we een niet-geprivilegieerde Linux-gebruiker maken die de broncode van de applicatie bezit.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Merk op dat het wachtwoord een schaduwhash-indeling is die wordt gebruikt in Linux. Het kan worden afgeleid met OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Laten we nu de broncode van de Django-applicatie opnemen in ons kookboek. Plaats de broncode in ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Maak de ./my-chef-project/cookbooks/my-cookbook/files/default
map aan als deze niet bestaat.
De instructie om deze bestanden naar een externe locatie op ons knooppunt te kopiëren, wordt beschreven met behulp van de remote_directory- bron:
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
Om de python-pakketten te installeren requirements.txt
, kunnen we de execute- bron gebruiken om een willekeurige opdracht uit te voeren. In dit geval moeten we de opdracht pip install erover uitvoeren:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Opmerking: houd er rekening mee dat dit zal worden uitgevoerd omdat de rootgebruiker en de python-bibliotheken voor het hele systeem zullen worden geïnstalleerd. Als ons knooppunt is aangewezen om uitsluitend deze enkele python-app uit te voeren, is dat geen probleem. Desondanks is een betere optie om dingen schoon en gezond te houden, het vinden en gebruiken van een community-kookboek dat python-installaties of 'virtualenvs' beheert. (of schrijf op zijn minst een reeks uitvoeringsblokken om dit te repliceren). Het gebruik van virtualenvs in python zorgt ervoor dat alle op python gebaseerde systeemtools of andere python-projecten niet worden beïnvloed
Nu is het tijd om de Gunicorn WSGI HTTP-server voor te bereiden met NGINX als onze reverse proxy. Nginx wordt ook gebruikt om alle statische activa van Django af te handelen.
Om Gunicorn als een service op Ubuntu vast te maken, kan Systemd worden gebruikt. De systemd_unit- bron is sinds versie 12.11 in Chef opgenomen.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
Nu moeten we een standaard NGINX-proxyconfiguratie toevoegen aan deze Gunicorn-server, zoals hieronder wordt weergegeven. Dit fragment kan ingaan ./my-cookbook/templates/nginx.conf.erb
. Maak de sjabloondirectory als deze niet bestaat.
Opmerking: de sjablonen van Chef ondersteunen ingesloten robijnrode bestanden die variabelen, robijnrode uitdrukkingen en verklaringen kunnen bevatten. Hoewel dit bestand de extensie 'erb' heeft, hebben we geen van de robijnrode verklaringen of uitdrukkingen gebruikt. Omwille van de eenvoud hebben we hier ook alleen een niet-HTTPS nginx-configuratie (vriendelijke herinnering; doe dit alsjeblieft niet in productie!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
Opmerking: er is ook een alternatief en een betere configuratie, waarbij bijvoorbeeld de Gunicorn-server is gebonden aan een unix-domeinsocket in plaats van een TCP-loopback-verbinding. Het is de moeite waard om dat om prestatieredenen te onderzoeken.
Gebruik de sjabloonbron van Chef om deze configuratie naar de map met sites op het knooppunt te kopiëren .
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Het activeren van configs op nginx gebeurt normaal gesproken door een symlink te maken die verwijst naar de configuratie op sites-available
in de sites-enabled
map nginx . Symlinks kan worden verklaard in chef kookboeken met de koppeling resource zoals getoond hieronder:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
en om de standaardconfiguratiesymlink te verwijderen:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
En tot slot, om nginx-service op te starten:
service 'nginx' do
action :enable
action :start
end
Run-lijsten in chef zijn een geordende lijst van rollen of recepten in een kookboek die achtereenvolgens op het knooppunt worden uitgevoerd. We hebben één kookboek "mijn-kookboek" en het "standaard" recept dat we moeten uitvoeren op de Ubuntu-box, dus de runlist.json in onze projectdirectory ( ./my-chef-project/runlist.json
) zou er als volgt uit moeten zien:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Ons kookboek voor Chef solo is klaar om geserveerd te worden. Het is tijd om een Ubuntu 18.04-machine in te richten en ChefDK erop te installeren:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
Gaan terug naar onze Chef werkstation , alles wat we moeten doen, is de kookboeken map in een tarball, overdracht die tarball, samen met de runlist.json
het knooppunt op afstand we hierboven bevoorraad en voer de chef-solo commando:
(Het onderstaande commando moet worden uitgevoerd binnen het knooppunt of de 'chef-client' en niet het chef-werkstation)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Of hier is een one-liner (uit te voeren vanaf ./my-chef-project/
CWD op Chef Workstation):
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
Dat is het! Kijk hoe de standaarduitvoer zich vult met Chef-activiteit die probeert uw knooppunt te convergeren naar wat u in de kookboeken hebt gespecificeerd. Chef-solo installeert alle edelstenen die nodig zijn voor alle kookboeken. Als het chef-solo-commando succesvol is, zullen we een werkende Django-applicatie hebben die achter nginx op de Ubuntu-box draait. Navigeer naar het domein / IP om het te testen.
Opmerking: onthoud dat je in django dit domein / ip mogelijk moet instellen in de
ALLOWED_HOSTS
lijst insettings.py
.
Telkens wanneer we een wijziging aanbrengen in de inhoud van onze projectdirectory (recepten, sjablonen of de broncode van de applicatie enz.), Voert u eenvoudig de bovenstaande one-liner uit vanuit de projectdirectory.
Tip: Als het kookboek versie-gestuurd is met git (zoals het hoort), is een goede aanbeveling om git hooks in te stellen om deze one-liner uit te voeren.
Als je goed kijkt naar het laatste chef-solo-commando, merk dan op dat het --recipe-url
bedoeld is om een URL te nemen. Dit betekent dat u een workflow kunt hebben waarbij een CI uw chef-solo-tarball bouwt, deze ergens uploadt en uw knooppunt configureert om er periodiek uit te halen.
Tip: gebruik krul om de veranderde tarball periodiek als een cronjob te trekken.
curl -z $file
zal deIf-Modified-Since
kopteksten respecteren en zal de tar-bal alleen downloaden als het externe bestand is gewijzigd sinds de tijdstempel op de bestaande lokale$file
.
Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek
ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.
WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+
Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.
Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie
13 Commerciële data-extractietools voor big data
Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true
Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.
Een inzicht in 26 Big Data-analysetechnieken: deel 1
AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.