Pereiti prie turinio

Slapukų nustatymai

Pasirinkite, kokių rūšių slapukus leidžiate. Pasirinkimą bet kada galite pakeisti per „Slapukų nustatymai“ kiekvieno puslapio apačioje. Privatumo pareiškimas

Būtinieji

Visada įjungti

Reikalingi prisijungti, išsaugoti krepšelį ir įsiminti Jūsų pasirinkimus. Jie visada įjungti.

Kokie slapukai?
  • weboke_sessie, weboke_klant, weboke_remember: Jūsų sesija ir prisijungimo išlaikymas
  • weboke_basket: Jūsų krepšelis
  • wkBtwIncl: kainų rodymas su PVM arba be PVM
  • wok_cookies: Jūsų slapukų pasirinkimas, 12 mėnesių

Matuoja, kuri reklama atveda prie apsilankymo ar užsakymo, kad nemokėtume už neveiksmingas reklamas.

Kokie slapukai?
  • Google Ads per Google Tag Manager (_gcl_au, _gcl_aw), iki 90 dienų
  • OpenAI Ads, reklamos ChatGPT
  • wok_aff: per kurį partnerį atėjote pas mus (partnerių programa), 60 dienų

4,6

Šalis ir kalba

Kiekviena šalis turi savo svetainę su tos šalies kainomis ir PVM.

Peržiūrėti

Nuosavos paslaugos ir laikmačiai

6 modulis: Paslaugos ir žurnalai · Skaitymo laikas: 11 min.

Mokymosi tikslas: Po šios pamokos galėsite paleisti savo programą kaip systemd paslaugą, veikiančią atskiro naudotojo vardu ir su keliomis saugumo parinktimis, bei planuoti užduotis su systemd laikmačiu (timer) arba cron.

Pagrindinės sąvokos: unit failas, [Unit], [Service], [Install], ExecStart, User=, WorkingDirectory, EnvironmentFile, Restart=, WantedBy, NoNewPrivileges, ProtectSystem, ProtectHome, PrivateTmp, systemd-analyze security, laikmatis (timer), OnCalendar, Persistent, crontab

Kodėl ne tiesiog "nohup" ar "screen"?

Kas į serverį įdiegia savo programą (nedidelę žiniatinklio programą, botą, scenarijų, kuris kiekvieną naktį ką nors atlieka), pirmą kartą ją dažnai paleidžia rankiniu būdu: node server.js & arba screen sesijoje. Tai veikia, kol atsijungiate, serveris paleidžiamas iš naujo arba programa sutrinka. Tada ji dingsta, ir niekas to nepastebi.

Programa, kuri turi veikti visada, turėtų būti systemd paslauga. Tada:

  • ji pasileidžia savaime įjungiant serverį;
  • systemd ją paleidžia iš naujo, jei ji sutrinka;
  • jos išvestis patenka į žurnalą (journal, pamoka 6.2);
  • ji veikia Jūsų pasirinkto naudotojo vardu ir su tomis teisėmis, kurias Jūs leidžiate.

Nuosavas unit failas

Tarkime, turite nedidelę Node.js programą kataloge /opt/factuurapp, kuri klausosi 127.0.0.1:3000. Vėliau nginx arba Caddy ją padarys pasiekiamą iš išorės (modulis 7).

1 žingsnis: atskiras naudotojas be apvalkalo (shell) (pamoka 3.2). Programai nereikia būti root ir nereikia prisijungti:

anna@web1:~$ sudo adduser --system --group --home /opt/factuurapp --no-create-home factuurapp
anna@web1:~$ sudo chown -R factuurapp:factuurapp /opt/factuurapp/data

Pats kodas gali likti priklausyti root (programai nereikia savęs keisti); dienos naudotojui priklauso tik katalogas, į kurį ji rašo.

2 žingsnis: unit failas. Nuosavus unit failus dėkite į /etc/systemd/system/:

# /etc/systemd/system/factuurapp.service
[Unit]
Description=Factuurapp (Node.js)
After=network-online.target
Wants=network-online.target

[Service]
User=factuurapp
Group=factuurapp
WorkingDirectory=/opt/factuurapp
EnvironmentFile=/etc/factuurapp/env
ExecStart=/usr/bin/node /opt/factuurapp/server.js
Restart=on-failure
RestartSec=5s

NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/opt/factuurapp/data

[Install]
WantedBy=multi-user.target

Trys blokai:

  • [Unit]: aprašymas ir eiliškumas. After=network-online.target kartu su Wants= užtikrina, kad paslauga pasileistų tik tada, kai tinklas jau veikia.
  • [Service]: kaip programa veikia. ExecStart su visu keliu (systemd nenaudoja paieškos kelio, kaip Jūsų apvalkalas). User= ir Group= nustato, kieno vardu ji veikia. EnvironmentFile nuskaito nustatymus, pavyzdžiui, duomenų bazės slaptažodį, iš atskiro failo, kad jų nebūtų unit faile.
  • [Install]: ką daro enable. WantedBy=multi-user.target reiškia: paleisti kartu su įprastu sistemos paleidimu.

3 žingsnis: paslaptys atskirai, su griežtomis teisėmis.

anna@web1:~$ sudo mkdir /etc/factuurapp
anna@web1:~$ sudo install -m 600 -o root -g root /dev/null /etc/factuurapp/env
anna@web1:~$ sudoedit /etc/factuurapp/env

Turinys, pavyzdžiui, DATABASE_URL=postgres://factuur:...@127.0.0.1/factuur. systemd nuskaito failą kaip root prieš persijungdama į paslaugos naudotoją, todėl pakanka 600, priklausančio root.

4 žingsnis: įkelti, paleisti, patikrinti.

anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl enable --now factuurapp
anna@web1:~$ systemctl status factuurapp
anna@web1:~$ journalctl -u factuurapp -f

Saugumo parinktys: mažai pastangų, didelis skirtumas

Keturios eilutės po RestartSec pavyzdyje apriboja, ką paslauga gali daryti, net jei kas nors randa spragą Jūsų programoje:

ParinktisPoveikis
NoNewPrivileges=trueprocesas ir jo vaikiniai procesai niekada negali gauti daugiau teisių (net per sudo ar setuid programas)
ProtectSystem=strictvisa failų sistema paslaugai yra tik skaitoma, išskyrus tai, ką leidžiate su ReadWritePaths=
ProtectHome=true/home, /root ir /run/user yra nematomi
PrivateTmp=trueatskiras, tuščias /tmp, kurio kitos programos nemato

systemd gali įvertinti Jūsų unit failą:

anna@web1:~$ systemd-analyze security factuurapp
...
→ Overall exposure level for factuurapp.service: 4.9 OK 🙂

Kuo mažesnis skaičius, tuo geriau. Paslauga be parinkčių gauna apie 9 ("UNSAFE"). Siekti nulio nebūtina: kiekviena pridėta parinktis gali sugadinti tai, ko programai reikia. Pridėkite jas po vieną ir po kiekvieno žingsnio išbandykite. Jei kas nors nustoja veikti, priežastis dažniausiai matoma žurnale ("Read-only file system", "Permission denied").

Užduočių planavimas: laikmačiai

Tam, kas turi vykti nustatytu laiku (atsarginė kopija, valymo scenarijus, ataskaita), reikia laikmačio (timer). systemd laikmatį sudaro du unit failai tuo pačiu pavadinimu: .service, kuris nurodo, kas turi būti atlikta, ir .timer, kuris nurodo, kada.

# /etc/systemd/system/opruimen.service
[Unit]
Description=Oude exportbestanden opruimen

[Service]
Type=oneshot
User=factuurapp
ExecStart=/usr/bin/find /opt/factuurapp/data/export -type f -mtime +30 -delete
# /etc/systemd/system/opruimen.timer
[Unit]
Description=Dagelijks oude exportbestanden opruimen

[Timer]
OnCalendar=*-*-* 03:15:00
RandomizedDelaySec=10m
Persistent=true

[Install]
WantedBy=timers.target

Type=oneshot reiškia: programa paleidžiama ir po to baigia darbą. OnCalendar yra tvarkaraštis: kasdien 03:15. Taip pat galite rašyti daily, weekly arba Mon *-*-* 02:00; systemd-analyze calendar "Mon *-*-* 02:00" parodo, kada bus kitas paleidimas. Persistent=true yra svarbus: jei 03:15 serveris buvo išjungtas, užduotis vis tiek bus atlikta iškart po paleidimo. RandomizedDelaySec šiek tiek išsklaido paleidimo momentą.

Įjungiamas laikmatis, ne paslauga:

anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl enable --now opruimen.timer
anna@web1:~$ systemctl list-timers opruimen
NEXT                        LEFT     LAST PASSED UNIT           ACTIVATES
Tue 2026-11-10 03:19:42 CET 15h left -    -      opruimen.timer opruimen.service
anna@web1:~$ sudo systemctl start opruimen.service    # dabar vieną kartą išbandyti rankiniu būdu
anna@web1:~$ journalctl -u opruimen.service

O kaip cron?

cron yra senesnis, paprastesnis įrankis ir vis dar puikiai veikia. Eilutė naudotojo crontab faile (crontab -e):

15 3 * * * /usr/local/bin/opruimen.sh

Penki laukai yra minutė, valanda, mėnesio diena, mėnuo ir savaitės diena. Privalumai ir trūkumai greta:

cronsystemd laikmatis
Sąrankaviena eilutėdu failai
Praleistas paleidimas (serveris išjungtas)praleidžiamassu Persistent=true atliekamas vėliau
Išvestis ir klaidosel. paštu, jei serveris gali siųsti laiškus; kitaip dingstažurnale
Saugumo parinktys, naudotojasper patį scenarijųvisos systemd galimybės (žr. aukščiau šioje pamokoje)
Matyti, kada jis veikėsudėtingasystemctl list-timers ir žurnalas

Serveriui, kurį administruojate rimtai, laikmačiai yra geresnis pasirinkimas, ypač atsarginėms kopijoms (pamoka 8.2): norite tiksliai žinoti, kad jos buvo atliktos ir ką jos pranešė. Cron eilutę, kuri tyliai nepavyksta, pastebėsite tik tada, kai Jums prireiks atsarginės kopijos.

AlmaLinux ir Rocky Linux sistemose

Unit failai ir laikmačiai veikia lygiai taip pat. Vienas skirtumas: SELinux gali blokuoti nuosavą paslaugą, kuri skaito ar rašo failus vietoje, kurios SELinux nesitiki, arba klausosi neįprasto prievado. Pranešimas pateikiamas /var/log/audit/audit.log. Neišjunkite SELinux, kad išspręstumėte problemą; raskite tinkamą žymę arba taisyklę (pavyzdžiui, su semanage).

Santrauka

  • Programa, kuri turi veikti visada, turėtų būti systemd paslauga: paleidžiama savaime, paleidžiama iš naujo sutrikus, žurnalai patenka į journal.
  • Nuosavi unit failai dedami į /etc/systemd/system/, su User= nurodomas atskiras naudotojas be apvalkalo, paslaptys laikomos EnvironmentFile su teisėmis 600.
  • NoNewPrivileges, ProtectSystem=strict su ReadWritePaths, ProtectHome ir PrivateTmp sumažina žalą įvykus spragai; systemd-analyze security įvertina unit failą.
  • Laikmatis yra .service ir .timer su OnCalendar; Persistent=true atlieka praleistus paleidimus. Įjunkite laikmatį, o ne paslaugą.
  • cron vis dar veikia, bet laikmačiai suteikia geresnius žurnalus ir nepraleidžia paleidimų.

Testas (quiz)

1. Jūsų programa veikia kaip paslauga su User=root. Kodėl atskiras naudotojas yra geriau?



2. Sukūrėte .service ir .timer. Ką įjungiate su enable --now?



3. Ką daro Persistent=true laikmatyje?



4. Pridedate ProtectSystem=strict, ir po to Jūsų programa, saugodama įkeltus failus, rodo "Read-only file system". Koks teisingas sprendimas?



5. Kur laikote savo paslaugos duomenų bazės slaptažodį?



Užduotis

Užduotis O6.3: Nuosava paslauga su laikmačiu. Sukurkite savo serveryje nedidelę nuosavą paslaugą su laikmačiu, pavyzdžiui, scenarijų, kuris kiekvieną naktį įrašo laisvą disko vietą ir systemctl --failed į failą arba žurnalą. Naudokite atskirą naudotoją, Type=oneshot, bent dvi saugumo parinktis ir Persistent=true. Išbandykite su systemctl start, peržiūrėkite išvestį žurnale ir užsirašykite systemd-analyze security įvertinimą. Įklijuokite savo .service ir .timer ir atsakykite į kontrolinio sąrašo klausimus.

Užduotis O6.3: Nuosava paslauga su laikmačiu

Šią užduotį atliekate patys; niekas jos netikrina. Pažymėkite, ką atlikote, ir pažymėkite užduotį kaip atliktą.




Jūsų pažymėti varneliai ir pastabos lieka tik šioje naršyklėje; niekur jų nesiunčiame. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotį atlikote.

Skaitykite daugiau

Akimirką…

Nustatykite domenus

Kiekvienam domenui nustatykite vardų serverius, susiejimą su talpinimu ir tai, kas taps valdytoju.

Įkeliami Jūsų domenai…