[{"data":1,"prerenderedAt":339},["ShallowReactive",2],{"navigation":3,"\u002Fpoc\u002Fmanage-data":73,"\u002Fpoc\u002Fmanage-data-surround":325,"-poc-manage-data-description":329},[4,9,14,63,68],{"title":5,"path":6,"stem":7,"icon":8},"Goals","\u002Fgoals","0.goals","i-lucide-goal",{"title":10,"path":11,"stem":12,"icon":13},"Specification","\u002Fspec","1.spec","i-lucide-square-pen",{"title":15,"path":16,"stem":17,"children":18,"icon":62},"Proof of Concept","\u002Fpoc","3.poc\u002F0.index",[19,22,27,32,37,42,47,52,57],{"title":20,"path":16,"stem":17,"icon":21},"Overview","i-lucide-play",{"title":23,"path":24,"stem":25,"icon":26},"Container Image","\u002Fpoc\u002Fmanage-image","3.poc\u002F1.manage-image","i-lucide-layers",{"title":28,"path":29,"stem":30,"icon":31},"Server Setup","\u002Fpoc\u002Fsetup-server","3.poc\u002F2.setup-server","i-lucide-server",{"title":33,"path":34,"stem":35,"icon":36},"User Management","\u002Fpoc\u002Fmanage-users","3.poc\u002F3.manage-users","i-lucide-square-user",{"title":38,"path":39,"stem":40,"icon":41},"Fleet Management","\u002Fpoc\u002Fmanage-fleet","3.poc\u002F4.manage-fleet","i-lucide-circle-pile",{"title":43,"path":44,"stem":45,"icon":46},"Provisioning","\u002Fpoc\u002Fprovisioning","3.poc\u002F5.provisioning","i-lucide-image-down",{"title":48,"path":49,"stem":50,"icon":51},"User Data","\u002Fpoc\u002Fmanage-data","3.poc\u002F6.manage-data","i-lucide-folder-sync",{"title":53,"path":54,"stem":55,"icon":56},"Branding","\u002Fpoc\u002Fbranding","3.poc\u002F7.branding","i-lucide-paintbrush",{"title":58,"path":59,"stem":60,"icon":61},"Legacy Apps","\u002Fpoc\u002Flegacy-apps","3.poc\u002F7.legacy-apps","i-lucide-hourglass","i-lucide-code-xml",{"title":64,"path":65,"stem":66,"icon":67},"Use Cases","\u002Fuse-cases","4.use-cases","i-lucide-list",{"title":69,"path":70,"stem":71,"icon":72},"FAQ","\u002Ffaq","5.faq","i-lucide-message-circle-question-mark",{"id":74,"title":75,"body":76,"description":319,"extension":320,"meta":321,"navigation":322,"path":49,"seo":323,"stem":50,"__hash__":324},"docs\u002F3.poc\u002F6.manage-data.md","User Data Management",{"type":77,"value":78,"toc":304},"minimark",[79,93,96,100,105,120,124,132,136,140,144,147,150,153,156,178,181,184,187,198,201,204,207,222,226,233,236,240,251,254,270,274],[80,81,82],"warning",{},[83,84,85,86],"p",{},"This page is work in progress. Related issue: ",[87,88,92],"a",{"href":89,"rel":90},"https:\u002F\u002Fgitlab.com\u002Feu-os\u002Feu-os.gitlab.io\u002F-\u002Fissues\u002F46",[91],"nofollow","#46",[83,94,95],{},"EU OS should offer an approach to support the security of the personal files of the EU OS computer users (user data).",[97,98,5],"h2",{"id":99},"goals",[101,102,104],"h3",{"id":103},"confidentiality","Confidentiality",[106,107,108,117],"ul",{},[109,110,111,112,116],"li",{},"mostly provided by overall security measures of the computers, such as secure boot, verified boot through signatures and hashes (see: ",[87,113,114],{"href":114,"rel":115},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=D7HqckeHlx8",[91],")",[109,118,119],{},"optionally: full disk encryption either locked to the TPM or to a FIDO2 token (e.g. yubikey)",[101,121,123],{"id":122},"integrity","Integrity",[106,125,126,129],{},[109,127,128],{},"snapshots (local and remote)",[109,130,131],{},"strong user authentication (FIDO2 token, secure password)",[101,133,135],{"id":134},"availability-protection-against-loss","Availability (Protection against loss)",[106,137,138],{},[109,139,128],{},[97,141,143],{"id":142},"implementation","Implementation",[83,145,146],{},"Most likely, EU OS computers should use btrfs for system and user data partitions. Btrfs is a popular choice with major Linux distributions such as Fedora and openSUSE.",[83,148,149],{},"The choice of the implementation depends pretty much also on the local requirements and integration in other systems. If for instance the latest user data is kept on Nextcloud or in a separate storage readily available for use from a virtual desktop environment (VDI), additional constraints may lead to different design choices.",[83,151,152],{},"Note that all implementations should assume that computers may be powered off any time, have occasionally no network access and may be only in home\u002Fpublic wifi.",[101,154,155],{"id":155},"btrfsbk",[106,157,158,165,172,175],{},[109,159,160,161],{},"website: ",[87,162,163],{"href":163,"rel":164},"https:\u002F\u002Fdigint.ch\u002Fbtrbk\u002F",[91],[109,166,167,168],{},"repo: ",[87,169,170],{"href":170,"rel":171},"https:\u002F\u002Fgithub.com\u002Fdigint\u002Fbtrbk",[91],[109,173,174],{},"latest release: march 2023 😟",[109,176,177],{},"latest commit: 1 month ago (6 of July at the time of writing) 👁",[83,179,180],{},"btrfsbk allows with a simple config file to determine the frequency and retention periods of copy-on-write btrfs snapshots and their transfer to a remote btrfs filestorage.",[83,182,183],{},"According to the website, the tool is robust against interruptions of the transfer.",[83,185,186],{},"Example config:",[188,189,194],"pre",{"className":190,"code":192,"language":193},[191],"language-text","snapshot_preserve_min   2d\nsnapshot_preserve      14d\n\ntarget_preserve_min    no\ntarget_preserve        20d 10w *m\n\nsnapshot_dir           btrbk_snapshots\n\nvolume \u002Fmnt\u002Fbtr_pool\n  target \u002Fmnt\u002Fbtr_backup\u002Fmylaptop\n  target ssh:\u002F\u002Fbackup.server.local\u002Fmnt\u002Fbtr_backup\u002Fcomputer_id_39abc3f\n  subvolume home\n  [...]\n","text",[195,196,192],"code",{"__ignoreMap":197},"",[83,199,200],{},"Such a system of snapshots would allow users to recover accidently removed or deleted files from their own device.",[83,202,203],{},"Replicating snapshots to the server would offer a remote backup. To use this data from within the virtual desktop environment (on another device), one would need to ensure that a snapshot is transfered in short intervalls or before logging out\u002Fpowering of the device. As this is difficult to achieve, it may be more advisible to offer different approaches for different folders\u002Ffiles. Folders with current working files may be synced via Nextcloud, which offers a nearly instantaneous sync.",[83,205,206],{},"It is unclear if btrbk sync scales well when hundreds or thousands sync in parallel.",[83,208,209,210,213,214,217,218,221],{},"As btrfs snapshots do not support individual exclusion lists, files for exclusion must be put in specfic folders in a subvolume that is not synced. Think of ",[195,211,212],{},"~\u002F.local\u002Fshare\u002Fcontainers\u002Fstorage\u002Foverlay",", which contains podman\u002Ftoolbox image data and does not need to be backed up. Other examples may be the browser cache ",[195,215,216],{},"~\u002F.mozilla\u002Ffirefox\u002Frandom-profile-string\u002Fstorage\u002Fdefault",", the KDE search index baloo ",[195,219,220],{},"\u002Fhome\u002Frriemann\u002F.local\u002Fshare\u002Fbaloo",".",[101,223,225],{"id":224},"nextcloud","Nextcloud",[83,227,228,229,232],{},"This is the cheap and simple approach: All users get their ",[195,230,231],{},"$HOME\u002FDocuments"," folder synced via Nextcloud client running on their device. This allows the users to find their latest files via Nextcloud in the browser (if made available) or in a VDI that also syncs Nextcloud files to a Documents folders.",[83,234,235],{},"Nextcloud offers to store files on S3, which many organisations have already.",[101,237,239],{"id":238},"borg-backup-with-borgmatic-btrfs-snapshots","Borg Backup with borgmatic btrfs snapshots",[106,241,242,245,248],{},[109,243,244],{},"use borgmatic to make periodic local copy-on-write snapshots with given retention period that remain on the device",[109,246,247],{},"use borgmatic to instrument borg remote backups of the latest snapshot (excluding some cache folders) to a remote S3 repository (S3 requires borg v2.0)",[109,249,250],{},"remote backups with borg can be compressed, encrypted, and deduplicated, so that an off-the-shelf cloud S3 provider could be considered",[83,252,253],{},"References:",[106,255,256,263],{},[109,257,258,259],{},"borgmatic ",[87,260,261],{"href":261,"rel":262},"https:\u002F\u002Ftorsion.org\u002Fborgmatic\u002Fdocs\u002Fhow-to\u002Fsnapshot-your-filesystems\u002F#btrfs",[91],[109,264,265,266],{},"borg 2.0 supports s3 ",[87,267,268],{"href":268,"rel":269},"https:\u002F\u002Fborgbackup.readthedocs.io\u002Fen\u002Fmaster\u002Fusage\u002Fgeneral.html#repository-urls",[91],[97,271,273],{"id":272},"issues","Issues",[106,275,276,284],{},[109,277,278,279,116],{},"configuration data may need to be backuped and rolled back in case that the entire system is rolled back (see ",[87,280,283],{"href":281,"rel":282},"https:\u002F\u002Fgitlab.com\u002Feu-os\u002Feu-os.gitlab.io\u002F-\u002Fwork_items\u002F40",[91],"#40",[109,285,286,287],{},"configuration data of applications is stored at several places:\n",[106,288,289,295],{},[109,290,291,294],{},[195,292,293],{},"~\u002F.local\u002Fconfig"," for applications installed in the image (such as KDE Plasma, Dolphin file browser, etc.",[109,296,297,300,301,116],{},[195,298,299],{},"~\u002F.var\u002Fapp\u002Fmy_app_name\u002Fconfig"," for flatpaks (here: flatpak ",[195,302,303],{},"my_app_name",{"title":197,"searchDepth":305,"depth":305,"links":306},2,[307,313,318],{"id":99,"depth":305,"text":5,"children":308},[309,311,312],{"id":103,"depth":310,"text":104},3,{"id":122,"depth":310,"text":123},{"id":134,"depth":310,"text":135},{"id":142,"depth":305,"text":143,"children":314},[315,316,317],{"id":155,"depth":310,"text":155},{"id":224,"depth":310,"text":225},{"id":238,"depth":310,"text":239},{"id":272,"depth":305,"text":273},"Manage User Data","md",{},{"title":48,"icon":51},{"title":75,"description":319},"_AQuAR6UOGzhreKqW1ngITXfHj6jTxmSqebEI2Y9Xro",[326,328],{"title":43,"path":44,"stem":45,"description":327,"icon":46,"children":-1},"Provisioning of EU OS",{"title":53,"path":54,"stem":55,"description":197,"icon":56,"children":-1},{"data":330,"body":331},{},{"type":332,"children":333},"root",[334],{"type":335,"tag":83,"props":336,"children":337},"element",{},[338],{"type":193,"value":319},1788729539118]