elemes/docs/16-permissions-rootless-pod...

3.1 KiB

title order category
Permission Content & Assets (Rootless Podman) 16 deployment

Permission content/ & assets/ — Rootless Podman keep-id

Tanggal: 2026-10-26 Status: Aktif Lokasi kode: podman-compose.yml, cli/commands.py, cli/runner.py


1. Masalah

Pada Podman rootless, container berjalan di user namespace sendiri. Secara default uid 1000 di dalam container (app) dipetakan ke subuid host (mis. 100999, tergantung isi /etc/subuid), bukan ke user yang menjalankan Podman (a2nr, uid 1000). Akibatnya dua arah sama-sama rusak:

Arah Gejala
Container → host File hasil publish/upload/create dimiliki host 100999; user a2nr tidak bisa menghapus/mengubahnya dari file manager tanpa sudo.
Host → container File hasil ./elemes.sh init (milik host 1000) tampak sebagai root di container; proses app tidak bisa menulis → editor konten gagal (403).

Tidak ada mekanisme penyelarasan permission di repo sebelum perbaikan ini.

2. Solusi: userns_mode: keep-id

Service elemes di podman-compose.yml kini memakai:

  elemes:
    userns_mode: keep-id

Dengan keep-id, uid container 1000 (app) dipetakan 1:1 ke host uid 1000 (user yang menjalankan compose). File yang dibuat backend otomatis dimiliki user host, dan file milik user host bisa ditulis app.

⚠️ keep-id hanya untuk Podman rootless di Linux. Docker Desktop sudah memetakan user secara otomatis; opsi ini tidak diperlukan (dan tidak dikenali Docker Compose klasik).

3. Perbaikan deployment lama: ./elemes.sh fixperms

File yang terlanjur dimiliki subuid (100999) tidak berubah otomatis hanya karena compose diubah. Perbaiki sekali dengan:

cd elemes
./elemes.sh fixperms

Perintah ini menjalankan:

podman unshare chown -R 0:0 ../content ../assets

Di namespace default podman unshare, uid 0 = user host. Jadi seluruh isi content/ dan assets/ kembali dimiliki a2nr dan tetap terbaca sebagai uid 1000 (app) di container keep-id.

Perintah bersifat idempotent: jika semua file sudah dimiliki user host, tidak ada chown yang dijalankan. ./elemes.sh run, runbuild, dan runclearbuild juga memanggil pemeriksaan yang sama secara otomatis sebelum up -d.

4. Troubleshooting

Gejala Penyebab Tindakan
Tidak bisa hapus file di content//assets/ dari file manager File lama dimiliki subuid 100999 ./elemes.sh fixperms, lalu cek ls -ln
Editor konten 403 / "Permission denied" saat simpan Container tidak memakai keep-id, atau file milik root host Pastikan userns_mode: keep-id aktif, jalankan ulang ./elemes.sh runbuild
fixperms bilang "Docker Desktop sudah memetakan user" Runtime terdeteksi Docker, bukan Podman Tidak ada tindakan — permission Docker Desktop sudah benar
podman unshare gagal Podman rootless belum dikonfigurasi / dijalankan sebagai root Jalankan sebagai user biasa; cek /etc/subuid dan /etc/subgid

Verifikasi cepat:

ls -ln ../content ../assets | head
# owner harus uid user Anda (mis. 1000), bukan 100999