Tero Karvinen - Learn Free software with mehttps://terokarvinen.com/Tero Karvinen - Learn Free software with meen-usThu, 11 Feb 2021 15:14:38 +0200https://terokarvinen.com/img/favicon.pngTero Karvinen - Learn Free software with mehttps://terokarvinen.com/Python Web - Idea to Productionhttps://terokarvinen.com/2023/python-web-idea-to-production/Tue, 16 May 2023 14:38:50 +0300https://terokarvinen.com/2023/python-web-idea-to-production/ <p>Your own Python web application. From idea to production, in 8 days.</p> <p>Instagram, Pintrest and Disqus use Django - the exact same framework as the course. Youtube and Facebook are built with Python.</p> <table> <thead> <tr> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td>Course name and code:</td> <td>Python web service - from an idea to production ICT8TN034-3003</td> </tr> <tr> <td>Timing</td> <td>2023 summer intensive, 2023-05-22 w21 .. Mon 2023-05-31 w22 Wed, <strong>8 days</strong></td> </tr> <tr> <td>Credits</td> <td>5 cr</td> </tr> <tr> <td>Classes</td> <td>Mon-Fri <strong>9-16</strong> online, mandatory participation</td> </tr> <tr> <td>Max students</td> <td>30 (six free seats)</td> </tr> <tr> <td>Language</td> <td>Finnish (+reading material in English)</td> </tr> <tr> <td>Remote</td> <td>Yes, <strong>fully remote</strong></td> </tr> <tr> <td>Feedback</td> <td>4.9 / 5 <strong><a href="https://terokarvinen.com/2021/python-web-service-from-idea-to-production-2022/#comments">Excellent feedback</a></strong> <img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience"></td> </tr> <tr> <td>Services</td> <td><a href="https://hhmoodle.haaga-helia.fi/course/view.php?id=35775">Moodle</a>, Jitsi, Laksu</td> </tr> <tr> <td>First class</td> <td><strong>2023-05-22 w21 09:00</strong>, Tero emails video conference link</td> </tr> </tbody> </table> <p>The course is in Finnish (and requires full fluency in Finnish), so the rest of this page is in Finnish.</p> <p><em>Kurssi edellyttää aktiivista etäläsnäoloa koko kurssin ajan joka arkipäivä 9-16. Palvelimen vuokraamiseen tarvitset 5-10 euroa.</em></p> <h2 id="osaamistavoitteet">Osaamistavoitteet</h2> <p>Rakenna weppipalvelu Pythonilla ja asenna se julkiselle palvelimelle.</p> <p>Opit tekniikan, joka</p> <ul> <li>palvelee asiakkaita Linuxilla, Macilla, Windowsilla, iPhonella, Androidilla - millä vain selaimella</li> <li>kerää itsestään tietoa siitä, miten palveluasi käytetään</li> <li>antaa monien käyttäjien muokata tietoja yhtä aikaa (aika tavallinen vaatimus yritysten ohjelmissa)</li> <li>toimii käyttäjillä asentamatta mitään</li> <li>käyttää automaattisesti uusinta versiota ohjelmastasi</li> </ul> <p>Opintojakson suoritettuaan opiskelija</p> <ul> <li>Osaa ohjelmoida www-palvelimella ajettavan ohjelman, jota voi käyttää millä vain selaimella</li> <li>Osaa tallentaa tiedot tietokantaan niin, että useampi käyttäjä voi katsella ja muokata tietoja samaan aikaan</li> <li>Osaa asentaa tarvittavat palvelimet Linuxille</li> <li>Osaa vuokrata julkaisuun tarvittavat pilvipalvelut</li> <li>Ymmärtää palvelinpään (backend) www-ohjelmoinnin edut ja toimintaperiaatteen</li> </ul> <h2 id="lahtotaso">Lähtötaso</h2> <ul> <li>Linuxin alkeet (Linuxin asennus, Linuxin käyttö komentokehotteesta, palvelinten eli demonien asentaminen)</li> <li>Ohjelmoinnin alkeet millä vain kielellä: muuttuja, funktio, if-else, silmukka, luokka, olio...</li> <li>Puhua suomea ja lukea englantia</li> </ul> <p>Tarvittavat taidot on voinut hankkia esimerkiksi kursseilla &quot;Linux palvelimena&quot; ja millä tahansa ohjelmoinnin alkeiskurssilla. Esitiedot tarkistetaan tarvittaessa alkutestillä tai -haastattelulla. Kurssille tullessa ei tarvitse osata Pythonia.</p> <p>Kurssi toteutetaan 100% etäopetuksena. Osallistumiseen tarvitaan Linux, Internet-yhteys, videokamera, kuulokkeet ja mikrofoni. Palvelimen vuokraamiseen pilvestä tarvitset 5-10 euroa (tai voit käyttää ilmaisia Github Education -palveluita, jos sinulla on niitä käyttämättöminä). Kurssille tullessa opiskelijalla olisi hyvä olla Linux asennettuna itselle. Myös virtuaalikoneeseen asennus käy.</p> <p>Ilmoittautuneet saavat ohjeen ympäristön asentamisesta.</p> <h2 id="aikataulu">Aikataulu</h2> <p>Joka arkipäivä videokonfferenssissa 9-16. Kurssilla opit, mitä nämä käsitteet tarkoittavat - alussa moni termi lienee vieras.</p> <table> <thead> <tr> <th></th> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td>2023-05-22 w21 <strong>ma</strong></td> <td><strong>Hei maailma!</strong></td> <td>Järjestäytyminen. Backend-koodauksen edut. Yleiskuva Djangosta. Hei HTML+CSS, hei Python, hei Django.</td> </tr> <tr> <td>2023-05-23 w21 <strong>ti</strong></td> <td><strong>Tietokannan määrittely. Automaattinen liittymä tietokantaan</strong></td> <td>ORM - olioista tauluiksi. Django admin.</td> </tr> <tr> <td>2023-05-24 w21 <strong>ke</strong></td> <td><strong>Käyttäjän syötteet</strong></td> <td>HTML forms, Django forms. Syötteiden validointi ja puhdistus.</td> </tr> <tr> <td>2023-05-25 w21 <strong>to</strong></td> <td><strong>Olioiden (ja taulujen) suhteet</strong></td> <td>Yhdestä moneen. Esim. yhdellä käyttäjällä voi olla monta tapahtumaa.</td> </tr> <tr> <td>2023-05-26 w21 <strong>pe</strong></td> <td><strong>Kirjautuminen. Miniprojektien aloitus.</strong></td> <td>Käyttäjät, autentikointi, käyttäjän oma sisältö.</td> </tr> <tr> <td>Viikonloppu</td> <td>---</td> <td>---</td> </tr> <tr> <td>2023-05-29 w22 <strong>ma</strong></td> <td><strong>Palvelimen vuokraaminen</strong></td> <td>Tarvitset 5-10 EUR</td> </tr> <tr> <td>2023-05-30 w22 <strong>ti</strong></td> <td><strong>Miniprojektien työstämistä</strong></td> <td>Vinkkejä tavallisiin haasteisiin</td> </tr> <tr> <td>2023-05-31 w22 <strong>ke</strong></td> <td><strong>Oman miniprojektin esittely</strong></td> <td>Projektin esittely, toisten projektien kommentointi.</td> </tr> </tbody> </table> <p>Sisällössä on toteutuskohtaisia muutoksia, aikataulu kehittyy vielä toteutuksen aikana.</p> <h2 id="palautteen-hyodyntaminen">Palautteen hyödyntäminen</h2> <p>Kurssilla on hyödynnetty palautetta aiemmilta kursseiltani.</p> <p>Tällä toteutuksella on hyödynnetty palautteita edellisen kesän Python Web -kurssilta. Ensimmäisen toteutuksen rakentamisessa hyödynnettiin muiden ohjelmointikurssieni palautteita. &quot;Go-ohjelmointi&quot; on saanut huipppupalautteen 4.9/5 kiitettävä. &quot;Go ohjelmointi&quot; osoitti, että intensiivikurssi riittää uuteen kieleen tutustumiseen ja sen käyttöön miniprojektissa. Kurssin tekniikoita on kokeiltu alustavasti myös projektikursseilla ja kurssilla &quot;Linux palvelimet&quot;.</p> <p>Opiskelijoiden toiveiden mukaisesti teoria opetetaan tietokoneiden ääressä käytännön esimerkkien yhteydessä. Opettajakeskeinen opetus ja opiskelijoiden lyhyet tuntiharjoitukset vuorottelevat. Harrastuneisuutta tuetaan ja opiskelijoita kannustetaan taitojen välittömään kokeiluun kurssin ulkopuolella. Kurssilla syntyvien raporttien julkaisemiseen ja vapaaseen lisensointiin kannustetaan.</p> <h2 id="laksyt">Läksyt</h2>Find Hidden Web Directories - Fuzz URLs with ffufhttps://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/Wed, 10 May 2023 12:27:23 +0300https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/ <p>Web servers often have secret directories, not linked from anywhere.</p> <p>You could find them by trying different paths manually: /secret, /.svn /admin. This article shows you how <em>fuff</em> can do this to you automatically.</p> <p>For practice, I coded a target that you can run locally, without Internet. I will also tell you the solution, so you can test your environment. As bonus, there is a challenge target where you can find to solution yourself.</p> <h2 id="what-the-fuff">What the Fuff?</h2> <p>Fuff is a web fuzzer by joohoi. This article shows you how you can use it to find hidden directories, just like gobuster or dirbuster.</p> <p>Fuff is a full featured fuzzing tool. This article just fuzzes hidden directories, but you can also use fuff to fuzz anything: headers, POST parameters...</p> <p><em>Use of penetration testing techniques requires legal and ethical considerations. To safely use these tools, tactics and procedures, you might need to obtain contracts and permissions; and posses adequate technical skills. Check your local laws.</em></p> <p><em>Fuff is very fast. Disconnect your internet and play locally to avoid leaking packets to the Internet.</em></p> <p>This tutorial was tested on Debian Linux amd64. It probably works on other Linuxes, too.</p> <h2 id="download-a-sample-target">Download a sample target</h2> <p>Here is a sample target I wrote for you: <a href="https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/dirfuzt-0">dirfuzt-0</a>. It has a secret page, not linked from anywhere from the site. Download it and run it</p> <pre><code>$ wget https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/dirfuzt-0 $ chmod u+x dirfuzt-0 $ ./dirfuzt-0 Learn more at TeroKarvinen.com http://127.0.0.2:8000 </code></pre> <p>Now you can use your browser, like Firefox, to browse the site (use the URL dirfuzt prints you)</p> <pre><code>http://127.0.0.2:8000 </code></pre> <p><img src="running-practice-fuzzing-web-server-locally.png" alt=""></p> <p>Does it say &quot;Nothing, nil, null, nada.&quot;? Well, now you have your practice target running.</p> <p>As long as the server is running, it will not give you the prompt back. You can use shell from another window.</p> <h2 id="manually">Manually</h2> <p>Let's try our luck! Maybe it's http://127.0.0.2:8000/secret ? Nope.</p> <p>We could keep trying. Or we could let ffuf try a huge number of URLs for us, automatically.</p> <h2 id="install-ffuf-a-fast-web-fuzzer--dir-buster">Install ffuf, a fast web fuzzer / dir buster</h2> <p>Download and extract a release of ffuf.</p> <pre><code>$ wget https://github.com/ffuf/ffuf/releases/download/v2.0.0/ffuf_2.0.0_linux_amd64.tar.gz $ tar -xf ffuf_2.0.0_linux_amd64.tar.gz $ ./ffuf Fuzz Faster U Fool - v2.0.0 ... </code></pre> <p>Well done, now you've got ffuf installed.</p> <p>In case the link ever goes stale, here is a <a href="ffuf_2.0.0_linux_amd64.tar.gz">local mirror of ffuf_2.0.0_linux_amd64.tar.gz</a>.</p> <h2 id="install-a-dictionary-of-common-web-paths">Install a Dictionary of Common Web Paths</h2> <p>We'll still need a dictionary. For directories, a text file with possible directories, one per line. You could even write one yourself:</p> <pre><code>secret/ .svn/ dashboard/ </code></pre> <p>But luckily, many such dictionaries already exist. We can use one from <a href="https://github.com/danielmiessler/SecLists">Seclists</a> by Daniel Miessler and others.</p> <pre><code>$ wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/common.txt </code></pre> <p>In case it ever disappears, here is a local mirror of <a href="Miessler-etal-2023-SecLists/common.txt">SecLists common.txt</a> It's just one path after another, just short of five thousand paths total.</p> <pre><code>$ head -3 common.txt .bash_history .bashrc .cache $ wc -l common.txt 4715 common.txt </code></pre> <h2 id="fuzz-faster-you-fhhhool">Fuzz Faster, You F^H^H^Hool!</h2> <p>Fuff is very fast. Now might be a good time to disconnect your Internet before you start generating a lot of requests.</p> <p>You can see all ffuf parameters with</p> <pre><code>$ ./fuff </code></pre> <p>It prints to stderr, so we need a funny pipe to see it paginated (space and b move, q quits)</p> <pre><code>$ ./ffuf |&amp; less </code></pre> <p>Let's try the obvious approach, wordlist -w and target url -u</p> <pre><code>$ ./ffuf -w common.txt -u http://127.0.0.2:8000/FUZZ </code></pre> <p>Try every line in common.txt in place of FUZZ. So fuff will request</p> <pre><code>http://127.0.0.2:8000/.bash_history http://127.0.0.2:8000/.bashrc </code></pre> <p>and so on.</p> <p>Wow, that was fast! Did it already do almost 5k requests? Let's look at the output</p> <pre><code> /'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v2.0.0 ________________________________________________ :: Method : GET :: URL : http://127.0.0.2:8000/FUZZ :: Wordlist : FUZZ: /home/vagrant/common.txt :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405,500 ________________________________________________ [Status: 200, Size: 132, Words: 6, Lines: 10, Duration: 1ms] * FUZZ: .web [Status: 200, Size: 132, Words: 6, Lines: 10, Duration: 1ms] * FUZZ: .cache [Status: 200, Size: 132, Words: 6, Lines: 10, Duration: 1ms] * FUZZ: .bashrc ... and thousands more ... </code></pre> <p>And it goes on and on - thousands of responses are listed.</p> <h2 id="everything-is-ok">Everything is OK</h2> <p>The stupid web server is giving us HTTP status 200 OK for everything. But if we look at the pages, they just say &quot;Nothing, nil, null, nada.&quot;. Even ones with interesting URLs, like http://127.0.0.2:8000/.bashrc.</p> <p>When this happens, we must look at other common qualities of unwanted responses. And filter them out.</p> <p>Filter options are listed in ffuf help</p> <pre><code>$ ./fuff |&amp; less FILTER OPTIONS: -fc Filter HTTP status codes from response. Comma separated list of codes and ranges -fl Filter by amount of lines in response. Comma separated list of line counts and ranges -fmode Filter set operator. Either of: and, or (default: or) -fr Filter regexp -fs Filter HTTP response size. Comma separated list of sizes and ranges -ft Filter by number of milliseconds to the first response byte, either greater or less than. EG: &gt;100 or &lt;10 -fw Filter by amount of words in response. Comma separated list of word counts and ranges </code></pre> <p>Looking at a sample of 10-20 responses, we can see that most have a lot in common:</p> <pre><code>[Status: 200, Size: 132, Words: 6, Lines: 10, Duration: 1ms] [Status: 200, Size: 132, Words: 6, Lines: 10, Duration: 1ms] [Status: 200, Size: 132, Words: 6, Lines: 10, Duration: 1ms] ... </code></pre> <p>The unwanted hits, false positives have the same:</p> <ul> <li>(HTTP) Status (-fc). But the hidden pages are probably 200 OK, too.</li> <li>Size (in bytes) (-fs)</li> <li>Words (-fw)</li> <li>Lines (-lf)</li> <li>Duration (in milliseconds) (-ft). Would not be my fist choice, as it can vary by chance.</li> </ul> <p>The size of each unwanted response seems to be 132 bytes. That's 132 ASCII characters. It's shorter than an SMS text message! Let's filter by that.</p> <pre><code>$ ./ffuf -w common.txt -u http://127.0.0.2:8000/FUZZ -fs 132 </code></pre> <p>Just two matched responses:</p> <pre><code>[Status: 200, Size: 160, Words: 10, Lines: 11, Duration: 0ms] * FUZZ: admin [Status: 301, Size: 64, Words: 3, Lines: 3, Duration: 2ms] * FUZZ: render/https://www.google.com </code></pre> <p>Jackpot? Let's test with a browser (and maybe curl)</p> <p>Manual verification confirms that /admin is the URL we were looking for. As the page says: &quot;You've found it!&quot;.</p> <p>The other one is a strange redirector, accepting many URLs after &quot;/render/https://&quot;.</p> <p>Well done, you've just fuzzed a hidden directory.</p> <h2 id="your-turn---challenge">Your turn - Challenge</h2> <p>Can you find two URLs:</p> <ul> <li>Admin page</li> <li>Version control related page</li> </ul> <p>Challenge binary <a href="dirfuzt-1">dirfuzt-1</a>.</p> <p>Notice that this is a different binary from dirfuzt-0. You must shut the first exercise down before you can hack the second one. The challenge binary frontpage has the word &quot;dirfutz-1&quot; in the title.</p> <p>Keep it safe, legal and ethical - use your powers for good.</p> <p>Good luck!</p> <h2 id="whats-next">What's Next</h2> <p>See Joona 'joohoi' Hoikkala himself teach ffuf in HelSec:</p> <ul> <li><a href="https://www.youtube.com/watch?v=mbmsT3AhwWU">x03 Still Fuzzing Faster (U Fool) - joohoi - HelSec Virtual meetup #1 (50 min video)</a></li> </ul> <p>Try ffuf on some practice target you're working with.</p> <p>You just fuzzed some directory paths. Try fuzzing something else, like POST requests, query string parameters or request headers.</p> <p>Happy hacking!</p> <h2 id="see-also">See also</h2> <p>Fuff homepage <a href="https://github.com/ffuf/ffuf">https://github.com/ffuf/ffuf</a></p> <p>Miessler, Haddix, g0tmi1k: SecLists <a href="https://github.com/danielmiessler/SecLists">https://github.com/danielmiessler/SecLists</a></p>Create a Web Page Using Githubhttps://terokarvinen.com/2023/create-a-web-page-using-github/Tue, 28 Mar 2023 21:46:39 +0300https://terokarvinen.com/2023/create-a-web-page-using-github/ <p>You can quickly publish a web page using Github. Just by clicking a couple of buttons.</p> <p>This is a beginner friendly article.</p> <p>Summary:</p> <ol> <li>Register to Github</li> <li>Create a new repository (add README.md file when creating)</li> <li>Add an .md file for your web page</li> <li>Write some text, commit.</li> <li>And your page is published.</li> </ol> <p>Below is a very detailed explanation how to do this.</p> <p>Later, you can advance to using Github in more advanced ways. And of course, you can probably do something similar with Gitlab and other Git-themed websites.</p> <h2 id="login-to-github">Login to Github</h2> <p><a href="https://github.com/">https://github.com/</a></p> <h2 id="create-a-new-repository">Create a new repository</h2> <p><img src="new-repository-github.png" alt=""></p> <ul> <li>Public</li> <li>One sentence description in English</li> <li>Your must create a README file when creating the repository, or it will cause complications later.</li> <li>I recommend using a Free license, GNU General Public License version 3.</li> </ul> <p><img src="new-repository-details-github.png" alt=""></p> <h2 id="new-file">New file</h2> <p>Add file: Create a new file.</p> <p>Name your file something.md. The MarkDown .md suffix means it will be automatically converted to a web page.</p> <p><img src="new-file-github.png" alt=""></p> <h2 id="write-markdown">Write MarkDown</h2> <p>MarkDown is super quick to write. I've written multiple succesful books in MarkDown.</p> <p><img src="write-markdown-github.png" alt=""></p> <p>MarkDown works like this</p> <pre><code># One hash makes heading one Regular text is just written. Empty line adds a paragraph break. ## Two hashes make heading two URLs are rendered automatically, like http://TeroKarvinen.com Code is indented with four spaces (or a tab) $ ls hello-tero.md </code></pre> <p>You can learn more MarkDown later, if you want.</p> <p>Now just &quot;Commit&quot;. It's save, but more cool.</p> <p><img src="commit-is-save-github.png" alt=""></p> <h2 id="web-page-published">Web page published</h2> <p>Well done! You've published your web page. And you can always learn more Git and Markdown later.</p> <p><em>Best day to publish is yesterday, the second best is today.</em> - Me, probably.</p> <p><img src="web-page-created-github.png" alt=""></p>Salt Vagrant - automatically provision one master and two slaveshttps://terokarvinen.com/2023/salt-vagrant/Tue, 28 Mar 2023 20:40:02 +0300https://terokarvinen.com/2023/salt-vagrant/ <p>Configuration management let's you control hundreds of computers. You can even configure machines that don't exist yet!</p> <p>In this article, you'll use ready-made network of three virtual computers to play with Salt, a popular configuration management system.</p> <p><em>These notes have not been extensively tested yet.</em></p> <h2 id="background--prerequisites">Background &amp; Prerequisites</h2> <p>I cleaned up this configuration from a setup I've used for a long time on Linux. You can probably adapt it to Windows, and I think some of my students have.</p> <p>These notes are pretty dense. As prerequisite, you should know <a href="https://terokarvinen.com/2020/command-line-basics-revisited/">Linux command line</a> and directory structure. Here, we prepare to administer a lot of computers. It would help if you could already administer one.</p> <h2 id="install-virtualization-environment">Install Virtualization Environment</h2> <pre><code>$ sudo apt-get update $ sudo apt-get -y install virtualbox vagrant micro $ mkdir saltdemo; cd saltdemo $ micro Vagrantfile </code></pre> <p>Copy-paste the ready-made Vagrantfile in place.</p> <h2 id="ready-made-vagrantfile-for-three-computers">Ready made Vagrantfile for three computers</h2> <div class="highlight"><pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span><span style="color:#09f;font-style:italic"># -*- mode: ruby -*-</span> </span></span><span style="display:flex;"><span><span style="color:#09f;font-style:italic"># vi: set ft=ruby :</span> </span></span><span style="display:flex;"><span><span style="color:#09f;font-style:italic"># Copyright 2014-2023 Tero Karvinen http://TeroKarvinen.com</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>$minion <span style="color:#555">=</span> <span style="color:#c30">&lt;&lt;MINION </span></span></span><span style="display:flex;"><span><span style="color:#c30"></span>sudo apt<span style="color:#555">-</span>get update </span></span><span style="display:flex;"><span>sudo apt<span style="color:#555">-</span>get <span style="color:#555">-</span>qy install salt<span style="color:#555">-</span>minion </span></span><span style="display:flex;"><span>echo <span style="color:#c30">&#34;master: 192.168.12.3&#34;</span><span style="color:#555">&gt;</span><span style="color:#3aa">/etc/s</span>alt<span style="color:#555">/</span>minion </span></span><span style="display:flex;"><span>sudo service salt<span style="color:#555">-</span>minion restart </span></span><span style="display:flex;"><span>echo <span style="color:#c30">&#34;See also: https://terokarvinen.com/2023/salt-vagrant/&#34;</span> </span></span><span style="display:flex;"><span><span style="color:#360">MINION</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>$master <span style="color:#555">=</span> <span style="color:#c30">&lt;&lt;MASTER </span></span></span><span style="display:flex;"><span><span style="color:#c30"></span>sudo apt<span style="color:#555">-</span>get update </span></span><span style="display:flex;"><span>sudo apt<span style="color:#555">-</span>get <span style="color:#555">-</span>qy install salt<span style="color:#555">-</span>master </span></span><span style="display:flex;"><span>echo <span style="color:#c30">&#34;See also: https://terokarvinen.com/2023/salt-vagrant/&#34;</span> </span></span><span style="display:flex;"><span><span style="color:#360">MASTER</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#360">Vagrant</span><span style="color:#555">.</span>configure(<span style="color:#c30">&#34;2&#34;</span>) <span style="color:#069;font-weight:bold">do</span> <span style="color:#555">|</span>config<span style="color:#555">|</span> </span></span><span style="display:flex;"><span> config<span style="color:#555">.</span>vm<span style="color:#555">.</span>box <span style="color:#555">=</span> <span style="color:#c30">&#34;debian/bullseye64&#34;</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> config<span style="color:#555">.</span>vm<span style="color:#555">.</span>define <span style="color:#c30">&#34;t001&#34;</span> <span style="color:#069;font-weight:bold">do</span> <span style="color:#555">|</span>t001<span style="color:#555">|</span> </span></span><span style="display:flex;"><span> t001<span style="color:#555">.</span>vm<span style="color:#555">.</span>provision <span style="color:#fc3">:shell</span>, <span style="color:#fc3">inline</span>: $minion </span></span><span style="display:flex;"><span> t001<span style="color:#555">.</span>vm<span style="color:#555">.</span>network <span style="color:#c30">&#34;private_network&#34;</span>, <span style="color:#fc3">ip</span>: <span style="color:#c30">&#34;192.168.12.100&#34;</span> </span></span><span style="display:flex;"><span> t001<span style="color:#555">.</span>vm<span style="color:#555">.</span>hostname <span style="color:#555">=</span> <span style="color:#c30">&#34;t001&#34;</span> </span></span><span style="display:flex;"><span> <span style="color:#069;font-weight:bold">end</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> config<span style="color:#555">.</span>vm<span style="color:#555">.</span>define <span style="color:#c30">&#34;t002&#34;</span> <span style="color:#069;font-weight:bold">do</span> <span style="color:#555">|</span>t002<span style="color:#555">|</span> </span></span><span style="display:flex;"><span> t002<span style="color:#555">.</span>vm<span style="color:#555">.</span>provision <span style="color:#fc3">:shell</span>, <span style="color:#fc3">inline</span>: $minion </span></span><span style="display:flex;"><span> t002<span style="color:#555">.</span>vm<span style="color:#555">.</span>network <span style="color:#c30">&#34;private_network&#34;</span>, <span style="color:#fc3">ip</span>: <span style="color:#c30">&#34;192.168.12.102&#34;</span> </span></span><span style="display:flex;"><span> t002<span style="color:#555">.</span>vm<span style="color:#555">.</span>hostname <span style="color:#555">=</span> <span style="color:#c30">&#34;t002&#34;</span> </span></span><span style="display:flex;"><span> <span style="color:#069;font-weight:bold">end</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> config<span style="color:#555">.</span>vm<span style="color:#555">.</span>define <span style="color:#c30">&#34;tmaster&#34;</span>, <span style="color:#fc3">primary</span>: <span style="color:#069">true</span> <span style="color:#069;font-weight:bold">do</span> <span style="color:#555">|</span>tmaster<span style="color:#555">|</span> </span></span><span style="display:flex;"><span> tmaster<span style="color:#555">.</span>vm<span style="color:#555">.</span>provision <span style="color:#fc3">:shell</span>, <span style="color:#fc3">inline</span>: $master </span></span><span style="display:flex;"><span> tmaster<span style="color:#555">.</span>vm<span style="color:#555">.</span>network <span style="color:#c30">&#34;private_network&#34;</span>, <span style="color:#fc3">ip</span>: <span style="color:#c30">&#34;192.168.12.3&#34;</span> </span></span><span style="display:flex;"><span> tmaster<span style="color:#555">.</span>vm<span style="color:#555">.</span>hostname <span style="color:#555">=</span> <span style="color:#c30">&#34;tmaster&#34;</span> </span></span><span style="display:flex;"><span> <span style="color:#069;font-weight:bold">end</span> </span></span><span style="display:flex;"><span><span style="color:#069;font-weight:bold">end</span> </span></span></code></pre></div><h2 id="run-three-computers">Run Three Computers</h2> <pre><code>$ vagrant up </code></pre> <p>It takes 3-5 minutes, and the three computers boot up. The slaves t001 and t002 will automatically contact master, because the slave daemon (salt-minion) was installed and configured with a three-line script in Vagrantfile.</p> <h2 id="accept-the-slaves">Accept the Slaves</h2> <p>Log into your master computer.</p> <pre><code>$ vagrant ssh tmaster </code></pre> <p><em>The salt commands below are run inside the virtual machine tmaster. It's prompt is very long, so I've replaced it with &quot;$&quot;. But it's a different computer from your host OS.</em></p> <p>The slave computers have already sent their keys to master. Just approve them</p> <pre><code>$ sudo salt-key -A The following keys are going to be accepted: Unaccepted Keys: t001 t002 Proceed? [n/Y] y Key for minion t001 accepted. Key for minion t002 accepted. </code></pre> <p>And test that the connection works. This command contacts slaves using the secured channel created by Salt.</p> <pre><code>$ sudo salt '*' test.ping t001: True t002: True </code></pre> <h2 id="command-slaves">Command Slaves</h2> <p>You can run regular shell commands</p> <pre><code>$ sudo salt '*' cmd.run 'hostname -I' t001: 10.0.2.15 192.168.12.100 t002: 10.0.2.15 192.168.12.102 </code></pre> <h2 id="collect-information">Collect Information</h2> <pre><code>$ sudo salt '*' grains.items $ sudo salt '*' grains.item osfinger ipv4 t002: ---------- ipv4: - 10.0.2.15 - 127.0.0.1 - 192.168.12.102 osfinger: Debian-11 t001: ---------- ipv4: - 10.0.2.15 - 127.0.0.1 - 192.168.12.100 osfinger: Debian-11 </code></pre> <h2 id="the-goal---idempotent">The Goal - Idempotent</h2> <p>Idempotent commands are much more powerful. They just describe the end state. Salt will only make changes if needed. These idempotent commands are the ones we'll mostly use later.</p> <pre><code>$ sudo salt '*' state.single file.managed '/tmp/see-you-at-terokarvinen-com' ... Succeeded: 1 (changed=1) Failed: 0 </code></pre> <p>If you run it many times, you'll see that it's really idempotent. In the following rounds, the &quot;(changed=1)&quot; will disappear.</p> <p>To make success messages shorter, you can use --state-output=terse</p> <pre><code>$ sudo salt --state-output=terse '*' state.single file.managed '/tmp/see-you-at-terokarvinen-com' </code></pre> <p>Install some software</p> <pre><code>$ sudo salt '*' state.single pkg.installed apache2 </code></pre> <p>Make sure a daemon is running</p> <pre><code>$ sudo salt '*' state.single service.running apache2 </code></pre> <p>Let's test that it's actually running</p> <pre><code>$ sudo apt-get -y install curl $ curl -s 192.168.12.102|grep title &lt;title&gt;Apache2 Debian Default Page: It works&lt;/title&gt; </code></pre> <p>It works! So let's shut it down</p> <pre><code>$ sudo salt '*' state.single service.dead apache2 $ curl 192.168.12.102 curl: (7) Failed to connect to 192.168.12.102 port 80: Connection refused </code></pre> <p>We can control users</p> <pre><code>$ sudo salt '*' state.single user.present terote01 </code></pre> <p>Modify users</p> <pre><code>$ sudo salt '*' state.single user.present terote01 shell=&quot;/bin/bash&quot; </code></pre> <p>And make sure they don't exist</p> <pre><code>$ sudo salt '*' state.single user.absent terote01 </code></pre> <p>If none of the others work, we can use cmd.run state. But we must make it idempotent ourselves.</p> <pre><code>$ sudo salt '*' state.single cmd.run 'touch /tmp/tero' creates=&quot;/tmp/tero&quot; </code></pre> <p>You should prefer these to cmd.run: package, file, service, user.</p> <h2 id="infra-as-code---your-wishes-as-a-text-file">Infra as Code - Your wishes as a text file</h2> <pre><code>$ sudo mkdir -p /srv/salt/hello $ sudoedit /srv/salt/hello/init.sls </code></pre> <p>Write these contents to init.sls. Note that this syntax is YAML. Indentation matters, and its <em>two spaces</em>. No tabs.</p> <pre><code>$ cat /srv/salt/hello/init.sls /tmp/infra-as-code: file.managed $ sudo salt '*' state.apply hello </code></pre> <h2 id="topsls---what-slave-runs-what-states">top.sls - What Slave Runs What States</h2> <p>Top file defines what states are run for which slaves.</p> <pre><code>$ sudo salt '*' state.apply hello^C $ sudoedit /srv/salt/top.sls $ cat /srv/salt/top.sls base: '*': - hello </code></pre> <p>Now you don't have to name any modules on state.apply:</p> <pre><code>$ sudo salt '*' state.apply </code></pre> <h2 id="bye-bye">Bye bye</h2> <p>We have cattle not pets. When it's time to say goodbye to this installation, you can destroy the machines and their contents. There is no undo.</p> <pre><code>$ exit $ vagrant destroy # destroys all files in all three virtual computers </code></pre>Infra as Code coursehttps://terokarvinen.com/2023/palvelinten-hallinta-2023-kevat/Tue, 28 Mar 2023 12:28:52 +0300https://terokarvinen.com/2023/palvelinten-hallinta-2023-kevat/ <p>Control <del>10</del>, <del>100</del>, <del>1000</del> many computers.</p> <p>Or control 2071 computers, like Jussi did on a earlier course. Or handle 7 different operating systems and OS versions with a single master, like Matias.</p> <p>Previous instance got excellent 5.0 / 5 feedback - all respondents gave the best grade 5. Palvelinten hallinta ici001as3a-3001.</p> <table> <thead> <tr> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td>Course name and code</td> <td>Palvelinten hallinta ici001as3a-3001 Tue; ici001as3a-3002 Thu</td> </tr> <tr> <td>Timing</td> <td>2023 <strong>period 4</strong> late spring, w13-w20</td> </tr> <tr> <td>Credits</td> <td>5 cr</td> </tr> <tr> <td>Classes</td> <td><strong>Tue 17:40</strong> - 20:30, online, mandatory participation (-3001); OR <strong>Thu 08:15</strong>-13:45 online or pa3014, mandatory participation (-3002).</td> </tr> <tr> <td>Max students</td> <td>30</td> </tr> <tr> <td>Language</td> <td>Finnish (+reading material in English)</td> </tr> <tr> <td>Remote</td> <td>Tuesday -3001 fully remote. Thursday: blended, online+pa3014.</td> </tr> <tr> <td>Feedback</td> <td>5.0 / 5 <strong><a href="https://terokarvinen.com/2022/palvelinten-hallinta-2022p2/#comments">Excellent feedback</a></strong> <img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience"></td> </tr> <tr> <td>Services</td> <td><a href="https://hhmoodle.haaga-helia.fi/course/view.php?id=36387">Moodle: Palvelinten hallinta</a>, Jitsi, Laksu</td> </tr> <tr> <td>First class</td> <td><strong>2023-03-28 w13 Tue 17:40</strong>, Tero emailed video conference link. OR <strong>2023-03-30 w13 Thu 08:15</strong> Pasila pa3014 (physically there).</td> </tr> </tbody> </table> <p>My current research area is configuration management systems: I gave an invited speech in IEEE ICIM Chengdu and a plenary speech in IEEE ICIM Oxford; I’ve also been teaching these modern methods to companies. Previous feedback for this course has been from very good 4.3 to excellent <del>4.9</del> 5.0 out of 5.</p> <p>As the course is in Finnish, the rest of this page will be in Finnish.</p> <h2 id="opintojakson-suoritettuaan-opiskelija">Opintojakson suoritettuaan opiskelija</h2> <ul> <li>Osaa hallita palvelimia kuvailemalla tavoitetilan (idempotenssi)</li> <li>Osaa tehdä asetukset pelkkänä tekstinä ja versioitavasti (infrastruktuuri koodina)</li> <li>Pystyy tekemään tavalliset ylläpitotoimet valitulla työkalulla Saltilla (yksi totuus)</li> </ul> <h2 id="esitiedot">Esitiedot</h2> <p>Esitiedot, kertaa nämä.</p> <p>Opettele komennot ja hakemistot ulkoa. Harjoittele niitä kokeilemalla moneen kertaan Linuxissa.</p> <ul> <li>Linuxin komennot, apt <a href="http://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited</a></li> <li>Tiedostojärjestelmän rakenne (etc, var…). Alkeet löytyvät samasta <a href="http://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited</a></li> <li>Demonien hallinta (esim Apache) <a href="http://terokarvinen.com/2008/05/02/install-apache-web-server-on-ubuntu-4/index.html">Install Apache Web Server on Ubuntu</a> (paitsi demonin potkaisu nykyisin 'sudo systemctl restart apache2')</li> </ul> <h2 id="alustava-aikataulu">Alustava aikataulu</h2> <p>Kurssi kestää 8 viikkoa. Edellyttää aktiivista osallistumista etäopetukseen videokonfferensissa lukkariin merkittynä aikana.</p> <p>Läksyt 24 h ennen seuraavan lähiopetuskerran alkua.</p> <p>Tämä alustava aikataulu elää kurssin aikana.</p> <h3 id="perusteet">Perusteet</h3> <ul> <li> <ol> <li>w13 <strong>Hello Salt!</strong> Master-slave, pull -arkkitehtuuri. Komentojen etäsuoritus (cmd.run, pkg.install). Tietojen kerääminen orjista (grains.items). Idempotentti konfiguraatio (foo.sls, top.sls). Esimerkkejä tiloista (file.managed). <em>Torstain ryhmä Pasilassa pa3014</em></li> </ol> </li> <li> <ol start="2"> <li>w14 <strong>Package-file-service</strong>. Demonien hallinta. Käsin tehdyn konfiguraation automatisointi. Aikajanan käyttö muutosten tunnistamisessa. Orjan tavoittaminen tuntemattomasta osoitteesta, NAT ja tulimuurin takaa. <em>Torstain ryhmä Pasilassa pa3014</em></li> </ol> </li> <li> <ol start="3"> <li>w15 <strong>Versionhallinta</strong>. Git: init, clone, add, commit, pull, push, log. GitHub ja muut avustavat palvelut. <em>Torstain ryhmä Pasilassa pa3014</em></li> </ol> </li> </ul> <h3 id="edistynytta-asiaa">Edistynyttä asiaa</h3> <ul> <li> <ol start="4"> <li>w16 <strong>Omat komennot</strong> <em>Torstain ryhmä Pasilassa pa3014</em></li> </ol> </li> <li> <ol start="5"> <li>w17 <strong>Salt Windowsilla</strong> <em>Torstain ryhmä Pasilassa pa3014</em></li> </ol> </li> <li> <ol start="6"> <li>w18 <strong>Omien modulien rakentamista</strong> <em>Tiistain ryhmällä ei online-oppituntia 2023-05-02, vaan itsenäistä työskentelyä.</em> <em>Torstain ryhmä Pasilassa pa3014</em></li> </ol> </li> <li> <ol start="7"> <li>w19 <strong>Palautetta ja vinkkejä omiin moduleihin</strong>. <em>Tiistain ryhmä online tutulla kanavalla. Torstain ryhmä Pasilassa pa3014.</em></li> </ol> </li> </ul> <h3 id="loppuhuipennus">Loppuhuipennus</h3> <ul> <li> <ol start="8"> <li>w20 <strong>Omien modulien esittely</strong>. <em>Molempien toteutusten esitykset tiistaina 17:40 videokonfferenssissa</em>. Helatorstaina ei ole opetusta.</li> </ol> </li> </ul> <h2 id="arviointi">Arviointi</h2> <p>Osien ohjeelliset painoarvot ovat</p> <ul> <li>Kotitehtävät 50%</li> <li>Oma moduli 50%</li> </ul> <p>Arvosana perustuu kokonaisarvioon suorituksista. Kaikki kotitehtävät pitää tehdä. Etäopetukseen pitää osallistua aktiivisesti.</p> <h2 id="laksyt">Läksyt</h2> <p>Palautus 24 h ennen seuraavaa lukujärjestykseen merkittyä aikaa (riippumatta siitä, onko silloin videotapaamista). Weppisivulle (HTML), ja palauta linkki Laksuun. Halutessasi voit laittaa linkin myös kommentiksi tämän sivun perään, niin sivusi saa lisää kävijöitä ja nousee PageRankissa.</p> <p>Nämä läksyt ovat alustavia. Läksyt ovat virallisia vasta, kun ne on annettu tunnilla. Tämä on edistynyt kurssi, joten pystymme tekemään muutoksia kurssin kuluessa ja sovittamaan läksyt aiheen mukaan. Jos et uskalla tai muuten halua julkaista, voit laittaa weppisivun salasanan taakse (sama salasana koko kurssille ja jokaiselle tehtävälle, ei kirjautumista eri tunnuksilla eri henkilöille) ja jakaa salasanan kurssilaisten kanssa - mutta suosittelen julkaisua. Kotisivutilaa saa esim wordpress.com, github.com, gitlab.com ja monista muista paikoista.</p> <h3 id="h1-suolaa">h1 Suolaa</h3> <ul> <li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.) <ul> <li>Karvinen 2023: <a href="https://terokarvinen.com/2023/create-a-web-page-using-github/">Create a Web Page Using Github</a></li> <li>Karvinen 2023: <a href="https://terokarvinen.com/2023/salt-vagrant/">Salt Vagrant - automatically provision one master and two slaves</a></li> </ul> </li> <li>a) Asenna Debian 11 Vagrantilla.</li> <li>b) Asenna artikkelissa (<a href="https://terokarvinen.com/2023/salt-vagrant/">Karvinen 2023</a>) kuvattu kolmen koneen verkko</li> <li>c) Hyväksy orjat (t001 ja t002) ohjattavaksi ja testaa yhteys</li> <li>d) Näytä esimerkit seuraavista tiloista: package, file, service, user, cmd.run. (voit käyttää state.single)</li> <li>e) Tee infraa koodina, esim oma hei maailma.</li> </ul> <p>Vinkit</p> <ul> <li>vagrant init debian/bullseye64; vagrant up; vagrant ssh</li> <li>Linuxissa asennus on helppoa 'sudo apt-get update; sudo apt-get -y install virtualbox vagrant'</li> <li>Windowsissa <ul> <li><a href="https://www.virtualbox.org/wiki/Downloads">Virtualbox Downloads</a> ja siitä linkki <a href="https://download.virtualbox.org/virtualbox/7.0.6/VirtualBox-7.0.6-155176-Win.exe">&quot;Windows hosts&quot;</a></li> <li><a href="https://developer.hashicorp.com/vagrant/downloads">Vagrant Downloads</a>: Windows: <a href="https://releases.hashicorp.com/vagrant/2.3.4/vagrant_2.3.4_windows_amd64.msi">AMD64</a></li> </ul> </li> <li>Opiskelijan raportti Vagrantin käytöstä Windowsilla: Valkamo 2022: <a href="https://tuomasvalkamo.com/CMS-course/week-6/">Create Virtual Machines with Vagrant</a></li> <li>Linux-vinkkejä kohdassa <a href="#esitiedot">Esitiedot</a></li> <li><a href="https://terokarvinen.com/2006/raportin-kirjoittaminen-4/">Raportin kirjoittaminen</a></li> </ul> <h3 id="h2-demonit">h2 Demonit</h3> <ul> <li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.) <ul> <li>Karvinen 2018: <a href="https://terokarvinen.com/2018/pkg-file-service-control-daemons-with-salt-change-ssh-server-port/?fromSearch=salt%20ssh">Pkg-File-Service – Control Daemons with Salt – Change SSH Server Port</a></li> </ul> </li> <li>a) Asenna OpenSSH-palvelin käsin. Laita se kuuntelemaan oletusportin lisäksi jotain toista porttia. Testaa lopputulos.</li> <li>b) Automatisoi äsken tekemäsi SSH-konfiguraatio Saltilla.</li> <li>c) Tee jokin muu asetus äsken tekemääsi SSH-palveluun. Osoita testein, että Salt käynnistää demonin uudelleen, kun asetustiedosto on muuttunut (jolloin uudet asetukset tulevat voimaan). Osoita, että Saltin ajaminen ei käynnistä demonia uudelleen, jos asetukset eivät ole muuttuneet. (Helpoin asetus on lisätä kolmas portti mukaan, haastavampia löytyy esim 'man sshd_config').</li> <li>d) Vapaaehtoinen: Säädä jotain toista demonia Saltilla, esim Apache.</li> </ul> <p>Vinkkejä</p> <ul> <li>Ensin käsin, vasta sitten automaattisesti</li> <li>Pienin testattava kokonaisuus kerrallaan</li> <li>Dokumentoi samalla kun teet</li> <li>Kannattaa jättää SSH:sta myös vakioportti 22/tcp auki. Muuten 'vagrant ssh' ei toimi. SSH:ssa voi olla useampi portti yhtä aikaa auki.</li> <li>Tiedoston polku (file.managed, source) toimii näin: source: &quot;salt://ssh/sshd_config&quot; <ul> <li>&quot;salt://&quot; vastaa herran polkua &quot;/srv/salt/&quot;, joka lähetetään kaikkien orjien käyttöön</li> <li>&quot;ssh/&quot; kansio /srv/salt/ alla, modulin kansio</li> <li>&quot;sshd_config&quot; mallitiedosto, samassa kansiossa kuin init.sls</li> </ul> </li> <li>Toisin sanottuna init.sls mainittu source &quot;salt://ssh/sshd_config&quot; viittaa masterin tiedostoon &quot;/srv/salt/ssh/sshd_config&quot;.</li> <li>Testaa välivaiheet. Testaa lopputulos.</li> <li>Miksi? Selitä, miksi eri komennot tai asetukset on valittu. Selitä tulokset.</li> </ul> <h3 id="h3-git">h3 Git</h3> <p>a) Online. Tee uusi varasto GitHubiin (tai Gitlabiin tai mihin vain vastaavaan palveluun). Varaston nimessä ja lyhyessä kuvauksessa tulee olla sana &quot;summer&quot;. Aiemmin tehty varasto ei kelpaa. (Muista tehdä varastoon tiedostoja luomisvaiheessa, esim README.md ja GNU General Public License 3)</p> <p>b) Dolly. Kloonaa edellisessä kohdassa tehty uusi varasto itsellesi, tee muutoksia, puske ne palvelimelle, ja näytä, että ne ilmestyvät weppiliittymään.</p> <p>c) Doh! Tee tyhmä muutos gittiin, älä tee commit:tia. Tuhoa huonot muutokset ‘git reset --hard’. Huomaa, että tässä toiminnossa ei ole peruutusnappia.</p> <p>d) Tukki. Tarkastele ja selitä varastosi lokia. Tarkista, että nimesi ja sähköpostiosoitteesi näkyy haluamallasi tavalla ja korjaa tarvittaessa.</p> <p>e) Vapaaehtoinen: yhteistyötä: anna kaverillesi (tai alter egollesi) oikeus kirjoittaa varastoosi (commit access). Tehkää molemmat muutoksia varastoon gitillä.</p> <p>f) Vapaaehtoinen: Suolattu rakki. Tee uusi moduli. Kloonaa varastosi toiselle koneelle (tai poista srv/salt ja palauta se kloonaamalla) ja jatka sillä. (Salt tiedostot mistä vain hakemistosta, huomaa suhteellinen polku: 'sudo salt-call --local --file-root srv/salt/ state.apply')</p> <p>g) Vapaaehtoinen: Se toinen järjestelmä: kokeile Gittiä eri käyttöjärjestelmällä kuin sillä, millä teit muut harjoitukset. Selitä niin, että kyseistä järjestelmää osaamatonkin onnistuu. Mahdollisuuksia on runsaasti: Debian, Fedora, Windows, OSX...</p> <p>Vinkkejä</p> <ul> <li>Kannattaa käyttää SSH-osoitetta varastoa kloonatessa, kirjautuminen julkisella ssh-avaimella</li> <li>ssh-keygen (enter, enter), cat $HOME/.ssh/id_rsa.pub, Github: Settings: SSH keys...</li> <li>Github-varaston sivulta Code: SSH. git clone <a href="https://github.com/hattupuu/earplotter.git">https://github.com/hattupuu/earplotter.git</a> ; cd earplotter</li> <li>git pull</li> <li>git add . &amp;&amp; git commit; git pull &amp;&amp; git push</li> <li>git log --patch</li> <li>git config --global user.email &quot;tonystudent@example.com&quot;</li> <li>git config --global user.name &quot;Tony Student&quot;</li> <li>Commit message: yksi englanninkielinen virke määräysmuodossa ja nykyajassa: &quot;Add reverse thurst estimation to main view&quot;</li> <li>GitHub-varastoon kannattaa tehdä tiedostoja luomisvaiheessa, suosittelen tekemään README.md ja vapaista lisensseistä itse tykkään GPLv3 eli GNU General Public License, version 3. Oman työsi lisenssin saat itse valita.</li> <li>Karvinen 2021: <a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on VirtualBox</a></li> <li>Microsoft 2023: <a href="https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/">Get a Windows 11 development environment</a>: Download a virtual machine: <a href="https://aka.ms/windev_VM_virtualbox">VirtualBox</a></li> <li>Olli Uronen: <a href="https://terokarvinen.com/2023/palvelinten-hallinta-2023-kevat/#2023-04-11--fad2f18418">Git Windows-vinkit kommenteissa</a></li> <li>Jos menet olemassaolevaan projektiin (työpaikalla, open source)... opiskele projektin käytännöt ja käytä niitä</li> </ul> <h3 id="h4-komennus">h4 Komennus</h3> <ul> <li>a) hello.sh. Tee oma shell script (bash, sh...) ja laita se kaikille käyttäjille. Yksinkertainen skripti voi tehdä mitä vain, mutta sen tulee tulostaa &quot;shine&quot;. Tee skripti alusta, vaikka olisit joskus aiemmin tehnyt skriptejä. Testaa lopputulos (kuten aina).</li> <li>b) hello.py. Tee oma Python-skripti ja laita se kaikille käyttäjille.</li> <li>c) Automatisoi näiden skriptien asennus orjille Saltilla.</li> <li>d) Asenna jokin yhden binäärin ohjelma Saltilla orjille.</li> <li>e) Vapaaehtoinen: moniOSsaaja. kokeile Saltia jollain muulla käyttöjärjestelmällä kuin Linuxilla.</li> </ul> <p>Vinkit</p> <ul> <li>Ensin käsin, sitten automaattisesti. <ul> <li>Ensin yhdelle (omalle käyttäjälle), sitten vasta monelle.</li> <li>Skriptit ja ohjelmat kehitetään omassa kotihakemistossa, ja kopioidaan muille toimivina ja testattuina.</li> </ul> </li> <li>Python helloworld.py: <code>print(&quot;hello world&quot;)</code></li> <li>Pieniä yhden binäärin ohjelmia esim. <a href="https://github.com/zyedidia/micro/releases/tag/v2.0.11">micro</a> (micro-2.0.11-linux64-static.tar.gz) tai <a href="https://github.com/tomnomnom/gron/releases">gron</a></li> <li>Karvinen 2018: <a href="https://terokarvinen.com/2018/control-windows-with-salt/">Control Windows with Salt</a></li> <li>Linuxissa omille skripteille ja binääreille /usr/local/bin/. Windowsissa ehkä C:/Windows/System32/.</li> </ul> <h3 id="h5-vaihtoehdot">h5 Vaihtoehdot</h3> <ul> <li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Huomaa, että osa artikkeleista on luonteeltaan raportteja tai muistiinpanoja, eli vähemmän valmiita kuin testatut ja siivotut ohjeet. Keskity kohtiin, joita voisit itse kokeilla tai hyödyntää) <ul> <li>Karvinen 2018: <a href="https://terokarvinen.com/2018/control-windows-with-salt/">Control Windows with Salt</a></li> <li>Itse valitsemasi opiskelijan raportti Saltin käytöstä Windowsilla. Löytyy esimerkiksi <a href="https://www.google.com/search?hl=en&amp;q=salt%20windows%20karvinen">Googlella &quot;salt windows karvinen&quot;</a></li> </ul> </li> <li>a) Asenna Salt Windowsille</li> <li>b) Ei voi kalastaa. Käytä Windowsilla Salttia paikallisesti ilman verkkoa (Ruma-X, powershell as admin, salt-call --local state.single ...)</li> <li>c) Hei ikkuna! Tee hei maailma Windowsin Saltille. Voit vaikkapa tehdä tyhjän tiedoston johonkin väliaikaistiedostojen kansioon. Käytä idempotentteja komentoja, esim file.managed.</li> <li>d) Installed. Asenna Windowsille ohjelma Saltilla. (Voit käyttää eri vaihtoehtoja: kopioida binäärin suoraan sopivaan kansioon, pkg.installed ja choco, pkg.installed ja salt winrepo).</li> <li>e) Vapaaehtoinen: Kokeile jotain muuta ominaisuutta tai toimintoa Saltilla Windowsissa.</li> </ul> <p>Vinkit</p> <ul> <li>Pieniä yhden binäärin ohjelmia esim. <a href="https://github.com/zyedidia/micro/releases/tag/v2.0.11">micro</a>, zip-paketti tai tervapallo pitää myös purkaa, binääri löytyy sieltä sisältä.</li> <li>Linuxissa omille skripteille ja binääreille /usr/local/bin/. Windowsissa ehkä C:/Windows/System32/.</li> <li>Microsoft 2023: <a href="https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/">Get a Windows 11 development environment</a>: Download a virtual machine: <a href="https://aka.ms/windev_VM_virtualbox">VirtualBox</a></li> </ul> <h3 id="h6-puolikas">h6 Puolikas</h3> <p>a) <strong>Puolikas miniprojekti</strong>. Tee ensimmäinen versio omasta miniprojektista - puolikas. Tässä tehtävässä palautettavan version ei tarvitse olla täysin valmis.</p> <p>Projektin sivulle</p> <ul> <li>Tarkoitus. Yhden lauseen kuvaus (tarkoitus, business purpose, what's in it for me)</li> <li>Ruutukaappaus</li> <li>Lisenssi (esim. vapaista lisensseistä suosittelen &quot;GNU General Public License 3&quot;. Voit lisensoida haluamallasi tavalla.)</li> <li>Kuinka valmis tämä on (alpha, beta, ... ja kuvaus ihmisten kielellä). &quot;h6 Puolikas&quot; palautuksessahan tämä on useimmilla aivan kesken, alpha.</li> <li>Download-nappi, lähdekoodi</li> <li>Miten asennan / otan tämän käyttöön</li> <li>Viittaus tai linkki kurssiin ja kaikkiin muihinkin käytettyihin lähteisiin</li> </ul> <p>Vinkkejä</p> <ul> <li>Kaiken ei tarvitse olla vielä valmista, mutta miniprojektin sivulla pitäisi olla keskeneräinen versio. Olisi hyvä, jos pääsisit kunnolla ongelmiin asti, jotta voit ratkoa niitä rauhassa - ja jotta minä voin antaa niihin neuvoja ensi viikolla.</li> <li>Ensin käsin, sitten automaattisesti.</li> <li>Ei skripti. Miniprojekti ei ole pelkkä shell script, eikä saltiksi naamioitu shell script. Käytä package, file, service, user ensisijaisesti, cmd.run vain jos nuo muut eivät sovi.</li> <li>Olisi mukavaa katsella töitä, joissa on tehty muutakin kuin asennettu Apache tai SSHd täsmälleen samalla tavalla kuin läksyssä.</li> <li>Mielenkiintoisia piirteitä voi olla vaikkapa <ul> <li>Asennetaan eri ohjelmia kuin ne, joita kurssilla on käsitelty</li> <li>Saa olla palvelin- tai työaseman ohjelmia <ul> <li>Tai edistyneemmille näiden yhdistelmä</li> </ul> </li> <li>Toimitaan eri käyttöjärjestelmässä (tai useammassa)</li> <li>Käytetään oikean yleisön kanssa jossain suppeassa ja harmittomassa ympäristössä (pelipalvelin tms)</li> </ul> </li> <li>Projekti on mini, ja vain osa koko kurssia. Tästä ei siis tarvitse tulla yhtä hieno kuin esimerkiksi monialaprojekti infrasta. Joillain vanhoilla kursseilla voi olla yksittäisiä erittäin hienoja ja laajoja projekteja, jotka saattavat ylittää kurssin vaatimustason.</li> <li>Tiistain ryhmäläiset saavat halutessaan osallistua myös torstain tunnille 08:15 pa3014, ilmoita sähköpostilla jos tulet silloin.</li> <li>Saat ensi viikolla vinkkejä ongelmien ratkaisuun. Tämä onnistuu sitä paremmin, mitä pidemmällä työsi on.</li> </ul> <p>Vanhoista projekteista voi saada vinkkiä, esimerkiksi</p> <ul> <li><a href="https://terokarvinen.com/2022/palvelinten-hallinta-2022p2/#omia-moduleja">2022 loppusyksyn miniprojekteja</a></li> <li><a href="https://terokarvinen.com/2021/configuration-management-systems-2022-spring/#comments">2021 loppusyksyn projekteja (kommenteissa palautteiden seassa)</a></li> </ul> <p>Miniprojektin tekoon on kaksi viikkoa, joten aloittaessa ei tietenkään tarvitse olla vielä valmista.</p> <h3 id="h7-miniprojekti-ja-koko-paketti">h7 Miniprojekti ja koko paketti</h3>Penetration testing course 2023https://terokarvinen.com/2023/tunkeutumistestaus-2023-kevat/Fri, 24 Mar 2023 09:50:01 +0200https://terokarvinen.com/2023/tunkeutumistestaus-2023-kevat/ <p>Learn to hack computers to protect your own. In the course, you will break into target computers.</p> <p>Excellent feedback, 4.9 out of 5. <img src="https://terokarvinen.com/img/five-stars-15.png" alt="Full five stars"></p> <table> <thead> <tr> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td>Course name and code</td> <td>Tunkeutumistestaus ict4tn027-3009</td> </tr> <tr> <td>Timing</td> <td>2023 <strong>period 4</strong> late spring, w12-w20</td> </tr> <tr> <td>Credits</td> <td>5 cr</td> </tr> <tr> <td>Classes</td> <td><strong>Mon 08:15</strong> - 13:45, online, mandatory participation</td> </tr> <tr> <td>Max students</td> <td>30</td> </tr> <tr> <td>Language</td> <td>Finnish (+reading material in English)</td> </tr> <tr> <td>Remote</td> <td>Yes, <strong>fully remote</strong></td> </tr> <tr> <td>Feedback</td> <td><strong>4.9</strong> / 5 Excellent feedback <img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience"></td> </tr> <tr> <td>Services</td> <td><a href="https://hhmoodle.haaga-helia.fi/course/view.php?id=36361">Moodle: Tunkeutumistestaus</a>, Jitsi, Laksu</td> </tr> <tr> <td>First class</td> <td><strong>2023-03-27 w13 Mon 08:15</strong>, Tero emailed video conference link</td> </tr> </tbody> </table> <p><em>Use of penetration testing techniques requires legal and ethical considerations. To safely use these tools, tactics and procedures, you might need to obtain contracts and permissions; and posses adequate technical skills. Check your local laws.</em></p> <p><em>Teaching is in Finnish, so the rest of this page will be in Finnish.</em></p> <p><em>Tämä on eettinen hakkerointi -kurssi. Opit, miten murtaudutaan tietokoneille, jotta voisit suojata omat ja toimeksiantajan järjestelmät. Nämä tekniikat, ohjelmat ja taktiikat ovat luvallisia vain tietyissä tilanteissa. Usein pitää hankkia lupia ja tehdä sopimuksia. Lisäksi näiden tekniikoiden turvalliseen käyttöön tarvitaan teknistä taitoa. Perehdy itse paikallisiin lakeihin.</em></p> <!--more--> <img src="https://terokarvinen.com/2023/tunkeutumistestaus-2023-kevat/its-raining-shells_hu2c3b7a67c2932fbb741bb11b3701e922_3206_200x200_fit_box_3.png" width="139" height="134" alt=" " class="imgOne center"> <h2 id="oppimistavoitteet">Oppimistavoitteet</h2> <p>Opintojakson suoritettuaan opiskelija</p> <ul> <li>Tuntee tunkeutumistestauksen prosessin pääpiirteissään</li> <li>Tietää, että tunkeutumistestaukselle on lailliset ja eettiset rajat</li> <li>Osaa kartoittaa kohdejärjestelmän haavoittuvuuksia</li> <li>Osaa hyödyntää valmiita hyökkäyksiä (exploit) ja liittää niihin hyötykuorman käyttäen kurssille valittua työkalua</li> <li>Osaa soveltaa tavallisimpia hyökkäyksiä weppisovelluksia vastaan, kun kohdeohjelmistot ovat helppoja ja haavoittuvia.</li> <li>Osaa hankkia tunkeutumistestauksessa tarvittavia ohjelmistoja</li> </ul> <p>Kurssilta ei saa mukaansa ilmaista pakettia nollapäivähaavoittuvuuksia, eikä kurssi anna mitään erityisoikeuksia eikä ammattinimikkeitä.</p> <h2 id="aikataulu">Aikataulu</h2> <ol> <li>2023-03-27 w13 ma <strong>Alkutesti. Pentest yleiskuva.</strong> Kurssin sääntöjen hyväksyntä ja alkutesti. Yleiskuva. Kohteiden rajaus (scope), lailliset rajat, etiikka, nuhteeton tausta. Hyökkäykseen sopivien työkalujen hankinta.</li> <li>2023-04-03 w14 ma <strong>Kybertappoketju. Valmiiden hyökkäysten käyttö, Metasploit. Harjoitusmaalien hankkiminen.</strong>. Hyökkäyksen suunnittelu ja toteutus kybertappoketjun (Hutchins et al. cyber kill chain) avulla. Metasploit. Porttiskannausten tallentaminen tietokantaan. Murtotekniikan ja etähallintaohjelmiston yhdistäminen. Harjoitushyökkäyksiä. Esimerkkihyökkäys ja vilkaisu työkaluihin (nmap, nc, metasploit search, use, set RHOSTS, exploit).</li> <li><em>2023-04-10 w15 ma Toinen pääsiäispäivä, ei opetusta.</em></li> <li>2023-04-17 w16 ma <strong>Hyökkäykset weppiin: useita tekniikoita.</strong>. WebGoat. OWASP 10 A2 broken authentication, A3 sensitive data exposure, A7 XSS, 2013A8 CSRF. Antti Halonen: Flipper Zero.</li> <li>2023-04-24 w17 ma <strong>Vierailija: Riku Juurikko: Social Engineering (English)</strong> (9-11). <strong>Välimiesproxyt</strong>. Mitmproxy, OWASP ZAP. TLS-salauksen purkaminen omalla CA-sertifikaatilla.</li> <li><em>2023-05-01 w18 ma Vappupäivä, ei opetusta.</em></li> <li>2023-05-08 w19 ma <strong>Tiedustelu</strong>. “Mittaa kahdesti, leikkaa kerran”. Passiivinen ja aktiivinen tiedustelu. Porttiskannus, verkkojen skannaus ja niiden oheistekniikat. KKO 2003:36. Nmap-porttiskanneri.</li> <li>2023-05-15 w20 ma <strong>Päätöskerta</strong>. <strong>Arvioitava laboratorioharjoitus</strong>, CTF.</li> </ol> <p>Tämä on edistynyt kurssi, joten tuntien aiheisiin voi tulla muutoksia kurssin edetessä.</p> <h2 id="kertausmateriaalia">Kertausmateriaalia</h2> <p>Tämä materiaali on vapaaehtoista, jos osaat ne jo. Lähteet ovat esimerkkejä, voit osata/opetella nuo asiat mistä vain haluat.</p> <ul> <li>TCP/IP-pino: <a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">Wikipedia: Internet protocol suite</a></li> <li>Linuxin komentokehote: <a href="https://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited</a> (ja Linuxin asennus <a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on VirtualBox</a>)</li> <li>Tietokantojen alkeet (millä vain alustalla): <a href="http://terokarvinen.com/2016/postgresql-install-and-one-table-database-sql-crud-tutorial-for-ubuntu">PostgreSQL Install and One Table Database - SQL CRUD tutorial for Ubuntu</a></li> <li>Ohjelmoinnin alkeet (millä vain kielellä): FreeCodeCamp.org: Javascript Algorithms And Data Structures Certification: Basic JavaScript: <a href="https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript">Introduction to JavaScript</a></li> </ul> <h2 id="luettavaa-ja-linkkeja">Luettavaa ja linkkejä</h2> <p>€ Maksulliset aineistot saattavat näkyä ilmaiseksi <a href="http://libguides.haaga-helia.fi/az.php">Haaga-Helian tunnuksilla kirjaston</a> kautta. <a href="https://www.oreilly.com/library/view/temporary-access/">Haaga-Helialla on käyttöoikeus O'Reilly Learning -kirjoihin (ent. Safari)</a>.</p> <p>Työkaluja kurssille</p> <ul> <li><a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on VirtualBox</a></li> <li><a href="https://terokarvinen.com/2020/remote-learning-tools-for-my-courses/">Remote Learning Tools for Tero's Courses</a></li> <li><a href="https://www.kali.org/">Kali Linux</a>. Uusi levykuva <a href="https://cdimage.kali.org/kali-2021.1/kali-linux-2021.1-live-amd64.iso">kali-linux-2021.1-live-amd64.iso</a> (vanha levykuva <a href="https://cdimage.kali.org/kali-2020.3/kali-linux-2020.3-live-amd64.iso">kali-linux-2020.3-live-amd64.iso</a>). Kun linkki menee vanhaksi, etsi Kalin kotisivulta tuorein amd64-arkkitehtuurin live-tikun iso-kuva.</li> </ul> <p><a id="L2">L2 weppihyökkäyksiä - tukee läksyä h2</a></p> <ul> <li> <p><a href="https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf">OWASP 10 2017 (pdf)</a>, erityisesti ne hyökkäykset, joita aiot kohta tehdä eli A2 Broken Authentication, A3 Sensitive Data Exposure, A7 Cross Site Scripting; sekä viime kerralla harjoiteltu A1 Injection.</p> </li> <li> <p>€ Santos et al 2018: Hacking Web Applications The Art of Hacking Series LiveLessons (video): Security Penetration Testing for Today's DevOps and Cloud Environments: <a href="https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_03_00">6.3 Understanding SQL Injection</a> ja <a href="https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_04_00">6.4 Exploiting SQL Injection Vulnerabilities</a> sekä <a href="https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_05_00_00">Lesson 5: Authentication and Session Management Vulnerabilities</a></p> </li> <li> <p>€ Percival &amp; Samancioglu 2020: The Complete Ethical Hacking Course (video): <a href="https://learning.oreilly.com/videos/the-complete-ethical/9781839210495/9781839210495-video21_1">Chapter 21: Cross Site Scripting</a></p> </li> <li> <p><a href="https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf">Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains</a></p> </li> </ul> <p>Yleiskuva, harjoitusmaaleja, web</p> <ul> <li><a href="https://attack.mitre.org/">MITRE ATT&amp;CK</a></li> <li><a href="https://darknetdiaries.com/">Darknet Diaries</a> . Podcastien kuunteluun kännykällä <a href="https://f-droid.org/en/packages/de.danoeh.antennapod/">AntennaPod löytyy F-Droidista</a></li> <li><a href="http://terokarvinen.com/2019/mitmproxy-on-kali-and-xubuntu-attack-and-testing">MitmProxy on Kali and Xubuntu</a></li> <li><a href="http://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target">Install Webgoat 8 - Learn Web Pentesting</a>. (It's also possible to install <a href="http://terokarvinen.com/2019/install-webgoat-pentest-learning-tool-on-ubuntu-with-docker">old version</a> 7 of WebGoat with Docker).</li> <li><a href="https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf">OWASP 10 2017 (pdf)</a>. Tällä hetkellä 2021-02-02 uusin versio.</li> </ul> <p>Aktiivinen tiedustelu. HackTheBox.</p> <ul> <li> <p>€ Santos et al: <a href="https://learning.oreilly.com/videos/the-art-of/9780135767849">The Art of Hacking (Video Collection)</a>: [..] <a href="https://learning.oreilly.com/videos/security-penetration-testing/9780134833989/9780134833989-sptt_00_04_03_00">4.3 Surveying Essential Tools for Active Reconnaissance: Port Scanning and Web Service Review</a></p> </li> <li> <p>man nmap (laaja, silmäily riittää)</p> </li> <li> <p>Kokonaisia blogeja ja videokanavia, vilkaise, ei tarvitse katsoa 200 h videota:</p> <ul> <li><a href="https://tools.kali.org/tools-listing">https://tools.kali.org/tools-listing</a></li> <li>0xdf <a href="https://0xdf.gitlab.io/">https://0xdf.gitlab.io/</a></li> <li>ippsec <a href="https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA/videos">https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA/videos</a></li> <li>John Hammond <a href="https://www.youtube.com/user/RootOfTheNull/videos?sort=p">https://www.youtube.com/user/RootOfTheNull/videos?sort=p</a></li> <li>Youtube-videoiden katseluun kännykällä <a href="https://f-droid.org/packages/org.schabi.newpipe/">NewPipe F-Droidista</a>. Youtube-videoiden nopeuden säätöön <a href="https://addons.mozilla.org/en-US/firefox/addon/videospeed/">codebicycle Video Speed Controller</a> addon Firefoxille.</li> </ul> </li> </ul> <p>Passwords, Learning to Learn tools</p> <ul> <li>infosecn1nja 2020: <a href="https://github.com/infosecn1nja/Red-Teaming-Toolkit">Red-Teaming-Toolkit</a></li> <li>Taylor et al 2018: The Art of Hacking: <a href="https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_06_00">Hacking User Credentials</a> €</li> </ul> <p>Web Fuzzing, Second to Last Words</p> <ul> <li>Hoikkala &quot;joohoi&quot; 2020: <a href="https://github.com/ffuf/ffuf">ffuf - Fast web fuzzer written in Go</a></li> <li>Hoikkala &quot;joohoi&quot; 2020: Still Fuzzing Faster (U fool). In <a href="https://www.twitch.tv/helsec">HelSec Virtual Meetup #1</a>.</li> <li>Miettinen 2020: iPhone BFU Acquisition and Analysis. In <a href="https://www.twitch.tv/helsec">HelSec Virtual Meetup #1</a>.</li> </ul> <p>Metasploit</p> <ul> <li> <p>€ Jaswal 2020: Mastering Metasploit - 4ed: <a href="https://learning.oreilly.com/library/view/mastering-metasploit-/9781838980078/B15076_01_Final_ASB_ePub.xhtml#_idParaDest-30">Chapter 1: Approaching a Penetration Test Using Metasploit</a> (kohdasta &quot;Conducting a penetration test with Metasploit&quot; luvun loppuun)</p> </li> <li> <p>Karvinen 2018: <a href="https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/">Install Metasploitable 3 – Vulnerable Target Computer</a> (Article uses rapid7/metasploitable3-ub1404 , see also &quot;rapid7/metasploitable3-win2k8&quot;)</p> </li> </ul> <h2 id="anna-palautetta">Anna palautetta</h2> <p>Palaute on todella tärkeä tapa kehittää kurssia – kiitos kommenteista jo etukäteen. Palaute kahteen kanavaan</p> <h3 id="1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan">1) Vapaamuotoinen palaute kommenttina tämän kurssisivun perään</h3> <p><a href="#comments">Vapaamuotoinen palaute kommenttina tämän kurssisivun perään</a></p> <p>Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:</p> <ul> <li>Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?</li> <li>Teitkö jotain ensimmäistä kertaa? Hyökkäsit weppiin, käytit jotain työkalua, skannasit kokonaisen verkon; käytit jotain kieltä, tekniikkaa tai työkalua?</li> <li>Oliko opittu hyödyllistä? Luuletko, että sille on käyttöä esim. tulevaisuudessa töissä tai kotona?</li> <li>Mitä mieltä olit läksyistä? Luku/video/podcast -materiaalista? Hands-on tehtävistä?</li> <li>Miten voisin parantaa kurssia?</li> <li>Viihdyitkö kurssilla?</li> <li>Suosittelisitko kurssia? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?</li> </ul> <h3 id="2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa">2) Numeerinen palaute Haaga-Helian palautejärjestelmään MyNetissa</h3> <p>Numeerinen palaute <a href="https://mynet.haaga-helia.fi">Haaga-Helian palautejärjestelmään MyNetissa</a></p> <p>Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa. On tärkeää saada jokaiselta palaute, jotta tulos on tilastollisesti merkitsevä.</p> <p>Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)</p> <ul> <li>Oma aktiivisuutesi opiskelussa 1-5</li> <li>Osaamistavoitteiden saavuttaminen 1-5</li> <li>Työskentelytavat tukivat oppimista 1-5</li> <li>Opiskeluympäristö tuki oppimista 1-5</li> <li>Hyödyllisyys työelämään 1-5</li> </ul> <p>Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)</p> <ul> <li>Mitkä asiat edistivät oppimistasi?</li> <li>Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?</li> </ul> <p>Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5</p> <p>Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)</p> <p>Kiitos palautteesta ja jännittävästä kurssista! Seuraavilla kursseilla nähdään.</p> <h2 id="laksyt">Läksyt</h2> <p>Palauta linkki Laksuun 24 h ennen seuraavaa lukujärjestykseen merkittyä kurssivarausta. Tehtävät ovat pakollinen ja tärkeä osa kurssia.</p> <p>Läksyt ovat virallisia vasta, kun ne on vahvistettu (yleensä oppitunnin päätteeksi). Tämä on edistynyt kurssi, joten ohjelmaan tulee yleensä muutoksia kurssin aikana. Osa tehtävistä edellyttää huolellisuuden lisäksi tietoja ja taitoja työkalujen käytöstä, jottei synny vahinkoja - tee vasta, kun tiedät oikeat työtavat.</p> <p>Läksyt käydään läpi seuraavalla tapaamiskerralla, ratkotaan yhdessä ongelmia ja annetaan suullista palautetta. Arvosana kotitehtäväpaketista tulee vasta kurssin lopuksi, mutta tehtävät tulee silti palauttaa aina vuorokautta ennen seuraavia tunteja. Julkaiseminen on vapaaehtoista, mutta erittäin suositeltavaa. Jos et jostain syystä uskalla tai muuten halua julkaista, voit laittaa työn weppisivulle salasanan taakse (kaikille kotitehtäville sama salasana) ja jakaa tämän salasanan kurssilaisten kanssa. Jos tuntien yhteydessä järjestetään testejä läksyjen aiheista, niiden pisteet sisältyvät arvostelun kohtaan läksyt.</p> <p>Läksyt pitää tehdä tietokoneella kokeilemalla ja raportoida tapahtumien kulku, ellei kyseisessä alakohdassa erikseen muuta lue. Raportti tulee kirjoittaa samalla, kun työskentelee.</p> <p><em>Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt.</em></p> <h3 id="h0-sieppari-ruispellossa">h0 Sieppari ruispellossa</h3> <p>Sieppaa ja analysoi verkkoliikennettä. Palauta Laksuun (10:05 mennessä) ja arvioi sitten kaksi. Nähdään taas 10:15.</p> <p>Vinkkejä</p> <ul> <li>Mitä teit / minkä komennon annoit</li> <li>Mitä tapahtui / mitä tuli vastaukseksi</li> <li>Analyysi edellyttää analyysia. Selitä omin sanoin, mistä on kyse ja mitä komentojen tulosteet / lokit / siepatun liikenteen osat tarkoittavat.</li> <li>Sieppaa vain omaa liikennettäsi</li> <li>Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt.</li> </ul> <h3 id="h1-omalabra">h1 OmaLabra</h3> <p><em>Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt. Koneet on eristettävä Internetistä hyökkäysten harjoittelun ajaksi.</em></p> <ul> <li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.) <ul> <li><a href="https://darknetdiaries.com/">Darknet Diaries</a> tai Herrasmieshakkerit podcast, yksi vapaavalintainen jakso jommasta kummasta. Voi kuunnella myös lenkillä, pyykiä viikatessa tms. Siisti koti / hyvä kunto kaupan päälle.</li> </ul> </li> <li>a) Asenna Kali virtuaalikoneeseen</li> <li>b) Asenna Metasploitable 2 virtuaalikoneeseen</li> <li>c) Tee koneille virtuaaliverkko, jossa <ul> <li>Kali saa yhteyden Internettiin, mutta sen voi laittaa pois päältä</li> <li>Kalin ja Metasploitablen välillä on host-only network, niin että porttiskannatessa ym. koneet on eristetty intenetistä, mutta ne saavat yhteyden toisiinsa</li> </ul> </li> <li>d) Etsi Metasploitable porttiskannaamalla (db_nmap -sn). Tarkista selaimella, että löysit oikean IP:n - Metasploitablen etusivulla lukee Metasploitable.</li> <li>e) Porttiskannaa Metasploitable huolellisesti (db_nmap -A)</li> <li>f) Murtaudu Metasploitablen VsFtpd-palveluun Metasploitilla (search vsftpd, use 0, set RHOSTS - varmista osoite huolella, exploit, id)</li> <li>n) Vapaaehtoinen: Murtaudu johonkin toiseen Metasploitablen palveluun.</li> <li>m) Vapaaehtoinen, vaikea: Asenna ja korkkaa Metasploitable 3. Karvinen 2018: <a href="https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/">Install Metasploitable 3 – Vulnerable Target Computer</a></li> </ul> <p>Vinkkejä</p> <ul> <li>Podcastien kuunteluun kännykällä <a href="https://f-droid.org/en/packages/de.danoeh.antennapod/">AntennaPod löytyy F-Droidista</a> ja Google Playsta.</li> <li>Lue Valkamon artikkeli ennenkuin ryhdyt asentamaan virtuaalikoneita</li> <li>Valkamo 2022: <a href="https://tuomasvalkamo.com/PenTestCourse/week-2/">Hacking into a Target Using Metasploit</a>: Metasploitable</li> <li>Halutessasi voit käyttää myös muita virtualisointiympäristöjä kuin VirtualBoxia, esim Macilla UTM. Tämä edellyttää toki omaa soveltamista.</li> <li>Virtuaalikoneiisin voi asentaa uusia verkkokortteja vain, kun ne ovat sammuksissa</li> <li>Suosittelen Kaliin 4 GB muistia</li> <li>OffSec Ltd 2023: <a href="https://www.kali.org/get-kali/#kali-virtual-machines">Prebuilt Virtual Machines</a></li> <li>Jokin tehtävä voi olla vaikea. Tee ja raportoi silloin kaikki mitä osaat. Listaa lähteet, joista hait ohjeita. Onko jotain vielä kokeiltavana? Mitä haasteita on vielä ratkaisun tiellä? Mitä virheimoituksia tai vastaavia tulee? Voit myös katsoa wepistä esimerkkiratkaisun - muista viitata lähteeseen ja merkitä, missä kohdassa katsoit ratkaisua. Ja katsotaan yhdessä tunnilla loput.</li> <li>Murtautumiseen Metasploitable 2:n löytyy esimerkkiratkaisuja <a href="https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide">Metasploitable 2 Exploitability Guide</a>.</li> <li>Muista laittaa lähdeviitteet.</li> <li>O'Reilly Learning videot ja kirjat pääset lukemaan ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston kautta.</li> <li>VirtualBoxissa host-only-networking on kätevä. Voit laittaa Kaliin kaksi verkkokorttia, toinen NAT:lla Internetiin ja toinen host-only-network:n. Verkkoasetusten advanced-kohdasta voi vetää virtuaalisen verkkokaapelin irti ja kiinni, vaikka kone on päällä.</li> <li>Jos Metasploitable 2 -maali ei löydy omasta verkosta (arp, arpwatch, netdiscover, nmap -sn...), voit kirjatua sisään (msfadmin:msfadmin) ja 'ifconfig' tai 'ip addr'. Metasploitable 2:n kannattaa laittaa vain yksi &quot;Host only networking&quot; verkkokortti, se ei toimi itsestään kahden verkkokortin kanssa.</li> <li>Löydätkö hyökkäyksen, joka tukee meterpreter-payloadia? Onnistutko ylentämään meterpreteriin (sessions -u 1)?</li> <li>Kun olet irroittanut Internetin ja valmiina skannaamaan, varmista. Kokeile, että Google tai DuckDuckGo ei aukea selaimella, että et voi pingata esim 8.8.8.8. Kokeile, että maalikoneesi vastaa pingiin. Jos maalikoneella on weppipalvelin, kannattaa katsoa selaimella, että sieltä aukeaa olettamasi sivu.</li> <li>Tietoja verkosta <ul> <li>ip a; ifconfig</li> <li>ip route</li> <li>ipcalc 10.0.0.1/24</li> <li>ping 8.8.8.8</li> </ul> </li> <li>Metaspoit (sudo msfdb run) on hyvä työkalu tunkeutumiseen. <ul> <li>db_status, workspace, db_nmap, hosts, services, setg RHOSTS 127.0.0.1, exploit, ctrl-Z, sessions</li> <li>sudo nmap -sn 127.0.0.1-255 -oA sweep; sudo nmap -A -p 127.0.0.1 -oA one</li> </ul> </li> <li>Ole huolellinen, irrota harjoituskoneet Internetistä skannausten ja hyökkäysten ajaksi. Mitään ulkopuolisia koneita ei saa skannata eikä mihinkään ulkopuolisiin koneisiin saa tunkeutua.</li> </ul> <h3 id="h2-totally-legit-sertificate">h2 Totally Legit Sertificate</h3> <p><em>Lisää aikaa! Pääsiäisenä ei ole oppituntia, ja palautus on vasta 24 h ennen seuraavan tapaamiskerran alkua.</em></p> <ul> <li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.) <ul> <li>PortSwigger: <a href="https://portswigger.net/web-security/sql-injection">SQL injection</a></li> <li>PortSwigger: <a href="https://portswigger.net/web-security/cross-site-scripting">Cross-site scripting</a></li> </ul> </li> <li>a) ZAP! Asenna ZAP välimiesproxy ja näytä, että pystyt sieppaamaan liikennettä selaimesta.</li> <li>b) Totally Legit Sertificate. Asenna ZAP:n generoima CA-sertifikaatti selaimeen ja osoita testillä, että pystyt sieppaamaan HTTPS-salakirjoitettua liikennettä.</li> <li>c) Intercept. Pysäytä hakupyyntö, muokkaa sitä ja päästä se palvelimelle.</li> <li>d) Vuohi. <a href="https://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target/">Asenna WebGoat</a> ja kokeile, että pääset kirjautumaan sisään.</li> <li>e) Vauvavuohi. Ratkaise WebGoatista tehtävät &quot;HTTP Basics&quot; ja &quot;Developer tools&quot;. Katso vinkit alta.</li> <li>f) SELECT * FROM student. Ratkaise <a href="https://sqlzoo.net/wiki/SQL_Tutorial">SQLZoo:sta</a>: 0 SELECT basics, 2 SELECT from World kohdat 1-5.</li> <li>g) Ratkaise WebGoatista*: <ul> <li>A1 Injection (intro)</li> <li>A2 Broken authentication: <ul> <li>Authentication bypasses: 2 2FA Password Reset</li> </ul> </li> <li>A3 Sensitive data exposure <ul> <li>Insecure Login: 2 Let's try</li> </ul> </li> <li>A7 Cross Site Scripting (XSS): Cross site scripting <ul> <li>2 What is XSS?</li> <li>7 Try It! Reflected XSS</li> </ul> </li> <li>A8:2013 Request Forgeries: <ul> <li>Cross-Site Request Forgeries <ul> <li>3 &quot;Basic Get CSRF Exercise&quot;</li> <li>4 &quot;Post a review on someone else’s behalf&quot;.</li> </ul> </li> </ul> </li> </ul> </li> <li>h) Vapaaehtoinen bonus: ratkaise Vulhubista valitsemasi kone.</li> </ul> <p>* Oletko jo ratkonut Webgoatin? Voit korkata sen tilalta koneen tai pari HackTheBox.eu:sta tai Vulnhubista.</p> <p>Vinkit:</p> <ul> <li>Murtautumaan oppii murtautumalla. <ul> <li>Kannattaa treenata päivittäin.</li> </ul> </li> <li>Jos käytät ulkopuolisia harjoitusmaaleja (esim HackTheBox.eu) <ul> <li>Ota säännöt (rules tms) kuvakaappauksena talteen</li> <li>Jos sinulla on VPN-yhteys kohdeverkkoon, testaa ennen aloittamista, että paketteja ei vuoda oikeaan Internetiin</li> <li>Julkaise ratkaisuja vain sellaisiin tehtäviin, joiden tekijät ovat antaneet luvan julkaista ratkaisuja (esim HackTheBox eläköityneet (retired) maalit saa julkaista, kilpailussa mukana olevia ei)</li> </ul> </li> <li>Kun harjoittelet hyökkäyksiä WebGoatilla (XSS, SQLi, CSRF), voit samalla miettiä vaikutusta (impact). Miten tätä haavoittuvuutta voisi hyödyntää lisäoikeuksien hankkimiseen ja luvattomien toimintojen suorittamiseen.</li> </ul> <h3 id="h3-the-box">h3 The Box</h3> <p><em>Jäikö jotain? Täydennä tarvittaessa edellisen kerran läksy keskiviikkoon 19.4 mennessä. Kommenteista löydät esimerkkiratkaisuja tehtäviin, muista viitata kaikkiin lähteisiin. ps. Kuten tunnilla huomasimme, parhaatkin opiskelijat käyttävät näihin melkoisesti aikaa ja aivoja.</em></p> <p><em>Oletko guru? Jos Starting point on liian helppo, voit korvata &quot;Starting point&quot; tehtävät varsinaisella kilpa- tai eläköityneellä koneella.</em></p> <ul> <li>x) Katso ja tiivistä (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.) <ul> <li>Yksi valitsemasi <a href="https://www.youtube.com/@ippsec">IppSec:n murtautumisvideo</a>.</li> </ul> </li> <li>a) We like to shop. Ratkaise Portswigger Academyn <a href="https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data">&quot;Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data&quot;</a>. (Tee tarvittaessa tunnus Portswigger Academyyn).</li> <li>b) HTB. Tee HackTheBox.com tunnus. Avaa OpenVPN-yhteys &quot;Starting Point&quot; verkkoon. Estä tunnelin ulkopuolinen liikenne eli liikenne oikeaan Internettiin (vinkit alla). Testaa, että normaali Internet-liikenteesi on estetty.</li> <li>c) Meow. Käynnistä &quot;Starting point&quot;: &quot;Meow&quot;. (Spawn machine). Tallenna ruutukaappaus sivusta, jossa näkyy koneen osoite ja tunkeutumistehtäviä. Porttiskannaa kone ja analysoi tulokset. Suorita HTB:n antamat tehtävät. Raportoi normaalisti, &quot;Starting point&quot; -koneista saa julkaista läpikävelyohjeita.</li> <li>d) Fawn. Ratkaise Fawn. (HTB Starting point)</li> <li>e) Dancing. Ratkaise Dancing. (HTB Starting point)</li> <li>f) Vapaaehtoinen tai vaihtoehtotehtävä kohdille b-e: korkkaa yksi normaali kone HackTheBoxin Machines-kohdasta.</li> <li>g) Vapaaehtoinen: korkkaa toinenkin HTB Machines -kone.</li> </ul> <p>Vinkit</p> <ul> <li>Tallenna säännöt, scope ym kuvakaappauksina. Eli minkä sivun perusteella päätit, että juuri tätä konettaa on oikeus käyttää harjoitusmaalina.</li> <li>HackTheBoxin OpenVPN-asetustiedoston lataaminen: <ul> <li>Kirjaudu HackTheBox.com</li> <li>Connect to HTB (oikealta ylhäältä): Starting point: OpenVPN; Download VPN. Saat .opvn-asetustiedoston.</li> <li>Huomaa, että &quot;Labs&quot; ja &quot;Starting point&quot; ovat eri verkot, ja niille tarvitaan eri OpenVPN-tiedosto</li> </ul> </li> <li>OpenVPN helposti ja turvallisesti <ul> <li>'nm-connection-editor' eli &quot;Network Connections&quot;. Löytyy myös vasemman yläkulman starttivalikossa &quot;Advanced Network Configuration&quot;, tai tarjottimelta verkon kuvaketta oikealla napilla klikkaamalla.</li> <li>VPN Connections: Configure VPN: Import a saved VPN configuration... Valitse lataamasi .opvn -tiedosto.</li> <li>Yhteys käyttöön: Tarjottimelta (oikea ylänurkka) vasemmalla napilla klikkaamalla menusta: VPN Connections: starting_point_terokarvinen.opvn</li> <li>Näin valittu OpenVPN-yhteys blokkaa tunnelin ulkopuolisen liikenteen. Samasta tarjottimen nettikuvakkeen valikosta voit palauttaa normaalin yhteyden, kun et enää harjoittele HackTheBoxia.</li> </ul> </li> <li>HTB käytöstä <ul> <li>Kun olet kirjautuneena HackTheBoxin etusivulla, oikean yläkulman &quot;Connect to HTB&quot; tai &quot;Starting Point&quot; näkyy vihreänä, kun olet HTB:nkin mielestä kytkeytyneenä. Sivu tosin pitää ladata uudelleen, jotta väri vaihtuu.</li> <li>Eri koneiden (Meow, Fawn...) &quot;Spawn machine&quot; -nappi näkyy toimivana vain, kun sinulla on OpenVPN-yhteys auki.</li> </ul> </li> <li>Varmista, että Internet-liikenne on estetty <ul> <li>ping 1.1.1.1 # ei vastausta, user timeout ctrl-c</li> <li>ping google.com # ei vastausta</li> <li>jne...</li> </ul> </li> <li>Windowsin SMB-tiedostojakoja on kätevä tutkia 'smbclient' ohjelmalla. (Myös nmap ja metasploit sisältävät työkaluja SMB:n käyttöön).</li> <li>HTB &quot;Starting point&quot; ja eläköityneet &quot;Retired&quot; koneet saa raportoida normaalisti ja julkisesti. Jos ratkaiset HTB kilpakoneita ja raportoit niistä, niin salasanan taakse, että muutkin saavat kilpailla.</li> </ul> <h3 id="h4-sequel-fish">h4 Sequel fish</h3> <ul> <li>x) Lue ja tiivistä (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Cheatsheetistä voit poimia muutaman itselle relevantin kohdan.) <ul> <li><a href="https://duckduckgo.com/?q=cialdini+principles">Cialdinin suostuttelun periaatteet</a> (haluamastasi lähteestä)</li> <li>PortSwigger: <a href="https://portswigger.net/web-security/sql-injection/union-attacks">SQL injection UNION attacks</a></li> <li>PortSwigger: <a href="https://portswigger.net/web-security/sql-injection/cheat-sheet">SQL injection cheat sheet</a></li> </ul> </li> <li>a) Kalassa. Laadi keihäskalasteluviesti (spear phising) kuvitteelliselle yritykselle. Tavoitteena on saada kohde avaamaan liitteenä oleva Excel-dokumentti ja laittamaan makrot päälle. Käytä ainakin kahta <a href="https://duckduckgo.com/?q=cialdini+principles">Cialdinin periaatetta</a>. Selitä, miten näitä periaatteita on sovellettu viestiisi. Keksi skennario ja kohde itse. Käytä työssä vain kuvitteellisia yrityksiä ja henkilöitä. Viestiä ei lähetetä mihinkään, se tulee vain raporttiin. Liitteenä olevaa Excel-dokumenttia ei tarvitse tehdä, mutta jos siinä on jotain nokkelaa, voit kuvailla, mitä se olisi.</li> <li><a href="https://portswigger.net/web-security/all-labs">PortSwigger labs</a> <ul> <li>b) SQL injection vulnerability allowing login bypass.</li> <li>c) SQL injection UNION attack, determining the number of columns returned by the query.</li> <li>d) SQL injection UNION attack, finding a column containing text.</li> <li>e) SQL injection UNION attack, retrieving data from other tables.</li> <li>f) SQL injection UNION attack, retrieving multiple values in a single column.</li> <li>g) SQL injection attack, querying the database type and version on Oracle.</li> <li>h) Vapaaehtoinen, vaikea: <a href="https://portswigger.net/web-security/all-labs">Mystery labs challenge</a>. Tason voit itse valita. Monet harjoitukset sisältävät kohtia, joita ei ole erikseen opetettu kurssilla.</li> </ul> </li> <li>i) Vapaaehtoinen, vaikea: Korkaa HTB:n maalikone, retired tai kilpakone.</li> </ul> <p>Vinkit</p> <ul> <li>SQL injektioiden perusteet olivat läksynä jo aiemmin, joten voit vilkaista omaa tiivistelmääsi. PortSwigger: <a href="https://portswigger.net/web-security/sql-injection">SQL injection</a></li> <li>Injektiot voi usein kirjoittaa ihan suoraan selaimen osoitekenttään, eli edes välimiesproxya ei usein tarvita.</li> <li>Muista kirjata välivaiheet ja selittää, miten päädyit valitsemaasi hyökkäykseen.</li> <li>Portswigger Academyn SQLi-harjoitus &quot;SQL injection attack, querying the database type and version on MySQL and Microsoft&quot; näytti olevan rikki kokeillessani, mutta sitä edellinen ja seuraava toimivat. Tuo rikkinäinen harjoitus ei ole läksynä.</li> <li>Jos jäät jumiin, Portswiggerin harjoituksiin on läpikävelyohjeet. Jos joudut käyttämään niitä, merkitse missä kohdassa tarvitsit.</li> <li>Selitä, miten päättelet ja muotoilet hyökkäyksen.</li> <li>Katso tarvittaessa kyseisen tietokannan omaa referenssimanuaalia. Esimerkiksi mitä sarakkeita on Postgren information_schema.tables -taulussa: <a href="https://duckduckgo.com/?q=postgre+information_schema.table">haku &quot;postgre information_schema.tables&quot;</a>, ensimmäinen osuma on virallinen manuaali <a href="https://www.postgresql.org/docs/current/information-schema.html">Chapter 37. The Information Schema - PostgreSQL Documentation</a></li> <li>Pakollisissa tehtävissä ei ole mitään sokeita injektioita. Niitä voi tulla vapaaehtoisessa Mystery labsissa. Joissain sokeissa injektioissa (blind SQL injection), data kuljetetaan ulos nimipavelun avulla (dns exfiltration). PortSwiggerin labroissa nämä harjoitukset toimivat labran tulimuurin takia vain PortSwiggerin omilla työkaluilla. Tämä koskee siis vain paria harjoitusta noin sadasta.</li> </ul> <h3 id="h5-final-countdown">h5 Final Countdown</h3> <ul> <li>x) Lue ja tiivistä (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.) <ul> <li>Karvinen 2022: <a href="https://terokarvinen.com/2022/cracking-passwords-with-hashcat/">Cracking Passwords with Hashcat</a></li> <li>Karvinen 2023: <a href="https://terokarvinen.com/2023/crack-file-password-with-john/">Crack File Password With John</a></li> <li>Karvinen 2023: <a href="https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/">Find Hidden Web Directories - Fuzz URLs with ffuf</a></li> </ul> </li> <li>y) The SUPER ultimate Hakk3r Che33tsheet 0.0.1. Tee tiivistelmä omista ja kavereiden parhaista tunketumistekniikoista. Ole täsmällinen, liitä komennot mukaan. Tämän kohdan vastaus lienee pidempi kuin aiempien x-tehtävien. Viittaa lähteisiin. Tässä alakohdassa ei tarvitse ajaa komentoja tietokoneella.</li> <li>a) Asenna Hashcat ja testaa sen toiminta murtamalla esimerkkisalasana.</li> <li>b) Salainen, mutta ei multa. Ratkaise dirfuzt-1 artikkelista Karvinen 2023: <a href="https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/">Find Hidden Web Directories - Fuzz URLs with ffuf</a></li> <li>c) Asenna John the Ripper ja testaa sen toiminta murtamalla jonkin esimerkkitiedoston salasana.</li> <li>d) Jurpon sivut. Ohhoh, sieppasit juuri Jurpon Windowsista NTLM-tiivisteen 83f1cf89225005caeb4e52c9ea9b00e0 . Liitteenä Jurpon kotisivulta leikattu ja liimattu teksti. Tee oma hyökkäyssanakirja ja murra tiiviste myöhempää liikkumista (lateral movement) varten.</li> <li>e) Valitse 2: Ratkaise kaksi itse valitsemaasi tehtävää <a href="https://portswigger.net/web-security/all-labs">PortSwigger labs</a> -sivulta. Tietysti sellaisia, jotka eivät ole olleet vielä läksynä.</li> <li>k) Vapaaehtoinen: käännä hashcat lähdekoodista. Auttaisikohan se hashcat:n AMD Ryzen -ongelmiin? Jos sinulla on AMD Ryzenin juuri se ongelmallinen malli, voit myös etsiä vaihtoehdon Hashcatille.</li> <li>l) Vapaaehtoinen: Murra jonkin itse tekemäsi tiedoston salasana. Onnistuuko muillakin kuin zip:llä?</li> <li>m) Vapaaehtoinen, vaikea: Lataa jokin kone Vulnhubista ja murtaudu siihen.</li> </ul> <p>Liite: Jurpon kotisivu</p> <pre><code>Jurpon kotisivu MasterLazerMan on suosikkisankarini. Olen aika komea, koska harrastan thriatlonin lisäksi Foo Man Zhu -perinnepainia. Olen kotoisin Kouvolasta, jonka arkkitehtuuri saa sydämmeni sykkiimään vikkelämmin. Nähdään IRCissä, sähköpostissa tai DeepThinked-piilopalvelussa TORissa. </code></pre> <p>Vinkit</p> <ul> <li>Kavereiden raportteja löydät hakukoneilla ja tämän sivun kommenteista</li> <li>Viittauksia jaossa! Kannattaa tietysti laittaa oma raportti linkkinä ja houkuttelevalla kuvauksella tämän sivun kommentteihin.</li> </ul> <h2 id="adminstrivia">Adminstrivia</h2> <p>Sprial shell icon by Emoji One, received under CC-by 4.0 international license.</p>Final Lab for Linux Palvelimet 2023https://terokarvinen.com/2023/linux-palvelimet-2023-arvioitava-laboratorioharjoitus/Fri, 17 Mar 2023 13:47:25 +0200https://terokarvinen.com/2023/linux-palvelimet-2023-arvioitava-laboratorioharjoitus/ <p>This is the evaluated lab exercise for Linux Server course. Student had an empty virtual Linux installation and free use of public Internet.</p> <p>Course <a href="https://terokarvinen.com/2023/linux-palvelimet-2023-alkukevat/">Linux palvelimet</a> is in Finnish, so the rest of this page is in Finnish.</p> <h2 id="ohjeita">Ohjeita</h2> <p>Tervetuloa <a href="https://terokarvinen.com/2023/linux-palvelimet-2023-alkukevat/">kurssin</a> viimeiseen labraan!</p> <p>Tehtävä alkaa <strong>tyhjästä Linux-virtuaalikoneesta</strong>. Koneella saa olla virtualisointiympäristön tuki (esim VirtualBox Guest additions) ja oletuksena asennuksen mukana olevat paketit. Muita paketteja ei saa olla. Jos koneellasi on vahingossa joitain muuta, keskustele siitä Teron kanssa.</p> <p>Harjoituksessa <strong>saa käyttää julkisista lähteistä löytyvää materiaalia</strong>. Omia paikallisia muistiinpanoja ei saa käyttää. Harjoitus on yksilötyö, joten tehtävistä keskustelu ja yhteistyö kesken harjoituksen on kielletty.</p> <p>Harjoituksen on tarkoitus olla hauska loppuhuipennus ja tarjota paljon haasteita kaikille kolmeksi tunniksi. Jotta luokan nopeimmillakin on tekemistä koko ajaksi, tehtäviä on enemmän kuin mitä useimmat ehtivät ratkoa. Siksi harjoituksesta voi siis saada erinomaisen tuloksen, vaikka ei ratkoisikaan kaikkia kohtia täydellisesti.</p> <p><strong>Testaamatta == tekemättä</strong>. Tee ja raportoi jokaisesta tekemästäsi asiasta testi, joka osoittaa, että tehty asia toimii. Tee sellainen testi, joka on mahdollisimman lähellä loppukäyttäjän tai tilaajan käyttöä.</p> <p>Tallenna raportti nimellä <strong>report/index.md</strong> . Laita samaan kansioon jpg tai png -muotoiset kuvat.</p> <p>Huomaa: tässä ei tarvitse raportoida kaikkia askelia, <strong>vain testit</strong> että asiat toimivat, tai maininta, että tätä ei ole tehty. Tämä on siis paljon lyhempi raportti kuin kotitehtävässä. Älä julkaise raporttia kesken harjoituksen.</p> <h2 id="tehtavat">Tehtävät</h2> <ul> <li>a) Taustatiedot <ul> <li>Oma nimi</li> <li>Opiskelijanumero</li> <li>Linkki omaan kotitehtäväpakettiin</li> </ul> </li> <li>b) Tiivistelmä koko työstä lopuksi <ul> <li>Vastaa tähän kohtaan aivan viimeisenä</li> <li>Mikä toimii, mikä ei <ul> <li>Tämä toimii: toimivien palveluiden osoitteet tai polut komentoihin</li> <li>Tämä ei vielä toimi: luettelo kohdista, joita ei ratkaistu. <ul> <li>Huomaa, että nopeimpienkin viihdyttämiseksi tässä tehtävässä on enemmän kohtia kuin mitä muutamassa tunnissa ehtii ratkoa.</li> </ul> </li> </ul> </li> </ul> </li> <li>c) Ei kolmea sekoseiskaa <ul> <li>Suojaa raportti Linux-oikeuksilla niin, että vain oma käyttäjäsi pystyy katselemaan raporttia</li> </ul> </li> <li>d) 'hey' <ul> <li>Tee kaikkien käyttäjien käyttöön komento 'hey' <ul> <li>Tulosta haluamaasi ajankohtaista tietoa, esim päivämäärä, koneen osoite tms</li> <li>Pelkkä &quot;hei maailma&quot; ei riitä</li> </ul> </li> <li>Komennon tulee toimia kaikilla käyttäjillä työhakemistosta riippumatta</li> </ul> </li> <li>e) 1000x nano <ul> <li>Asenna micro-editori ja sille jokin plugin (siis micron oma lisäke).</li> </ul> </li> <li>f) Stattisesti sinun <ul> <li>Asenna Apache-weppipalvelin</li> <li>Tee järjestelmään käyttäjä Erkki Esimerkki tunnuksella &quot;erkki&quot;. Lisää Erkin salasana raporttiisi, jotta voit antaa sen Erkille myöhemmin.</li> <li>Tee Erkille kotisivu, joka näkyy osoitteessa http://localhost/~erkki/</li> </ul> </li> <li>g) Salattua hallintaa <ul> <li>Asenna ssh-palvelin</li> <li>Tee uusi käyttäjä omalla nimelläsi, esim. minä tekisin &quot;Tero Karvinen test&quot;, login name: &quot;terote01&quot;</li> <li>Automatisoi ssh-kirjautuminen julkisen avaimen menetelmällä, niin että et tarvitse salasanoja, kun kirjaudut sisään. Voit käyttää kirjautumiseen localhost-osoitetta</li> <li>Vaihda SSH-palvelin kuuntelemaan porttiin 1337/tcp</li> </ul> </li> <li>h) Djangon lahjat <ul> <li>Asenna omalle käyttäjällesi Django 4 kehitysympäristö</li> <li>Tee tietokanta lahjoitetuista esineistä, jossa on nämä ominaisuudet <ul> <li>Kirjautuminen salasanalla</li> <li>Tietokannan muokkaus wepissä Djangon omalla ylläpitoliittymällä (Django admin)</li> <li>Käyttäjä Erkille, jossa ei ole ylläpito-oikeuksia</li> <li>Taulu Donations, jossa jokaisella tietueella on nimi (name)</li> <li>Jos haluat, voit lisäksi bonuksena laittaa mukaan kentän hinta (price)</li> </ul> </li> </ul> </li> <li>h) Tuotantopropelli <ul> <li>Jos olet tässä kohdassa, olet kyllä työskennellyt todella nopeasti (tai sitten teet tätä tehtävää huviksesi kurssin jälkeen). Mutta älä huoli, tässä haastetta, jotta et joudu pyörittelemään peukaloita.</li> <li>Tee tuotantotyyppinen asennus Djangosta</li> <li>Laita Django-lahjatietokanta tuotantotyyppiseen asennukseen</li> </ul> </li> </ul> <p>Hauskaa labraa!</p> <h2 id="lopuksi">Lopuksi</h2> <p>Palauta kurssin Moodle-sivulle.</p> <h2 id="palaute">Palaute</h2> <p>Kiitos kaikesta palautteesta! Olen iloinen, että piditte kurssista, ja otan kaikki kehitysideat käyttöön.</p> <p>Jos joltain vielä puuttuu palaute, niin <a href="https://terokarvinen.com/2023/linux-palvelimet-2023-alkukevat/#anna-palautetta">&gt;&gt; anna palautetta &gt;&gt;</a>.</p>Extract HTML Files from HARhttps://terokarvinen.com/2023/extract-har-files/Mon, 27 Feb 2023 15:56:14 +0200https://terokarvinen.com/2023/extract-har-files/ <p>Web browsing sessions can be saved as HAR files for debugging. &quot;Save as HAR&quot; is supported by Firefox, Chrome, OWASP ZAP and Burp.</p> <p>This tool extracts HTML web pages from HAR file.</p> <h2 id="install">Install</h2> <p><a href="har-extract-text.py">Download har-extract-text.py</a></p> <p>Har-extract-text.py is free software under GNU General Public License, version 3.</p> <pre><code>$ wget https://terokarvinen.com/2023/extract-har-files/har-extract-text.py $ chmod u+x har-extract-text.py </code></pre> <p>And enjoy</p> <pre><code>$ ./har-extract-text.py -i tero.har </code></pre> <h2 id="saving-a-har-file">Saving a HAR file</h2> <p>Web browsers and MITM proxies can save HAR files. HAR files are supported by Firefox, Chrome, Edge, OWASP ZAP and Burp.</p> <p>Firefox: F12: Network (tab). Right click: &quot;Save all as HAR&quot;.</p> <p>OWASP ZAP: History (pane). Select multiple URLs. Right click: &quot;Save Selected Entries as HAR (HTTP Archive File)&quot;</p> <h2 id="usage">Usage</h2> <p>Save your HAR file. Here, I've saved it as &quot;tero.har&quot;.</p> <pre><code>$ har-extract-text.py -i tero.har Created output directory &quot;har-out/.&quot; Loaded HAR file &quot;tero.har&quot; with 25 entries. Wrote &quot;har-out/Foo.html&quot;: 23 567 chars. Wrote &quot;har-out/Bar.html&quot;: 42 000 chars. ... Wrote 25 HTML files to &quot;har-out/&quot;. Done. </code></pre> <p>Now you can open the HTML files using a web browser.</p> <h2 id="help">Help</h2> <pre><code>$ ./har-extract-text.py --help usage: har-extract-text.py [-h] [-v] [-d] [-m MATCH] [-i INFILE] [-o OUTDIR] [-f] Extract text (e.g. HTML pages) from HAR file First, save a HAR file using OWASP ZAP (tested) or Firefox. Then har-extract-text.py tero.har Copyright 2023 Tero Karvinen http://TeroKarvinen.com . GNU General Public License, version 3. optional arguments: -h, --help show this help message and exit -v, --verbose -d, --debug -m MATCH, --match MATCH Only extracts files matching regex. -i INFILE, --infile INFILE -o OUTDIR, --outdir OUTDIR -f, --overwrite Overwrite HTML files if they already exist. Copyright 2023 Tero Karvinen http://TeroKarvinen.com </code></pre> <h2 id="har-is-just-json">HAR is just JSON</h2> <p>A HAR file just saves your browsing as a JSON file. Here is a sample from a start of a HAR file saved from Firefox.</p> <div class="highlight"><pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;log&#34;</span>: { </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;version&#34;</span>: <span style="color:#c30">&#34;1.2&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;creator&#34;</span>: { </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;name&#34;</span>: <span style="color:#c30">&#34;Firefox&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;version&#34;</span>: <span style="color:#c30">&#34;123.9.0&#34;</span> </span></span><span style="display:flex;"><span> }, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;browser&#34;</span>: { </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;name&#34;</span>: <span style="color:#c30">&#34;Firefox&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;version&#34;</span>: <span style="color:#c30">&#34;123.9.0&#34;</span> </span></span><span style="display:flex;"><span> }, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;pages&#34;</span>: [ </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;startedDateTime&#34;</span>: <span style="color:#c30">&#34;2023-02-26T14:04:12.086+00:00&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;id&#34;</span>: <span style="color:#c30">&#34;page_1&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;title&#34;</span>: <span style="color:#c30">&#34;Tero Karvinen - Learn Free software with me&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;pageTimings&#34;</span>: { </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;onContentLoad&#34;</span>: <span style="color:#f60">276</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;onLoad&#34;</span>: <span style="color:#f60">559</span> </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> ], </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;entries&#34;</span>: [ </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;pageref&#34;</span>: <span style="color:#c30">&#34;page_1&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;startedDateTime&#34;</span>: <span style="color:#c30">&#34;2023-02-27T14:04:12.086+00:00&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#309;font-weight:bold">&#34;request&#34;</span>: { </span></span></code></pre></div>Crack File Password With Johnhttps://terokarvinen.com/2023/crack-file-password-with-john/Thu, 09 Feb 2023 11:31:02 +0200https://terokarvinen.com/2023/crack-file-password-with-john/ <p>Many file formats support encryption with a password. John the Ripper can crack these passwords with dictionary attack.</p> <p>This article teaches you to obtain Jumbo version and compile it. Finally, you'll test your environment by cracking a ZIP archive password. A sample password protected ZIP file is provided with this article.</p> <h2 id="what-you-practice-here">What you practice here</h2> <img src="https://terokarvinen.com/2023/crack-file-password-with-john/double-rot-encryption-algorithm_hu97841bdea52872a1a830b844b02ab97c_6166_600x600_fit_box_3.png" width="213" height="119" alt=" " class="imgOne padSides right"> <p>In this tutorial, you'll practice</p> <ul> <li>Cracking file passwords with John <em>dictionary attack</em></li> <li>Obtaining latest versions of penetration testing tools</li> <li>Compiling large C project from source code</li> </ul> <p>Before you start, you should already know</p> <ul> <li><a href="https://terokarvinen.com/2020/command-line-basics-revisited/">Linux command line</a></li> <li>Have <a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Linux installed</a></li> <li>How to practice penetration testing safely, legally and ethically</li> </ul> <p>You might want to <a href="https://terokarvinen.com/2022/cracking-passwords-with-hashcat/">crack passwords with Hashcat</a> first, which is a bit easier.</p> <p><em>Use of penetration testing techniques requires legal and ethical considerations. To safely use these tools, tactics and procedures, you might need to obtain contracts and permissions; and posses adequate technical skills. Check your local laws. To learn how to practice safely &amp; legally, consider <a href="https://terokarvinen.com/2021/penetration-testing-course-2022-spring/">my penetration testing course</a>.</em></p> <h2 id="install-prerequisites">Install prerequisites</h2> <p>Install the tools we need to work and the libraries required for John. These commands are for Debian 11-Bullseye, but you can find similar packages on other Linuxes, too.</p> <pre><code>$ sudo apt-get update $ sudo apt-get -y install micro bash-completion git build-essential libssl-dev zlib1g zlib1g-dev zlib-gst libbz2-1.0 libbz2-dev atool zip wget </code></pre> <p>Installing software in Linux is indeed convenient. But what do all these packages do?</p> <table> <thead> <tr> <th>Package</th> <th>Purpose</th> </tr> </thead> <tbody> <tr> <td>micro</td> <td>Text editor</td> </tr> <tr> <td>bash-completion</td> <td>Use tab to complete file names</td> </tr> <tr> <td>git</td> <td>Clone (copy) Jumbo John source code</td> </tr> <tr> <td>build-essential</td> <td>C compiler and related tools</td> </tr> <tr> <td>libssl-dev</td> <td>John requirements</td> </tr> <tr> <td>zlib1g zlib1g-dev zlib1g-gst</td> <td>For John ZIP support</td> </tr> <tr> <td>libbz2-1.0 libbz2-dev</td> <td>For John 7zip support</td> </tr> <tr> <td>atool zip</td> <td>Compression tools, 'aunpack foo.zip', 'unzip foo.zip'</td> </tr> <tr> <td>wget</td> <td>Web downloader for command line</td> </tr> </tbody> </table> <h2 id="download--compile-john-the-ripper-jumbo-version">Download &amp; Compile John the Ripper, Jumbo version</h2> <p>Latest Jumbo version of John the Ripper supports many file formats. We'll compile John from source, as the version packaged with distributions doesn't seem to contain support for many formats. A paid version also seems to exist, but this one is free.</p> <p>Download John the Ripper, Jumbo version. Git clone copies the whole project to you. To save download time, we copy just the latest versions of the files using --depth=1, but this is optional.</p> <p>Installing software outside package management is done on case by case bases. Obviously, the maker of that software could execute any code on our system when we run it.</p> <pre><code>$ git clone --depth=1 https://github.com/openwall/john.git </code></pre> <p>Many Linux C and C++ programs are compiled with a variation of './configure &amp;&amp; make'.</p> <pre><code>$ cd john/src/ $ ./configure </code></pre> <p>Configure will detect the environment and create a Makefile for 'make' command.</p> <p>If you're missing any dependencies, you'll get a warning here. That's how I found out what packages to install beforehand with 'apt-get'. I read the error messages, then used 'apt-cache search libfoobar' to find the packages containing the missing libraries. We've already installed the dependencies we need here, but if you install some dependencies in the future, remember to run './configure' again.</p> <p>Then the actual compilation. The correct make command was printed as the end of './configure' output, and I simply copied it here. Running these commands does not require new trust at this point, as we've already run a lot of code from this repository.</p> <pre><code>$ make -s clean &amp;&amp; make -sj4 </code></pre> <p>Compilation takes a couple of minutes minutes. Compilation requires a couple of gigabytes of memory. In my tests, it compiled in three minutes with 4 GB of RAM, but failed on a tiny 0.5 GB RAM virtual machine.</p> <p>Once John is compiled, we can find the new executables and scripts in run/.</p> <pre><code>$ cd ../run/ $ ls -1 1password2john.py 7z2john.pl DPAPImk2john.py adxcsouf2john.py aem2john.py ... $ cd </code></pre> <p>Let's run it. (I removed some lines from output here)</p> <pre><code>$ $HOME/john/run/john John the Ripper 1.9.0-jumbo-1+bleeding-3423642 2023-01-19 00:38:00 +0100 OMP [linux-gnu 64-bit x86_64 AVX2 AC] Copyright (c) 1996-2022 by Solar Designer and others Usage: john [OPTIONS] [PASSWORD-FILES] </code></pre> <p>Did your john split out it's version number? Well done, you've got it downloaded, compiled and running.</p> <h2 id="password-protected-zip">Password Protected ZIP</h2> <p>Here is a sample ZIP file to test your setup. It's password protected. <a href="tero.zip">Download tero.zip</a></p> <pre><code>$ wget https://TeroKarvinen.com/2023/crack-file-password-with-john/tero.zip </code></pre> <p>We can try to open it - but in vain.</p> <pre><code>$ unzip tero.zip Archive: tero.zip creating: secretFiles/ [tero.zip] secretFiles/SECRET.md password: password incorrect--reenter: password incorrect--reenter: skipping: secretFiles/SECRET.md incorrect password </code></pre> <p>Usually, empty directories are extracted, but the file contents are encrypted. So all we get without password are empty directories. In this case, an empty directory &quot;secretFiles/&quot; is created, but contents of SECRET.md remain a mystery.</p> <h2 id="crack-zip-password">Crack ZIP Password</h2> <p>Cracking the ZIP password is a two step process. First, extract the hash into a new file called tero.zip.hash.</p> <pre><code>$ $HOME/john/run/zip2john tero.zip &gt;tero.zip.hash </code></pre> <p>It prints a couple of lines about the zipfile. You can optionally have a look at the extracted hash with 'cat tero.zip.hash'.</p> <p>Then, let John perform a dictionary attack against the hash.</p> <pre><code>$ $HOME/john/run/john tero.zip.hash </code></pre> <p>There is a lot of output. For a slower hash and more complicated password, it would also take longer.</p> <pre><code>Using default input encoding: UTF-8 Loaded 1 password hash (PKZIP [32/64]) Will run 2 OpenMP threads Proceeding with single, rules:Single Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status Almost done: Processing the remaining buffered candidate passwords, if any. 0g 0:00:00:00 DONE 1/3 (2023-02-09 11:09) 0g/s 2112Kp/s 2112Kc/s 2112KC/s Mdzip1900..Msecret1900 Proceeding with wordlist:/home/tero/john/run/password.lst Enabling duplicate candidate password suppressor butterfly (tero.zip/secretFiles/SECRET.md) 1g 0:00:00:00 DONE 2/3 (2023-02-09 11:09) 10.00g/s 886030p/s 886030c/s 886030C/s 123456..bob123 Use the &quot;--show&quot; option to display all of the cracked passwords reliably Session completed. </code></pre> <p>The key line is</p> <pre><code>butterfly (tero.zip/secretFiles/SECRET.md) </code></pre> <p>The password is &quot;butterfly&quot;! Now that we know the password, let's just extract the ZIP</p> <pre><code>$ unzip tero.zip Archive: tero.zip [tero.zip] secretFiles/SECRET.md password: [type password here, it's not echoed] inflating: secretFiles/SECRET.md </code></pre> <p>And enjoy your loot</p> <pre><code>$ cat secretFiles/SECRET.md You've found [REDACTED] [1] https://TeroKarvinen.com/2023/crack-file-password-with-john/ </code></pre> <h2 id="so-many-files-to-crack-from-itunes-to-telegram">So many files to crack, from iTunes to Telegram</h2> <p>John the Ripper Jumbo can crack a lot of formats. I did not test each, but here they are:</p> <p>1password 7z DPAPImk adxcsouf aem aix aix andotp androidbackup androidfde ansible apex apop applenotes aruba atmail axcrypt bestcrypt bestcryptve bitcoin bitlocker bitshares bitwarden bks blockchain cardano ccache cisco cracf dashlane deepsound diskcryptor dmg dmg ecryptfs ejabberd electrum encdatavault encfs enpass ethereum filezilla geli gpg hccap hccapx htdigest ibmiscanner ikescan itunes_backup iwork kdcdump keepass keychain keyring keystore kirbi known_hosts krb kwallet lastpass ldif libreoffice lion lion lotus luks mac mac mcafee_epo monero money mongodb mosquitto mozilla multibit neo network office openbsd_softraid openssl padlock pcap pdf pem pfx pgpdisk pgpsda pgpwde prosody ps_token pse putty pwsafe racf radius radius rar restic sap sense signal sipdump ssh sspr staroffice strip telegram test_tezos tezos truecrypt uaf vdi vmx wpapcap zed zip</p> <p>You can try some of them. The hash extractors are in &quot;run/&quot;, e.g.</p> <pre><code>$ $HOME/john/run/1password2john.py Usage: /home/vagrant/john/run/1password2john.py &lt;1Password Agile Keychain(s) / Cloud Keychain(s)&gt; / OnePassword.sqlite </code></pre> <p>Some extractors look for 'python' when they mean 'python3'. If you get an error, you can create a symlink</p> <pre><code>$ $HOME/john/run/office2john.py /usr/bin/env: 'python': No such file or directory $ sudo ln -s /usr/bin/python3 /usr/local/bin/python $ $HOME/john/run/office2john.py Usage: /home/vagrant/john/run/office2john.py &lt;encrypted Office file(s)&gt; </code></pre> <h2 id="what-next">What next?</h2> <p>Create some encrypted files and crack them.</p> <p>Always use good passwords. Never use bad passwords. Dictionary attack used here would not work for a random password. You can generate those with 'pwgen -s 20 1': &quot;ziGtyrObMgvlxt52U0wz&quot;.</p> <p>Use a password manager.</p> <p>Only use your new powers for good. Happy hacking!</p> <h2 id="see-also">See also</h2> <p><a href="https://terokarvinen.com/2022/cracking-passwords-with-hashcat/">Cracking Passwords with Hashcat</a></p>Linux Palvelimet 2023 alkukeväthttps://terokarvinen.com/2023/linux-palvelimet-2023-alkukevat/Thu, 12 Jan 2023 16:54:40 +0200https://terokarvinen.com/2023/linux-palvelimet-2023-alkukevat/ <img src="https://terokarvinen.com/2023/linux-palvelimet-2023-alkukevat/tux_hud0c70f4796d7176ca6380c7b07287d17_11913_100x100_fit_box_3.png" width="84" height="100" alt="Tux the Linux penguin" class="imgOne right"> <p>Learn to manage your own Linux server – in 8 weeks.</p> <p>100% remote. Three hour video conference every Tuesday and Friday. Beginners welcome. <a href="https://terokarvinen.com/2021/final-lab-for-linux-server-course-linux-palvelimet-ict4tn021-3016/#comments">Excellent feedback</a> 4.8 out of 5. In Finnish.</p> <table> <thead> <tr> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td>Course name and code:</td> <td><strong>Linux palvelimet</strong> ICI003AS2A-<strong>3002</strong></td> </tr> <tr> <td>Timing</td> <td>2023 early spring, period 3, weeks w03-w11</td> </tr> <tr> <td>Credits</td> <td>5 cr</td> </tr> <tr> <td>Classes</td> <td><strong>Tue</strong> and <strong>Fri 14-16:45</strong> online, mandatory participation</td> </tr> <tr> <td>Max students</td> <td>30 (50+ enrolled, queue started)</td> </tr> <tr> <td>Language</td> <td>Finnish (+reading material in English)</td> </tr> <tr> <td>Remote</td> <td>Yes, <strong>fully remote</strong></td> </tr> <tr> <td>Feedback</td> <td>4.8 / 5 <strong><a href="https://terokarvinen.com/2021/final-lab-for-linux-server-course-linux-palvelimet-ict4tn021-3016/#comments">Excellent feedback</a></strong> <img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience"></td> </tr> <tr> <td>Services</td> <td><a href="https://hhmoodle.haaga-helia.fi/course/view.php?id=35775">Moodle</a>, Jitsi, Laksu</td> </tr> <tr> <td>First class</td> <td><strong>2023-01-17 w03 Tue 14:00</strong>, Tero emails video conference link</td> </tr> </tbody> </table> <p>The course is in Finnish (and requires full fluency in Finnish), so the rest of this page is in Finnish.</p> <h1 id="tavoite">Tavoite</h1> <p>Opiskele 8 viikkoa ja hallitset omaa Linux-palvelinta.</p> <p>Opintojakson suoritettuaan opiskelija:</p> <ul> <li>Osaa hallita Linuxia palvelimena</li> <li>Osaa tehdä tärkeimmät asetukset tärkeimmille palvelimille (Apache, OpenSSH)</li> <li>Osaa asentaa www-ohjelmointiin sopivan alustan</li> <li>Osaa tehdä itselleen uusia asetuksia palvelinohjelmistoihin ohjeiden avulla</li> <li>Tietää esimerkkejä palvelintilan tarjoajista ja hinnoista sekä fyysisten palvelinten vastaavista ominaisuuksista</li> </ul> <h2 id="anna-palautetta">Anna palautetta</h2> <ol> <li><a href="#comments">Vapaamuotoinen palaute kommenttina</a> tämän kurssisivun perään.</li> </ol> <p>Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:</p> <ul> <li>Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?</li> <li>Teitkö jotain ensimmäistä kertaa? Vuokrasit koneen julkiseen Internetiin, asensit Linuxin, löysit tunkeutumisyrityksen...</li> <li>Oliko opittu hyödyllistä? Luuletko, että sille on käyttöä esim. tulevaisuudessa töissä tai kotona?</li> <li>Miten voisin parantaa kurssia?</li> <li>Viihdyitkö kurssilla?</li> <li>Mitä pidit läksyistä?</li> <li>Suosittelisitko kurssia tai oletko jo suositellut? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?</li> </ul> <ol start="2"> <li>Numeerinen palaute <a href="https://mynet.haaga-helia.fi">Haaga-Helian palautejärjestelmään MyNetissa</a></li> </ol> <p>Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa.</p> <p>Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)</p> <ul> <li>Oma aktiivisuutesi opiskelussa 1-5</li> <li>Osaamistavoitteiden saavuttaminen 1-5</li> <li>Työskentelytavat tukivat oppimista 1-5</li> <li>Opiskeluympäristö tuki oppimista 1-5</li> <li>Hyödyllisyys työelämään 1-5</li> </ul> <p>Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)</p> <ul> <li>Mitkä asiat edistivät oppimistasi?</li> <li>Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?</li> </ul> <p>Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5</p> <p>Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)</p> <p>Kiitos palautteesta ja jännittävästä kurssista! Seuraavilla kursseilla nähdään.</p> <h1 id="osallistumiseen-tarvitaan">Osallistumiseen tarvitaan</h1> <ul> <li>Jitsi-videokonfferenssiin: tietokone, kuulokemikrofoni, kamera, internet-yhteys.</li> <li>Linux-käyttöön: tietokone, jolla voit ohjeiden mukaan asentaa virtuaalikoneen ja Linuxin (edistyneemmät voivat toki asentaa Linuxin ihan oikean, erillisen koneen raudalle).</li> <li>Aikaa: 16 iltapäivää oppitunteihin + joka viikko runsaasti aikaa läksyihin (oppitunneille pitää osallistua aktiivisesti ja kaikki läksyt palauttaa)</li> </ul> <p>Linuxia ei tarvitse osata yhtään. Omalle tietokoneelle pitäisi osata asentaa ohjelmia, esimerkiksi virtuaalikone. Ja tietysti ratkoa tavallisia tietokoneongelmia kokeilemalla ja wepistä tietoa hakemalla.</p> <h2 id="aikataulu">Aikataulu</h2> <p>Kurssin kahdeksan kertaa jakautuvat neljään osaan: peruskäyttö, demonit, automatisointi ja loppuhuipennus.</p> <p>Oppitunnit ovat <strong>tiistaisin ja perjantaisin 14:00</strong> - 16:45 videokonfferenssina.</p> <table> <thead> <tr> <th>Viikko</th> <th>Aihe</th> </tr> </thead> <tbody> <tr> <td>w03</td> <td>1. Asennus, lisenssit.</td> </tr> <tr> <td>w04</td> <td>2. Komentokehote. Ylläpito, paketinhallinta.</td> </tr> <tr> <td>w05</td> <td>3. Apache-weppipalvelin.</td> </tr> <tr> <td>w06</td> <td>4. Julkisen palvelimen ja nimen vuokraaminen</td> </tr> <tr> <td>w07</td> <td>5. Tietokantapalvelin, PostgreSQL.</td> </tr> <tr> <td>w08</td> <td>(talvivapaa - Linuxilla saa leikkiä itse, jos haluaa)</td> </tr> <tr> <td>w09</td> <td>6. Ohjelmat weppipalvelimella, hei Python Django.</td> </tr> <tr> <td>w10</td> <td>7. Ohjelmointi.</td> </tr> <tr> <td>w11</td> <td>8. Kertaus. Arvioitava lopputehtävä.</td> </tr> </tbody> </table> <p>Oppituntien aiheisiin voi tulla muutoksia kurssin aikana.</p> <h3 id="peruskaytto">Peruskäyttö</h3> <p>1. <strong>Asennus, työpöytä ja lisenssit</strong> <a href="https://www.gnu.org/philosophy/free-sw.html">FSF Free Software Definition</a>, <a href="http://lib.tkk.fi/Diss/2005/isbn9529187793/isbn9529187793.pdf">Rise of Open Source: Chapter 5</a>. <a href="http://terokarvinen.com/2006/raportin-kirjoittaminen-4">Raportin kirjoittaminen</a>.</p> <p>2. <strong>Komentokehote, ylläpito ja paketinhallinta</strong> w04 <a href="http://terokarvinen.com/2009/command-line-basics-4">Command Line Basics</a>, <a href="http://terokarvinen.com/2008/commands-for-admin-4">Commands for Admin</a>.</p> <h3 id="demonit">Demonit</h3> <p>3. <strong>Apache-weppipalvelin</strong> <a href="http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4">Install Apache Web Server on Ubuntu</a> <a href="http://terokarvinen.com/2016/instant-firewall-sudo-ufw-enable">Instant Firewall – sudo ufw enable.</a></p> <p>4. <strong>Julkisen palvelimen ja nimen vuokraaminen</strong> <a href="https://jvaris.wordpress.com/2014/03/03/linux-server-task-5-apache-name-based-virtual-hosting/">Apachen oletussivu</a>, <a href="https://jvaris.wordpress.com/2014/03/03/linux-server-task-5-apache-name-based-virtual-hosting/">Monta nimeä samaan IP-osoitteeseen</a>. Virtuaalipalvelimia vuokrataan: <a href="http://www.linode.com/?r=16774ec53118157d3f5d6e9be9147875cdb167bb">Linode (associate link)</a>, <a href="https://www.digitalocean.com/">Digitalocean</a>, <a href="http://aws.amazon.com/vpc/">Amazon</a> (monet Amazonin palvelut skaalautuvat automaattisesti, maksimihinnan rajoittaminen voi olla tarpeen). Julkisia nimiä vuokrataan: <a href="https://www.namecheap.com/">NameCheap</a>, <a href="https://www.gandi.net/">Gandi.</a> Harjoittelua varten voit kokeilla myös <a href="http://www.dot.tk/">http://www.dot.tk/</a> (ei tärkeille nimille). <a href="http://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean">First Steps on a New Virtual Private Server – an Example</a>.</p> <h3 id="automatisointi">Automatisointi</h3> <p>5. <strong>Ohjelmat weppipalvelimella</strong>. Palvelinpään ohjelmointi, Python Flask framework. Flask-asennus.</p> <p>6. <strong>Shell scriptit</strong>, bash-skriptaus. <a href="http://terokarvinen.com/2007/shell-scripting-4" title="Permalink to Shell Scripting">Shell Scripting</a>, <a href="http://terokarvinen.com/2006/aboutusers-4" title="Permalink to aboutusers">aboutusers.sh</a>, <a href="http://overthewire.org/wargames/bandit/">Over the Wire: bandit</a></p> <h3 id="loppuhuipennus">Loppuhuipennus</h3> <p>7. <strong>Kertaus</strong></p> <p>8. <strong>Arvosteltava lopputehtävä</strong></p> <h2 id="suhde-muihin-kursseihin">Suhde muihin kursseihin</h2> <p>Tälle kurssille ei vaadita mitään kursseja esitietoina. Linuxia ei tarvitse osata yhtään. Omalle tietokoneelle pitäisi osata asentaa ohjelmia, esimerkiksi virtuaalikone. Ja tietysti ratkoa tavallisia tietokoneongelmia kokeilemalla ja wepistä tietoa hakemalla.</p> <p>Tämä kurssi (Linux palvelimet ict4tn021) on esitietona monille kursseille, esimerkiksi</p> <ul> <li><a href="https://terokarvinen.com/tags/configuration-management/">Palvelinten hallinta</a></li> <li><a href="https://terokarvinen.com/tags/monialaprojekti/">Monialaprojekti</a></li> <li><a href="https://terokarvinen.com/tags/tunkeutumistestaus/">Tunkeutumistestaus</a></li> </ul> <p>Ja pilvessähän palvelimet ovat pääosin Linuxeja, joten noilla kursseilla tästä lienee hyötyä.</p> <h2 id="vanhoja-kurssitoteutuksia">Vanhoja kurssitoteutuksia</h2> <p>Vanhoilta kurssitoteutuksilta löytyy runsaasti opiskelijoiden palautteita ja linkkejä kotitehtävien esimerkkiratkaisuihin. Opiskelijoiden palaute kurssista on sivun lopussa kommenteissa.</p> <ul> <li><a href="https://terokarvinen.com/2022/linux-palvelimet-ict4tn021-3020/">Linux Palvelimet 2022 alkusyksy - ict4tn021-3020</a></li> <li><a href="https://terokarvinen.com/2020/linux-palvelimet-2021-alkukevat-kurssi-ict4tn021-3014/">Linux Server Course - Linux palvelimet ict4tn021-3014 - alkukevät 2021</a></li> <li><a href="https://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/">Linux Server Course - Linux palvelimet ict4tn021-3010 Aikataulu</a></li> <li><a href="http://terokarvinen.com/2018/aikataulu-linux-palvelimet-ict4tn021-3004-ti-alkukevat-2019-5-op" title="Permalink to Aikataulu – Linux palvelimet ict4tn021-3004 ti – alkukevät 2019 – 5 op">Aikataulu – Linux palvelimet ict4tn021-3004 ti – alkukevät 2019 – 5 op</a></li> <li><a href="http://terokarvinen.com/2017/aikataulu-linux-palvelimet-ict4tn021-7-ti-ja-6-to-alkukevat-2018-5-op" title="Permalink to Aikataulu – Linux palvelimet ict4tn021 8-ma, 7-ti ja 6-to – alkukevät 2018 – 5 op">Aikataulu – Linux palvelimet ict4tn021 8-ma, 7-ti ja 6-to – alkukevät 2018 – 5 op</a></li> <li><a href="https://terokarvinen.com/2017/aikataulu-linux-palvelimet-ict4tn021-2-ti-ja-3-ke-alkukevat-2017-5-op/?fromSearch=aikataulu%20linux%20palvelimet%20ict4tn021%202%20ti%20ja%203%20k">Aikataulu – Linux palvelimet ict4tn021 4-ti ja 5-to – alkusyksy 2017 – 5 op</a></li> <li><a href="http://terokarvinen.com/2016/aikataulu-linux-palvelimet-alkusyksy-2016" title="Permalink to Aikataulu – Linux palvelimet ict4tn021-1 – 5 op – alkusyksy 2016">Aikataulu – Linux palvelimet ict4tn021-1 – 5 op – alkusyksy 2016</a>.</li> </ul> <h3 id="vanhoja-arvioitavia-laboratorioharjoituksia">Vanhoja arvioitavia laboratorioharjoituksia:</h3> <ul> <li><a href="http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-linux-palvelimet-ict4tn021-4-tiistai-alkusyksy-2017-%E2%80%93-5-op">Final lab test for group 4-Tuesday</a>.</li> <li><a href="http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-%e2%80%93-linux-palvelimet-ict4tn021-5-torstai-%e2%80%93-alkusyksy-2017-%e2%80%93-5-op">Final lab test for group 5-Thursday</a>.</li> <li><a href="http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-%e2%80%93-linux-palvelimet-ict4tn021-2-uusi-ops-alkukevaalla-2017-p1">Arvioitava laboratorioharjoitus – Linux palvelimet ict4tn021-2 (uusi OPS) alkukeväällä 2017 p1</a></li> <li><a href="http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-%e2%80%93-linux-palvelimet-ict4tn021-3-uusi-ops-alkukevaalla-2017-p1">Arvioitava laboratorioharjoitus – Linux palvelimet ict4tn021-3 (uusi OPS) alkukeväällä 2017 p1</a></li> </ul> <h2 id="suoritukset">Suoritukset</h2> <ul> <li>Läksyt</li> <li>Aktiivinen etäosallistuminen opetukseen</li> <li>Lopputehtävä (ilmoitetaan myöhemmin)</li> </ul> <p>Arvosana perustuu kokonaisarvioon kurssisuorituksista.</p> <h2 id="laksyt">Läksyt</h2> <p>Kotitehtäväraporttien linkit palautetaan 24 h ennen lähiopetuskerran alkua Laksuun. Oman tehtävän palautuksen jälkeen riistiinarvioidaan kahden kurssikaverin tehtävät.</p> <p>Läksyt tehdään ja raportoidaan kunkin tunnin jälkeen. Tehtävät saa julkaista missä haluaa ja palauttaa linkin Laksuun. Kotitehtäväraportin tulee olla suoraan selaimella katseltavassa muodossa, tavallisena HTML-weppisivuna. Ei odt, ei odp, ei ppt, ei docx, ei doc, ei pdf. Kotitehtäviä ei voi palauttaa sähköpostitse. Linkit palautetaan Moodleen, mutta itse raportteja ei voi palauttaa Moodleen. Maksutonta kotisivutilaa saa esimerkiksi WordPress.com, GitHub.com ja Gitlab.com.</p> <p>Läksyt käydään läpi seuraavalla tapaamiskerralla, ratkotaan yhdessä ongelmia ja annetaan suullista palautetta. Arvosana kotitehtäväpaketista tulee vasta kurssin lopuksi, mutta tehtävät tulee silti palauttaa aina vuorokautta ennen seuraavia tunteja. Kurssilta poistetaan ne, jotka eivät ala suorittaa kurssia palauttamalla tehtäviä. Julkaiseminen on vapaaehtoista, mutta erittäin suositeltavaa. Jos et jostain syystä uskalla tai muuten halua julkaista, voit laittaa työn weppisivulle salasanan taakse (kaikille kotitehtäville sama salasana) ja jakaa tämän salasanan kurssilaisten kanssa. Jos tuntien yhteydessä järjestetään testejä läksyjen aiheista, niiden pisteet sisältyvät arvostelun kohtaan läksyt.</p> <p>Läksyt pitää tehdä tietokoneella kokeilemalla ja raportoida tapahtumien kulku, ellei kyseisessä alakohdassa erikseen muuta lue. Raporteista tulee ilmetä tiedot, josta voi todeta että harjoitukset on tehty eikä sepitetty.</p> <h3 id="h1-virtuaali-linux">h1 Virtuaali-Linux</h3> <p>x) Lue ja tiivistä (Muutama ranskalainen viiva riittää. Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella)</p> <ul> <li><a href="http://terokarvinen.com/2006/raportin-kirjoittaminen-4">Raportin kirjoittaminen</a></li> </ul> <p>a) Asenna Linux virtuaalikoneeseen.</p> <p>Vinkkejä</p> <ul> <li><a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on Virtualbox - Updated 2023</a></li> <li>Tee täsmällinen ja toistettava raportti. Kuvaile myös ympäristö (host OS, rauta...). Sellainen, millä voi aiheuttaa samat virheet joita löysit, ja korjata ne samalla tavalla.</li> <li>Kirjoita raporttia samalla kun työskentelet</li> <li>Jos jäät jumiin, tee vielä tarkempi raportti hankalasta kohdasta. Ota kaikki virheilmoitukset talteen. Luettele eri valitsemasi lähestymistavat. Ja katsotaan tunnilla yhdessä lisää.</li> <li>Vertaisarvioi kaksi tehtäväpalautusta, kun olet palauttanut omasi. (kuten aina)</li> <li>Ota ruutukaappauksia. <a href="https://github.com/terokarvinen/dreamhugmonkey#adding-images-to-markdown">Kuvia on helppo lisätä Markdowniin</a>.</li> <li>Palautus aina 24 h ennen seuraavaa tapaamiskertaa. Esimerkiksi tässä tehtävässä palautus ennen torstaita 14:00, kun seuraava tunti on perjantaina 14:00.</li> <li>Kohta sinulla on oma Linux-harjoitusympäristö, kokonaan omassa hallussa. Perjantaina nähdään!</li> </ul> <h3 id="h2-komentaja-pingviini">h2 Komentaja Pingviini</h3> <ul> <li>x) Lue ja tiivistä (Muutama ranskalainen viiva riittää. Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella) <ul> <li>Karvinen 2020: <a href="https://terokarvinen.com/2020/command-line-basics-revisited/?fromSearch=command%20line%20basics%20revisited">Command line basics revisited</a> (nämä komennot ja hakemistot kannattaa myös opiskella ulkoa ja harjoitella automaatiotasolle)</li> </ul> </li> <li>a) Micro. Asenna micro-editori</li> <li>b) Rauta. Listaa testaamasi koneen rauta (‘sudo lshw -short -sanitize’). Asenna lshw tarvittaessa. Selitä ja analysoi listaus.</li> <li>c) Apt. Asenna kolme itsellesi uutta komentoriviohjelmaa. Kokeile kutakin ohjelmaa sen pääasiallisessa käyttötarkoituksessa. Ota ruutukaappaus. Kaikki terminaaliohjelmat kelpaavat, TUI (text user interface) ja CLI (command line interface). Osaatko tehdä apt-get komennon, joka asentaa nämä kolme ohjelmaa kerralla?</li> <li>d) FHS. Esittele kansiot, jotka on listattu &quot;Command Line Basics Revisited&quot; kappaleessa &quot;Important directories&quot;. Näytä kuvaava esimerkki kunkin tärkeän kansion sisältämästä tiedostosta tai kansiosta. Jos kyseessä on tiedosto, näytä siitä kuvaava esimerkkirivi. Työskentele komentokehotteessa ja näytä komennot, joilla etsit esimerkit.</li> <li>e) The Friendly M. Näytä 2-3 kuvaavaa esimerkkiä grep-komennon käytöstä. Ohjeita löytyy 'man grep' ja tietysti verkosta.</li> </ul> <p>Vinkkejä:</p> <ul> <li>Ohjelmien asennus <ul> <li>sudo apt-get update</li> <li>apt-cache search version control</li> <li>apt-cache show git</li> <li>sudo apt-get -y install git</li> </ul> </li> <li>Selitä ja analysoi - rautatehtävässä tärkeää on siis oma analyysi ja selitys, ei pelkkä listaus</li> </ul> <h3 id="h3-vapaus">h3 Vapaus!</h3> <ul> <li>x) Lue ja tiivistä (Muutama ranskalainen viiva riittää. Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella) <ul> <li>FSF: <a href="https://www.gnu.org/philosophy/free-sw.html">FSF Free Software Definition</a></li> <li>Välimäki 2005: <a href="http://lib.tkk.fi/Diss/2005/isbn9529187793/isbn9529187793.pdf">Rise of Open Source</a>: 5 Open Source Licenses as Alternative Governance Mechanisms: 5.1.1 - 5.1.4 (sivu 113 - 121)</li> </ul> </li> <li>a) Kolmen ohjelman lisenssit. Tarkastele kolmen edellisessä harjoituksessa asentamasi ohjelman lisenssejä. Selvitä kustakin ohjelmasta: <ul> <li>Mitä lisenssiä kyseinen ohjelma käyttää?</li> <li>Mistä päättelit lisenssin?</li> <li>Onko kyseessä vapaa lisenssi?</li> <li>Mitkä ovat tämän lisenssin tärkeimmät oikeusvaikutukset?</li> <li>Jääkö tämän ohjelman lisenssoinnista jotain avoimia kysymyksiä tai epäselvyyttä? (kirjaan tämän itselleni muistiin, jos selvitän jonkun ohjelman lisenssejä)</li> </ul> </li> <li>b) Säännöllistä. Poimi tekstitiedostosta tietoa grep-komennolla käyttäen säännöllisiä lausekkeita (regexp, regular expressions).</li> <li>c) Pipe. Näytä esimerkki putkista (pipes).</li> <li>d) Vapaaehtoinen: Regex Crossword, tutorial.</li> </ul> <p>Vinkkejä</p> <ul> <li>'grep -P &quot;T..o&quot;' näyttää kaikki rivit, joilla on merkkijono, joka alkaa &quot;T&quot;, kaksi mitä vain kirjainta, päättyy &quot;o&quot;</li> </ul> <h3 id="h4-tukki">h4 Tukki</h3> <ul> <li> <p>x) Lue ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella)</p> <ul> <li><a href="https://hckrnews.com/">YCombinator Hacker News</a>, vapaavalintainen artikkeli kommentteineen Linuxin <a href="https://hn.algolia.com/?dateEnd=1643270199&amp;dateRange=custom&amp;dateStart=1547942400&amp;page=0&amp;prefix=false&amp;query=command%20line&amp;sort=byPopularity&amp;type=story">komentokehotteesta</a> <ul> <li>Voit valita minkä vain joka ei ole suosituimman top 3 joukossa, niin pääset todennäköisesti lukemaan eri artikkelin kuin luokkakaverit.</li> <li>Kommentit aukeavat siitä pienestä &quot;420 comments&quot; linkistä.</li> <li>Riittää, kun silmäilet artikkelin ja kommentit soveltuvin osin, osa voi olla kirjan mittaisia etkä ehdi tässä lukea niitä kokonaan. Samoin tiivistelmäksi riittää muutama bulletti, poimi keskeisimmät asiat.</li> </ul> </li> </ul> </li> <li> <p>a) Tukki. Analysoi yksi esimerkkirivi kustakin näistä lokeista</p> <ul> <li>/var/log/syslog - yleisloki, tänne kaikki joilla ei ole omaa lokia</li> <li>/var/log/auth.log - kirjatumiset, sudo:n käyttö</li> <li>/var/log/apache2/access.log - onnistunut surffailu 2xx, 3xx; käyttäjän virheet 4xx client error</li> <li>/var/log/apache2/error.log - apachen omat virheet, 5xx server error</li> </ul> </li> <li> <p>b) Aiheuta. Aiheuta lokiin kaksi eri tapahtumaa: yksi esimerkki onnistuneesta ja yksi esimerkki epäonnistuneesta tai kielletystä toimenpiteestä. Analysoi rivit yksityiskohtaisesti.</p> </li> </ul> <p>Vinkki</p> <ul> <li>YCombinator Hacker News <ul> <li>Suosittelen lukemaan päivittäin <a href="https://hckrnews.com/">https://hckrnews.com/</a> &quot;top 50%&quot; (uusimpia) <ul> <li>Lue kommentit</li> </ul> </li> <li>Haku <a href="https://hn.algolia.com/?dateEnd=1643270199&amp;dateRange=custom&amp;dateStart=1547942400&amp;page=0&amp;prefix=false&amp;query=command%20line&amp;sort=byPopularity&amp;type=story">suosituimmista &quot;command line&quot; artikkeleista</a> kautta historian</li> </ul> </li> <li>Lokin analysoiminen tarkoittaa, että selität kaiken <ul> <li>Vähän lokia, paljon selitystä</li> <li>Kello - onko oikeassa, mikä aikavyöhyke</li> <li>Mitä kukin osa tarkoittaa</li> <li>Mitä numerot merkitsevät</li> <li>Mitä tämä kokonaisuutena tarkoittaa</li> <li>Mitä puuttuu</li> <li>Mitä osia et vielä ymmärtänyt tai selvittänyt tässä yhteydessä</li> <li>Kerro se itsellesi ilmeinen asia ensin</li> </ul> </li> </ul> <h3 id="h5-hello-web">h5 Hello Web</h3> <ul> <li>x) Kuuntele ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella) <ul> <li><a href="https://www.indiehackers.com/podcasts">Indie Hackers -podcast</a>, vapaavalintainen jakso, jossa hyödynnetään weppiä kaupallisesti.</li> </ul> </li> <li>a) Vaihda Apachen esimerkkisivu johonkin lyheen sivuun niin, että vanha esimerkkisivu ei näy. (Tämä lienee ainoa kohta, jossa ikinä muokkaat weppisivua pääkäyttäjän oikeuksin. /var/www/html/index.html)</li> <li>b) Laita käyttäjien kotisivut (<a href="http://example.com/~tero">http://example.com/~tero</a>) toimimaan. Testaa esimerkkikotisivulla.</li> <li>c) Tee uusi käyttäjä. Kirjaudu ulos omastasi ja sisään uutena käyttäjänä. Tee uudellekin käyttäjälle kotisivu.</li> <li>d) Tee validi HTML5 sivu.</li> </ul> <p>Vinkit</p> <ul> <li>Indie Hackers <ul> <li>Jakson voi kuunnella myös käytännön tehtävien jälkeen</li> <li><a href="https://antennapod.org/">AntennaPod</a> on hyvä ohjelma podcastien kuunteluun. Löytyy <a href="https://f-droid.org/en/packages/de.danoeh.antennapod/">F-Droid:sta</a> ja Google Playsta. Podcastien kuunteluun on tietysti satoja muitakin ohjelmia.</li> <li>Jos valitset vahingossa jakson, jossa weppi jääkin sivurooliin, voit silti käyttää sitä, ei tarvitse kuunnella koko katalogia läpi.</li> </ul> </li> <li>Poista tarvittaessa vanha asennus, niin pääset kokeilemaan uudelleen <ul> <li>'sudo apt-get purge apache2 apache2-bin; sudo systemctl stop apache2' tai palauta virtuaalikoneen snapshot</li> </ul> </li> <li>'sudo adduser erkki' <ul> <li>Aina hyvät salasanat, varsinkin harjoitellessa</li> <li>Testikäyttäjät on hyvä merkitä omalla nimellä. Esim jos Erkki Esimerkki tekee testikäyttäjiä, kunkin Full name / Real name -kohtaan &quot;test user for Erkki Esimerkki&quot;</li> <li>Helpot käyttäjänhallintakomennot alkavat verbillä, <strong>add</strong>user ja <strong>del</strong>user</li> </ul> </li> <li>Esimerkkisivun korvaaminen <ul> <li>'echo Hello|sudo tee /var/www/html/index.html' tai 'sudoedit /var/www/html/index.html'</li> <li>roottina/sudona ei ruveta tekemään varsinaisia kotisivuja</li> </ul> </li> <li>Onko weppisivu validi <a href="https://validator.w3.org">https://validator.w3.org</a></li> <li>Karvinen 2012: <a href="https://terokarvinen.com/2012/short-html5-page/">Short HTML5 page</a></li> <li>Nykyisin weppipalvelimen käynnistys on 'sudo systemctl start apache2'. Monissa ohjeissa on vielä vanha komento, tai odotetaan demonin käynnistyvän itsestään pakettia asentaessa.</li> </ul> <h3 id="h6-based">h6 Based</h3> <ul> <li>x) Lue ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella) <ul> <li>Apache Software Foundation 2023: <a href="https://httpd.apache.org/docs/2.4/getting-started.html">Getting Started</a></li> <li>Apache Software Foundation 2023: <a href="https://httpd.apache.org/docs/current/vhosts/name-based.html">Name-based Virtual Host Support</a></li> </ul> </li> <li>a) Vaihda Apachelle uusi etusivu. Varmista, että voit muokata sivua normaalilla käyttäjällä (ilman sudoa).</li> <li>b) Tee Apachen asetustiedostoon kirjoitusvirhe. Etsi se työkalujen avulla. Vertaa 'apache2ctl configtest' ja virhelokin /var/log/apache2/error.log virheilmoituksia.</li> <li>n) Vapaaehtoinen: Tee Apachelle kaksi nimipohjaista palvelua (name based virtual host), foo.example.com ja bar.example.com. Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla.</li> </ul> <p>Vinkit</p> <ul> <li>Jos haluat pilvestä koneen ilmaiseksi, ota &quot;Github Education&quot; paketti etukäteen. Kannattaa lisätä Github-tunnukselle @haaga-helia.fi sähköposti ja vahvistaa se, ennenkuin aloittaa paketin haun.</li> <li>Kannattaa ottaa ensi viikolla luottokortti (tai debit-luottokortti) mukaan pilvipalveluiden vuokraamiseen. (Minulla on myös vaihtoehtotehtävä, mutta vain oikea palveluiden käyttö on oikeaa palveluiden käyttöä).</li> <li>'/usr/sbin/apache2ctl configtest' <ul> <li>&quot;Couldn't .. determine .. domain name&quot; lukee siinä melkein aina.</li> <li>&quot;Syntax OK&quot;, jos ei kirjoitusvirheitä</li> </ul> </li> <li>Lukuläksyt ovat osa <a href="https://httpd.apache.org/docs/current/">Apachen virallista dokumentaatiota</a> <ul> <li>Helpoimmat artikkelit ovat keskellä &quot;Users' Guide&quot; ja oikealla &quot;How-To / Tutorials&quot;.</li> </ul> </li> <li>Vapaaehtoiseen tehtävään löytää vinkkejä esimerkiksi hakemalla vanhoja tehtäväraportteja, Googleen &quot;karvinen apache&quot; <ul> <li>Muista viitata kaikkiin käyttämiisi lähteisiin, myös toisten opiskelijoiden raportteihin</li> </ul> </li> </ul> <h3 id="h6-real-internettm">h6 Real Internet(tm)</h3> <p><em>Tämän tehtävän oikea numero olisi ollut h7.</em></p> <ul> <li>x) Lue ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella) <ul> <li>Karvinen 2012: <a href="https://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean/">First Steps on a New Virtual Private Server – an Example on DigitalOcean and Ubuntu 16.04 LTS</a></li> </ul> </li> <li>a) Vuokraa oma virtuaalipalvelin haluamaltasi palveluntarjoajalta. (Vaihtoehtona voit käyttää ilmaista kokeilujaksoa, GitHub Education krediittejä; tai jos mikään muu ei onnistu, voit kokeilla vagran:tia paikallisesti).</li> <li>b) Tee alkutoimet omalla virtuaalipalvelimellasi: tulimuuri päälle, root-tunnus kiinni, ohjelmien päivitys.</li> <li>c) Asenna weppipalvelin omalle virtuaalipalvelimellesi. Korvaa testisivu. Kokeile, että se näkyy julkisesti. (Muista tehdä reikä tulimuuriin).</li> <li>d) Etsi merkkejä murtautumisyrityksistä.</li> </ul> <p>Vinkit:</p> <ul> <li>Aina hyvät salasanat</li> <li>sudo ufw allow 22/tcp; sudo ufw allow 80/tcp</li> <li>Wannabe-murtautujia voit löytää lokeista, /var/log/auth.log, joskus myös /var/log/apache2/access.log</li> <li>Nykyisin demonin uudelleenkäynnistys 'sudo systemctl restart apache2' (ei enää service)</li> </ul> <h3 id="h8-nimittain">h8 Nimittäin</h3> <ul> <li>a) Vuokraa domainnimi ja aseta se osoittamaan virtuaalipalvelimeesi.*</li> <li>b) Tutki oman nimesi tietoja 'host' ja 'dig' -komennoilla. Analysoi tulokset.</li> </ul> <p>Vinkit</p> <ul> <li>Julkisia nimiä vuokrataan: <ul> <li><a href="https://www.namecheap.com/">NameCheap</a></li> <li><a href="https://www.gandi.net/">Gandi.</a></li> <li>Harjoittelua varten voit kokeilla myös <a href="http://www.dot.tk/">http://www.dot.tk/</a> tai vastaavaa kokonaan ilmaista palvelua (ei tärkeille nimille).</li> </ul> </li> </ul> <ul> <li>Jos et jostain syystä halua vuokrata oikeaa nimeä, voit vaihtoehtotehtävänä kokeilla nimipalvelua tai sen simulointia hosts-tiedoston avulla. Tällöin voit tehdä nimipalvelutietojen analysoinnin mistä vain julkisessa käytössä olevasta nimestä. Suosittelen kuitenkin oikean nimen vuokraamista ja asettamista.</li> </ul> <h3 id="h9-sequel">h9 Sequel</h3> <ul> <li>x) Yrityssoftaa. Keksi esimerkki palvelusta, jota käytetään wepissä selaimella, koodi ajetaan palvelimella ja taustalla on tietokanta. Mitä etuja tällä toteutustavalla on vaihtoehtoisiin toteutustapoihin verrattuna? (Tässä x-alakohdassa ei tarvitse tehdä testejä koneella tai toteuttaa mitään, pelkkä kuvittelu ja vastauksen kirjoittaminen riittää)</li> <li>a) Postgre. Asenna PostgreSQL ja testaa se suorittamalla SQL-komento. (Jos teit jo tunnilla, tee uusi Linux-käyttäjä ja tälle tietokanta ja tietokantakäyttäjä.)</li> <li>b) Crud. Kokeile CRUD (create, read, update, delete) kirjoittamalla SQL-käsin. (Artikkeli alla vinkeissä kertoo, kuinka tämä tehdään. Jos SQL on tuttua, voit keksiä tauluille ym omat aiheet ja nimet.)</li> <li>n) Vapaaehtoinen: Maria. Asenna MariaDB ja kokeille sillä CRUD.</li> </ul> <p>Vinkit:</p> <ul> <li>Karvinen 2016-2023: <a href="https://terokarvinen.com/2016/03/03/install-postgresql-on-ubuntu-new-user-and-database-in-3-commands/">Install PostgreSQL on Ubuntu – New user and database in 3 commands</a></li> <li>Karvinen 2016-2023: <a href="https://terokarvinen.com/2016/03/05/postgresql-install-and-one-table-database-sql-crud-tutorial-for-ubuntu">PostgreSQL Install and One Table Database – SQL CRUD tutorial for Ubuntu</a></li> <li>'sudo adduser tero'</li> <li>Karvinen 2018: <a href="https://terokarvinen.com/2018/09/20/install-mariadb-on-ubuntu-18-04-database-management-system-the-new-mysql/">Install MariaDB on Ubuntu 18.04 – Database Management System, the New MySQL</a></li> </ul> <h3 id="h10-dj-ango">h10 DJ Ango</h3> <ul> <li>a) Kannattavaa. Tee oma tietokantasovellus. jossa on weppiliittymä. Kirjautuneet käyttäjät saavat lisätä, muokata ja poistaa tietueita. (Voit käyttää Djangon kehityspalvelinta. Tee jotain muuta kuin asiakastietokanta.)</li> <li>b) Vapaaehtoinen: Suhde. Tee monesta yhteen -suhde (many-to-one relationship) kahden taulun välille. Esim. Yksi yritys - monta työntekijää.</li> </ul> <p>Vinkit:</p> <ul> <li>Karvinen 2022: <a href="https://terokarvinen.com/2022/django-instant-crm-tutorial">Django 4 Instant Customer Database Tutorial</a></li> <li>Palautus tuttuun tapaan 24 h ennen seuraavan opetuskerran alkua, eli vasta hiihtoloman jälkeen.</li> <li>Djangon testipalvelinta ei saa laittaa Internetiin näkyviin. Eli './manage.py runserver' ei sovi tuotantoon. <ul> <li>Tuotantoasennus tehdään Apachen ja mod_wsgi:n kanssa, mutta sitä ei tarvita tässä harjoituksessa</li> </ul> </li> <li>Käytä aina hyviä salasanoja.</li> <li>Bonustehtäviin: <ul> <li>Django 4.1 Documentation: <a href="https://docs.djangoproject.com/en/4.1/topics/db/examples/many_to_one/">Many-to-one relationships</a></li> <li>ForeignKey tulee many-puolelle</li> </ul> </li> <li>Kesäkurssini Djangosta <ul> <li>Ideoit ja toteutat oman weppisovelluksen, ja viet sen julkiseen Internetiin omalle pilvipalvelimelle</li> <li>Kahdeksan päivää aamusta iltaan, online <ul> <li>Alkaa 2023-05-22 w21 ma</li> <li>Päättyy 2023-05-31 w22 ke</li> <li>Kurssi päättyy kokonaan viimeisenä kurssipäivänä. Kurssin päättymisen jälkeen ei voi, ei saa, eikä tarvitse palauttaa mitään.</li> </ul> </li> <li>Ilmoittautuminen käynnissä juuri nyt, paikkoja oli tätä kirjoittaessa vapaana</li> <li>ICT8TN034-3003 Python weppipalvelu - ideasta tuotantoon</li> </ul> </li> </ul> <h3 id="h11-prod">h11 prod</h3> <ul> <li>a) Tee Djangon tuotantoasennus.</li> <li>b) Vapaaehtoinen, vaikeahko: dev&amp;prod: tee ja kokeile Django-projekti eri käyttäjällä tai koneella testipalvelimella ('./manage.py runserver'). Kopioi se tuotantopalvelimelle ja ota käyttöön ('touch */wsgi.py').</li> <li>c) Vapaaehtoinen, vaikea: muutto: jatkoa b-kohtaan: muokkaa tietokannan rakennetta kehityspalvelimella. Kopioi koodi tuotantopalvelimelle, ja päivitä tietokannan rakenne migraatioilla.</li> </ul> <p>Vinkit</p> <ul> <li>Karvinen 2022: <a href="https://terokarvinen.com/2022/deploy-django/">Deploy Django 4 - Production Install</a></li> </ul> <h3 id="h12-vianselvitys">h12 vianselvitys</h3> <p>Haasteita horisontissa. Tutki ongelmia Djangon tuotantotyyppisessä asennuksessa:</p> <ul> <li>Aiheuta ongelma</li> <li>Näytä oireet (esim. selaimella)</li> <li>Etsi siihen liittyvät lokimerkinnät</li> <li>Analysoi lokimerkinnät (eli selitä perusteellisesti, mitä eri kohdat tarkoittavat ja mitä kohdista on pääteltävissä)</li> <li>Korjaa ongelma</li> <li>Osoita testillä, että vika on korjattu</li> </ul> <p>Tutkittavat ongelmat:</p> <ul> <li>a) Kirjoitusvirhe Python-tiedostossa</li> <li>b) Django-projektikansio väärässä paikassa (siis se, jossa on manage.py)</li> <li>c) Projektikansiolla väärät oikeudet ('chmod ugo-rwx teroco/', 'chmod u+rx teroco/')</li> <li>d) Kirjoitusvirhe Apachen asetustiedostossa (/etc/apache2/sites-available/terokarvinen.conf tms)</li> <li>e) Apachen WSGI-moduli puuttuu ('sudo apt-get purge libapache2-mod-wsgi-py3' tms)</li> <li>f) Väärät domain-nimet ALLOWED_HOSTS-kohdassa (settings.py, ja DEBUG=False)</li> <li>e) Vapaaehtoinen bonus: oma, itse keksitty ongelma.</li> </ul> <p>Vinkit</p> <ul> <li>Aloita toimivasta tilanteesta. Silloin tiedät, ettei asennuksessa ole muita ongelmia kuin ne, joita olet itse aiheuttanut.</li> <li>'sudo tail -F /var/log/apache2/access.log /var/log/apache2/error.log /var/log/apache2/other_vhost.log' <ul> <li>ja tähän voi lätkiä rivinvaihtoja, niin erottaa, mitkä rivit tulevat mistäkin sivunlatauksesta</li> </ul> </li> <li>'/sbin/apache2ctl configtest'</li> <li>'sudo systemctl status apache2'</li> </ul> <h3 id="h13-hello-world">h13 Hello world!</h3> <ul> <li>a) Käännä &quot;Hei maailma&quot; kolmella kielellä.</li> <li>b) Vapaaehtoinen: greetme. Tee ohjelma, joka ottaa käyttäjän nimen komentoriviparametrina ja tervehtii 'greetme Tero' vastaa &quot;Hello, Tero&quot; ja 'greetme foo' vastaa &quot;Hello, foo&quot;.</li> <li>c) Vapaaehtoinen: Tee greetme kahdella muullakin kielellä.</li> </ul> <p>Vinkit:</p> <ul> <li>Karvinen 2018: <a href="https://terokarvinen.com/2018/hello-python3-bash-c-c-go-lua-ruby-java-programming-languages-on-ubuntu-18-04/">Hello World Python3, Bash, C, C++, Go, Lua, Ruby, Java</a></li> <li>Mille vain kielelle voi hakea hakukoneesta hei maailman &quot;hello world python&quot;</li> <li>Javalla yksi luokka per tiedosto, luokan nimi pitää olla sama sekä tiedoston nimessä että sisällä, isoja ja pieniä kirjaimia myöten. Hello.java, &quot;class Hello&quot;.</li> <li>Pythonista käytetään versiota kolme, usein komento 'python3'.</li> <li>Käyttäjän syötteet kannattaa ottaa ensisijaisesti suoraan komentoriviltä. Kumpaa itse käyttäisit mieluummin: 'curl <a href="https://terokarvinen.com">https://terokarvinen.com</a>' - vai 'zlur' &quot;Hei, syötä haluamasi weppisivun osoite...&quot;</li> </ul> <h3 id="h14-uusi-komento">h14 Uusi komento</h3> <ul> <li>a) Tee Linuxiin uusi komento Bashilla. Komennon tulee toimia kaikilla käyttäjillä, työhakemistosta riippumatta. Tee jotain muuta kuin &quot;hei maailma&quot;.</li> <li>b) Tee Linuxiin uusi komento Pythonilla. Komennon tulee toimia kaikilla käyttäjillä, työhakemistosta riippumatta.</li> <li>c) Tee Linuxiin komento, joka tekee jotain monelle tiedostolle</li> </ul> <p>Vinkit</p> <ul> <li>Kannattaa harjoitella arviotavaa labraa varten <ul> <li>Voit esimerkiksi tehdä kaikki kurssin harjoitukset läpi tyhjälle tietokoneelle (ilman että raportoit niitä uudelleen).</li> <li>Vanhoja arvioitavia labroja löytyy netistä. Toki eri kursseilla olen saattanut opettaa eri ohjelmilla tai kielillä, joten kannattaa katsoa tehtäviä soveltuvin osin</li> <li>Perusasiat: aina hyvät salasanat, testaa kaikki, oikeudet oikein...</li> </ul> </li> <li>Tuletko &quot;Palvelinten hallintaan&quot; seuraavalla jaksolla? Torstain ryhmään mahtuu ICI001AS3A-3002 &quot;Palvelinten hallinta&quot;</li> </ul> <h2 id="adminstrivia">Adminstrivia</h2> <p>This has been updated after publishing, and will be updated as needed.</p> <p>Tux logo by Larry Ewing.</p>