# Copyright (C) 2021-2024 Thien Tran # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. variant: fcos version: 1.5.0 passwd: users: - name: tomster ssh_authorized_keys: - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINkTKkJS7Id1WCyA5Klu/moLG9mP5hTC+v2qYqypMF1u contact@tommytran.io groups: - wheel - sudo - name: unpriv systemd: units: - name: postinst.service enabled: true contents: | [Unit] Description=Initial System Setup # We run after `systemd-machine-id-commit.service` to ensure that # `ConditionFirstBoot=true` services won't rerun on the next boot. After=systemd-machine-id-commit.service After=network-online.target # We run before `zincati.service` to avoid conflicting rpm-ostree # transactions. Before=zincati.service ConditionPathExists=!/var/lib/%N.stamp [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/restorecon -R /var ExecStart=/usr/sbin/setsebool -P container_use_cephfs off ExecStart=/usr/sbin/setsebool -P virt_use_nfs off ExecStart=/usr/sbin/setsebool -P virt_use_samba off ExecStart=/usr/bin/rpm-ostree override remove intel-gpu-firmware amd-ucode-firmware linux-firmware amd-gpu-firmware bootc btrfs-progs cifs-utils clevis clevis-dracut clevis-luks clevis-pin-tpm2 clevis-systemd containerd containers-common-extra crun crun-wasm cryptsetup docker-cli dnsmasq e2fsprogs-libs e2fsprogs flatpak-session-helper fuse-overlayfs fuse-sshfs fwupd google-compute-engine-guest-configs-udev iptables-legacy iptables-legacy-libs kdump-utils kexec-tools libnvme lvm2 lvm2-libs mdadm moby-engine nvme-cli podman rsync runc samba-client-libs samba-common libwbclient libsmbclient samba-common-libs socat sssd-client sssd-ldap sssd-common sssd-krb5-common sssd-nfs-idmap sssd-ad sssd-krb5 sssd-ipa sssd-common-pac systemd-resolved toolbox tpm2-tools tpm2-tss-fapi vim-data vim-minimal wireguard-tools ExecStart=/usr/bin/rpm-ostree install docker-ce docker-compose-plugin firewalld hardened_malloc qemu-guest-agent tuned unbound ExecStart=/usr/bin/sed -i 's/\s+nullok//g' /etc/pam.d/system-auth ExecStart=/usr/bin/echo 'EDITOR=nano' >> /etc/bashrc ExecStart=/usr/bin/echo 'VISUAL=nano' >> /etc/bashrc ExecStart=/usr/bin/systemctl disable systemd-resolved ExecStart=/usr/bin/touch /var/lib/%N.stamp ExecStart=/usr/bin/systemctl --no-block reboot [Install] WantedBy=multi-user.target - name: postinst2.service enabled: true contents: | [Unit] Description=Initial System Setup Part 2 # We run this after the packages have been overlayed After=network-online.target ConditionPathExists=!/var/lib/%N.stamp ConditionPathExists=/var/lib/postinst.stamp [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/echo 'libhardened_malloc.so' > /etc/ld.so.preload ExecStart=/usr/bin/systemctl enable --now firewalld ExecStart=/usr/bin/firewall-cmd --lockdown-on ExecStart=/usr/bin/firewall-cmd --permanent --remove-service=mds ExecStart=/usr/bin/firewall-cmd --permanent --remove-service=dhcpv6-client ExecStart=/usr/bin/rm /etc/unbound/unbound_control.key ExecStart=/usr/bin/touch /var/lib/%N.stamp ExecStart=/usr/bin/systemctl --no-block reboot [Install] WantedBy=multi-user.target - name: gvisor-updater.service enabled: true contents: | [Unit] Description=Update gVisor Requires=network-online.target After=network-online.target Before=docker.service [Service] Type=oneshot RuntimeDirectory=gvisor-updater WorkingDirectory=/run/gvisor-updater ExecStart=/usr/bin/sleep 5 ExecStart=curl -sS --remote-name-all 'https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/runsc' 'https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/runsc.sha512' 'https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/containerd-shim-runsc-v1' 'https://storage.googleapis.com/gvisor/releases/release/latest/x86_64/containerd-shim-runsc-v1.sha512' ExecStart=sha512sum -c runsc.sha512 -c containerd-shim-runsc-v1.sha512 ExecStart=+chown root:root runsc containerd-shim-runsc-v1 ExecStart=+chmod a+rx runsc containerd-shim-runsc-v1 ExecStart=+mv -Z runsc containerd-shim-runsc-v1 /usr/local/bin/ DynamicUser=true CapabilityBoundingSet= LockPersonality=true MemoryDenyWriteExecute=true NoNewPrivileges=true PrivateDevices=true PrivateIPC=true PrivateTmp=true ProcSubset=pid ProtectClock=true ProtectControlGroups=true ProtectHome=true ProtectHostname=true ProtectKernelLogs=true ProtectKernelModules=true ProtectKernelTunables=true ProtectProc=invisible ProtectSystem=strict RestrictAddressFamilies= RestrictNamespaces=true RestrictRealtime=true RestrictSUIDSGID=true RuntimeDirectoryMode=700 SystemCallArchitectures=native SystemCallFilter=@system-service SystemCallFilter=~@obsolete [Install] WantedBy=multi-user.target - name: docker-compose-updater@.service enabled: false contents: | [Unit] Description=Docker Compose Updater for /srv/%I Requires=network-online.target Requisite=docker.service After=network-online.target After=docker.service [Service] Type=oneshot User=root Group=root WorkingDirectory=/srv/%i ExecStart=/usr/bin/docker image prune -f -a --filter 'until=240h' #ExecStart=/usr/bin/git pull ExecStart=/usr/bin/docker compose pull ExecStart=/usr/bin/docker compose up -d - name: docker-compose-updater@.timer enabled: false contents: | [Unit] Description=Run docker-compose-updater for /srv/%I once a week, 15 mintues after OS updates [Timer] OnCalendar=Fri 2:15 Persistent=true [Install] WantedBy=timers.target - name: docker.service enabled: true - name: fstrim.timer enabled: true - name: systemd-oomd.service enabled: true - name: rpm-ostree-countme.timer enabled: false mask: true - name: sshd.service enabled: false - name: sshd.socket enabled: true - name: kdump.service enabled: false mask: true - name: debug-shell.service enabled: false mask: true - name: coreos-cni-networking-check.service enabled: false mask: true storage: files: - path: /etc/zincati/config.d/51-rollout-wariness.toml contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/zincati/config.d/51-rollout-wariness.toml - path: /etc/zincati/config.d/55-updates-strategy.toml contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/zincati/config.d/55-updates-strategy.toml - path: /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:secureblue:hardened_malloc.repo contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/yum.repos.d/_copr:copr.fedorainfracloud.org:secureblue:hardened_malloc.repo - path: /etc/yum.repos.d/docker-ce.repo contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/yum.repos.d/docker-ce.repo - path: /etc/docker/daemon.json contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/docker/daemon.json - path: /etc/chrony.conf contents: source: https://raw.githubusercontent.com/GrapheneOS/infrastructure/main/chrony.conf overwrite: true - path: /etc/modprobe.d/vps-blacklist.conf contents: source: https://raw.githubusercontent.com/secureblue/secureblue/live/files/system/usr/etc/modprobe.d/blacklist.conf - path: /etc/sysctl.d/99-server.conf contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/sysctl.d/99-server.conf - path: /etc/systemd/system/NetworkManager.service.d/99-brace.conf contents: source: https://gitlab.com/divested/brace/-/raw/master/brace/usr/lib/systemd/system/NetworkManager.service.d/99-brace.conf - path: /etc/systemd/system/irqbalance.service.d/99-brace.conf contents: source: https://gitlab.com/divested/brace/-/raw/master/brace/usr/lib/systemd/system/irqbalance.service.d/99-brace.conf - path: /etc/ssh/sshd_config.d/10-custom.conf contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/ssh/sshd_config.d/10-custom.conf - path: /etc/ssh/ssh_config.d/10-custom.conf contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/ssh/ssh_config.d/10-custom.conf - path: /etc/systemd/system/sshd.service.d/override.conf contents: source: https://raw.githubusercontent.com/GrapheneOS/infrastructure/main/systemd/system/sshd.service.d/local.conf - path: /etc/tuned/active_profile contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/tuned/active_profile - path: /etc/tuned/profile_mode contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/tuned/profile_mode - path: /etc/systemd/zram-generator.conf contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/systemd/zram-generator.conf - path: /etc/security/limits.d/30-disable-coredump.conf contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/security/limits.d/30-disable-coredump.conf - path: /etc/systemd/coredump.conf.d contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/systemd/coredump.conf.d/disable.conf - path: /etc/sysconfig/chronyd overwrite: true contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/sysconfig/chronyd - path: /etc/unbound/unbound.conf contents: source: https://raw.githubusercontent.com/TommyTran732/Fedora-CoreOS-Ignition/main/etc/unbound/unbound.conf - path: /etc/systemd/system/unbound.service.d/override.conf contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/systemd/system/unbound.service.d/override.conf - path: /etc/issue overwrite: true contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/issue - path: /etc/issue.net overwrite: true contents: source: https://raw.githubusercontent.com/TommyTran732/Linux-Setup-Scripts/main/etc/issue links: - path: /etc/localtime target: ../usr/share/zoneinfo/Etc/UTC - path: /etc/systemd/system/multi-user.target.wants/unbound.service target: /usr/lib/systemd/system/unbound.service - path: /etc/systemd/system/multi-user.target.wants/tuned.service target: /usr/lib/systemd/system/tuned.service kernel_arguments: should_exist: - mitigations=auto,nosmt - spectre_v2=on - spectre_bhi=on - spec_store_bypass_disable=on - tsx=off - kvm.nx_huge_pages=force - nosmt=force - l1d_flush=on - spec_rstack_overflow=safe-ret - gather_data_sampling=force - reg_file_data_sampling=on - random.trust_bootloader=off - random.trust_cpu=off - intel_iommu=on - amd_iommu=force_isolation - efi=disable_early_pci_dma - iommu=force - iommu.passthrough=0 - iommu.strict=1 - slab_nomerge - init_on_alloc=1 - init_on_free=1 - pti=on - vsyscall=none - ia32_emulation=0 - page_alloc.shuffle=1 - randomize_kstack_offset=on - debugfs=off - lockdown=confidentiality - module.sig_enforce=1 - oops=panic - console=tty0 - console=ttyS0,115200