# Lab Notes — Phase 0 Sysadmin Learning

Bu klasör Phase 0 (4 aylık sysadmin learning) hands-on notları için.

**Hedef:** Sysadmin self-assessment 1.9/4 → 3+/4. Hetzner CX22 üzerinde haftada 10-15 saat × 16 hafta = ~190 saat.

---

## Yapı

Her hafta için bir dosya oluştur:

```
lab-notes/
├── README.md                          # Bu dosya
├── week-01-almalinux-basics.md        # dnf, systemctl, journalctl, ssh hardening
├── week-02-systemd.md                 # Custom unit + timer, journald
├── week-03-users-quota.md             # useradd, xfs_quota, /etc/skel
├── week-04-bash-scripting.md          # set -euo pipefail, trap, getopts
├── week-05-firewalld.md               # zone, rich rules, nftables
├── week-06-selinux-part1.md           # contexts, booleans, getenforce
├── week-07-selinux-part2.md           # audit2allow, custom policy
├── week-08-apache.md                  # event MPM, vhost, include pattern
├── week-09-php-fpm.md                 # Remi multi-version, per-user pool
├── week-10-mariadb.md                 # mysql_secure, my.cnf tuning, mariabackup
├── week-11-powerdns.md                # gmysql backend, zone, NOTIFY/AXFR
├── week-12-certbot-acme.md            # HTTP-01, DNS-01, wildcard, renew hook
├── week-13-ssh-sftp-ftp.md            # Match block, ChrootDirectory, Pure-FTPd MySQL
├── week-14-backup-restore.md          # tar.gz incremental, restic, rsync
├── week-15-kvkk.md                    # Aydınlatma, VERBİS, ihlal bildirim
└── week-16-master-milestone.md        # 60 dk sıfır CX22'den full kurulum
```

---

## Her Dosyada Olması Gerekenler

1. **Konu özeti** — Hafta hangi konuyu kapsıyor, 1-2 paragraf
2. **Kaynaklar** — Hangi kitap bölümü, hangi video, hangi resmi doc'tan çalıştın
3. **Komutlar + çıktıları** — Hetzner CX22'de çalıştırdığın **her** komut + çıktısı. Bu bölüm ileride Phase 1 installer script'inin (Epic 2 + 17) doğrudan kaynak materyali olacak — özene bezene yaz.
4. **Tıkandığın yerler + çözüm** — Phase 1'de tekrar karşılaşmamak için debug notları
5. **SELinux denial örnekleri** (özellikle hafta 6-7) — `ausearch` çıktısı + `audit2allow` analizi + nasıl çözüldü
6. **Self-test sonucu** — Haftanın self-test kriterini geçtin mi? Süre? İlk denemede mi?

---

## Curriculum Master Plan'dan Özet

| Hafta | Konu | Self-test |
|---|---|---|
| 1 | AlmaLinux 9 temeli | CX22'yi 30 dk içinde hardened temele getir |
| 2 | systemd unit + journald | Custom .service unit yaz |
| 3 | User/group/quota | xfs_quota, repquota |
| 4 | Bash scripting | Idempotent create-account.sh |
| 5 | firewalld + nftables | Rich rule + fail2ban entegrasyonu |
| 6 | **SELinux Bölüm 1** | CGI script'i httpd_sys_content_t ile çalıştır |
| 7 | **SELinux Bölüm 2** | Kasten AVC denial + audit2allow |
| 8 | Apache event MPM | 5 vhost include pattern |
| 9 | PHP-FPM multi-version | 3 PHP paralel çalışsın |
| 10 | MariaDB | mariabackup point-in-time restore |
| 11 | PowerDNS gmysql | CLI'dan zone ekle, dig +trace |
| 12 | certbot/acme.sh | Wildcard cert + 60 gün auto-renew |
| 13 | SSH/SFTP/FTP | Chroot user kendi /home'unu görsün |
| 14 | Backup/restore | 2. CX22'ye 45 dk full restore |
| 15 | KVKK | 1 sayfa operasyonel checklist |
| 16 | **Master milestone** | Aşağıya bak |

---

## Hafta 16 Master Milestone

Yeni sıfır Hetzner CX22 üzerinde **60 dakika içinde** komut satırından (doc'a bakabilir, copy-paste hazır script yok):

1. Linux user `demo01` oluştur, SSH key + xfs quota 2GB
2. `/home/demo01/public_html` Apache vhost olarak aç
3. PHP-FPM 8.2 demo01 pool'u Unix socket ile aç, SELinux context düzelt
4. MariaDB'de `demo01_app` DB + `demo01_user` + GRANT
5. PowerDNS'e yeni zone (A/CNAME/MX) ekle
6. Let's Encrypt HTTP-01 sertifika al + Apache'ye bağla
7. Jailed SFTP erişimi ver + test client'tan login
8. Tüm sistem state'ini tar.gz yedekle

### Sonuç Yorumlama

- **60 dk altı:** 3+/4 seviyesi kanıtlandı. Phase 1 başlatılabilir.
- **60-90 dk:** 2.5/4. MVP yazılabilir ama her epic'e +%20 buffer ekle.
- **90+ dk:** Curriculum 4-6 hafta uzat. MVP başlatma.

---

## Gizlilik & Güvenlik

- Bu klasör git'te **tracked**
- ❌ Secret/key/parola koymayın → `.local.md` suffix ile bittiyse git ignore eder
- ✅ Public IP, hostname, public SSH key OK
- ✅ Komut çıktıları (parolasız) OK
- ❌ `/etc/onoxsoft/secrets.env` içeriği asla
- ❌ Müşteri verisi (Phase 1 başladığında bile) asla

---

## Phase 0 Boyunca Paralel Aksiyonlar (haftalık takvim)

- **Her hafta:** lab-notes commit + git push (yedek)
- **Hafta 4:** Limited şirket kuruluş süreci başlat (avukat görüşmesi)
- **Hafta 8:** E&O sigorta tekliflerini topla
- **Hafta 12:** KVKK avukatı retainer anlaşması imzala
- **Hafta 14-15:** Aile/arkadaş 2 kişi social commitment ayarla
- **Hafta 16:** Master milestone + Phase 1 Epic 1 hazırlığı

---

**Phase 0 başlangıç tarihi:** (Pre-Phase 0 aksiyonları tamamlandıktan sonra — bkz. ana README)
