Cookie Consent by Free Privacy Policy website Jak zpřístupnit v PROXMOX uživateli vytvářet virtuální PC na k tomu vyhrazenému disku, aby se nedostal nikam mimo něj? - jetoonas.cz

Jak zpřístupnit v PROXMOX uživateli vytvářet virtuální PC na k tomu vyhrazenému disku, aby se nedostal nikam mimo něj?


Jak zpřístupnit v PROXMOX uživateli vytvářet virtuální PC na k tomu vyhrazenému disku, aby se nedostal nikam mimo něj?

ChatGPT řekl:

Rozumím – chceš dát uživateli možnost vytvářet a spravovat virtuální stroje na konkrétním datovém disku v Proxmoxu, ale bez přístupu k celé hostitelské infrastruktuře. Můžeme to vyřešit kombinací rolí, oprávnění a přidělení storage. Postup by mohl vypadat následovně:


1️⃣ Vytvoření dedikovaného storage pro uživatele

  • Předpokládejme, že máš disk /dev/sdX nebo storage v Proxmoxu (např. local-vm-user).

  • Přidej ho do Proxmoxu → Datacenter → Storage → Add → Directory / LVM / ZFS.

  • Dej mu jméno (např. userdisk) a nastav typ na Disk image nebo ISO/images.

  • Důležité: zaškrtni jen ty VM typy, které chceš povolit (např. VZDump backup, ISO images, Disk image). Nezapojuj Container templates, pokud nechceš full root přístup.


2️⃣ Vytvoření uživatele s omezenou rolí

  • Datacenter → Permissions → Users → Add

  • Přidej uživatele (např. vmuser@pve), nastav password.

  • Role: Vytvoříme nebo použijeme omezenou roli typu VM Creator.

Příklad role „VM Creator“:

  • Permissions:

    • VM.Audit → prohlížení stavu VM

    • VM.Backup → zálohy (pokud je potřeba)

    • VM.Config.Disk → správa disků

    • VM.Config.CDROM → ISO

    • VM.Config.HWType → změna HW

    • VM.Console → přístup ke konzoli

    • ne dávej VM.PowerMgmt pokud nechceš zapnutí/vypnutí? – ale obvykle je potřeba.

  • Nedávej Sys.Modify ani Datastore.Modify – zabrání přístupu k ostatním storage.


3️⃣ Přidělení oprávnění k storage

  • Datacenter → Permissions → Add → Path = storage userdisk

  • Role: „VM Creator“ (nebo custom)

  • Target: jen tento storage.

  • Tím zajistíš, že uživatel bude moct vytvářet VM jen na tomto disku.


4️⃣ Omezení přístupu k hostiteli

  • Nepřidávej uživatele do root ani admin skupin.

  • Nedávej mu SSH přístup k hostiteli, nebo pokud ano, jen omezený chroot do svého adresáře.

  • Pokud používáš Proxmox GUI → uživatel uvidí jen datacentrum a storage, na které má oprávnění.


5️⃣ Test

  1. Přihlas se novým uživatelem.

  2. Zkontroluj, zda:

    • Může vytvořit VM jen na přiděleném storage.

    • Nemůže vidět ostatní VM ani storage.

    • Nemůže provádět operace nad jinými disky.


Pokud chceš, můžu ti připravit přesný seznam rolí a oprávnění v Proxmox GUI krok za krokem pro tento scénář, který funguje bez root přístupu a jen na dedikovaný disk.

Chceš, abych to připravil?

Řekl/a jsi:

Jak nastavím omezený chroot?

ChatGPT řekl:

Chroot v Linuxu je způsob, jak omezenému uživateli poskytnout přístup jen do jednoho vyhrazeného adresáře, kde uvidí jen „virtuální kořenový“ systém. Je to užitečné, pokud chceš uživateli dát SSH přístup, ale nechceš, aby mohl procházet hostitelský systém, měnit konfigurace Proxmoxu nebo vidět jiné VM.

V Proxmoxu to můžeš udělat přes chroot nebo modernější chroot jail přes systemd nebo rssh.
Níže ti ukážu standardní postup s klasickým chrootem, který funguje spolehlivě a je relativně jednoduchý.


1️⃣ Vytvoř základní adresář pro chroot

Například /srv/chroot/vmuser:

mkdir -p /srv/chroot/vmuser

Doporučuji umístit ho na oddělený disk nebo oddíl, který uživatel bude spravovat.
Pokud už máš v Proxmoxu dedikovaný disk userdisk, můžeš složku vytvořit rovnou tam, např. /mnt/userdisk/chroot.


2️⃣ Vytvoř omezeného uživatele

Vytvoříme nového uživatele, například vmuser:

adduser --home /srv/chroot/vmuser/home/vmuser --shell /bin/bash vmuser
  • Home adresář: musí být uvnitř chrootu, jinak se z něj uživatel dostane ven.

  • Heslo nastav pomocí:

    passwd vmuser

3️⃣ Připrav základní strukturu uvnitř chrootu

Uvnitř chrootu je potřeba mít základní adresáře, jinak nebude fungovat ani základní shell.

mkdir -p /srv/chroot/vmuser/{bin,lib,lib64,usr,home,var,etc,tmp,dev,proc}
mkdir -p /srv/chroot/vmuser/home/vmuser
chown -R vmuser:vmuser /srv/chroot/vmuser/home/vmuser
chmod 700 /srv/chroot/vmuser/home/vmuser

4️⃣ Zkopíruj potřebné binárky a knihovny

Pokud chceš, aby měl uživatel k dispozici základní nástroje (bash, ls, scp, rsync), musíš je zkopírovat dovnitř chrootu.

Nejprve najdi, kde se nachází binárka, např.:

which bash

Typicky to bude /bin/bash.
Zkopíruj ji:

cp /bin/bash /srv/chroot/vmuser/bin/

Pak zjisti, jaké knihovny potřebuje:

ldd /bin/bash

Výstup bude něco jako:

linux-vdso.so.1 (0x00007ffc18bde000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f1a2d5f0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a2d200000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1a2d800000)

Teď tyto knihovny zkopíruj do chrootu:

cp /lib/x86_64-linux-gnu/libtinfo.so.6 /srv/chroot/vmuser/lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libc.so.6 /srv/chroot/vmuser/lib/x86_64-linux-gnu/
cp /lib64/ld-linux-x86-64.so.2 /srv/chroot/vmuser/lib64/

Pro každý další příkaz (ls, scp, rsync) zopakuj tento postup.

Tip:
Pokud potřebuješ víc nástrojů, můžeš si pomoci balíkem debootstrap, který ti vytvoří minimalní linuxové prostředí uvnitř chrootu:

apt-get install debootstrap
debootstrap --variant=minbase bookworm /srv/chroot/vmuser http://deb.debian.org/debian/

Tím získáš kompletní malou sadu nástrojů.


5️⃣ Nastav chroot v SSH (omezený přístup)

Edituj konfigurační soubor SSH:

nano /etc/ssh/sshd_config

Přidej na konec:

Match User vmuser
ChrootDirectory /srv/chroot/vmuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no

Pokud chceš povolit plnohodnotný shell, vynech ForceCommand internal-sftp.

Potom restartuj SSH:

systemctl restart sshd

6️⃣ Ověření chrootu

Přihlas se jako vmuser:

ssh vmuser@server-ip

Očekávané chování:

  • Kořenový adresář / je /srv/chroot/vmuser (uvidíš jen to, co je uvnitř).

  • Příkaz cd / tě nevyvede ven.

  • Pokus o cd .. tě nezavede do skutečného / hostitele.

Zkontroluj, že funguje základní sada příkazů (ls, pwd, scp).


7️⃣ Přidání jen storage pro VM

Pokud chceš, aby tento uživatel měl přístup jen k jednomu konkrétnímu storage, můžeš připojit storage do chrootu jako mount:

mount --bind /mnt/userdisk/vmstorage /srv/chroot/vmuser/vmstorage

Pokud chceš, aby to bylo trvalé i po restartu, přidej do /etc/fstab:

/mnt/userdisk/vmstorage /srv/chroot/vmuser/vmstorage none bind 0 0

8️⃣ Bezpečnostní doporučení

  • Nepřiděluj uživateli sudo.

  • Pokud potřebuješ, aby mohl spouštět jen konkrétní příkazy, použij místo klasického shellu rbash (restricted bash).

  • Udržuj minimální počet knihoven a nástrojů uvnitř chrootu.

  • Vždy nastav chmod 700 na citlivé adresáře, které nechceš sdílet.


Chceš, abych ti připravil konkrétní skript, který vytvoří celý chroot automaticky? Mohlo by to ušetřit spoustu manuální práce.


Lze omezit uživateli celkový počet jader?

ChatGPT řekl:

Ano, v Linuxu i v Proxmoxu lze uživateli omezit, kolik CPU jader může jeho virtuální stroj využívat, a to na několika úrovních.
Je důležité rozlišit, jestli chceš:

  1. Omezit konkrétní VM – např. max. 2 jádra pro daný virtuální stroj.

  2. Omezit konkrétního uživatele, aby celkově (v součtu všech jeho VM) nemohl překročit určitý počet jader.

Proxmox standardně hlídá jen nastavení jednotlivých VM, ale lze to obejít i pro globální limity uživatele pomocí cgroups nebo quotas.


1️⃣ Omezení počtu jader na úrovni konkrétní VM

To je nejjednodušší a přímo podporované v Proxmox GUI.

  • Otevři VM → Hardware → Processor (CPU).

  • Nastav Cores na počet jader, které smí tato VM využít (např. 2).

  • Volitelně nastav Sockets, pokud chceš simulovat více CPU socketů.

  • V záložce Resources můžeš nastavit ještě:

    • CPU Limit (v % jednoho jádra, např. 50 = max půl jádra)

    • CPU Units (priorita, výchozí 1024 – vyšší hodnota = vyšší priorita při sdílení CPU).

⚠️ Proxmox sám o sobě ale nebrání uživateli vytvořit více VM, z nichž každé má 2 jádra → tím může obejít omezení.
Pokud potřebuješ globální limit na uživatele, pokračuj dál.


2️⃣ Omezení celkového počtu jader pro uživatele (v součtu všech jeho VM)

To už vyžaduje zásah do Linuxu pomocí cgroups (control groups).
Proxmox běží nad Debianem, takže to jde nastavit standardními nástroji.

a) Zjisti cgroup pro uživatele

Každá běžící VM má svůj proces kvm, který běží pod root, ale Proxmox je organizuje do /sys/fs/cgroup/.

Zkontroluj, kam Proxmox ukládá procesy VM:

systemd-cgls

Najdeš něco jako:

/machine.slice
└─qemu-100.scope
└─qemu-101.scope

Každá VM má vlastní scope (např. qemu-100.scope).


b) Vytvoř cgroup pro konkrétního uživatele

Cílem je, aby všechny VM, které tento uživatel vytvoří, běžely uvnitř jedné skupiny s limitem.

  1. Vytvoř cgroup:

    mkdir -p /sys/fs/cgroup/cpu/vmuser_limit
  2. Nastav maximální CPU čas, např. pro 2 jádra:

    echo 200000 > /sys/fs/cgroup/cpu/vmuser_limit/cpu.cfs_quota_us
    echo 100000 > /sys/fs/cgroup/cpu/vmuser_limit/cpu.cfs_period_us
    • cpu.cfs_period_us = referenční perioda (obvykle 100000 µs = 100 ms).

    • cpu.cfs_quota_us = kolik času smí procesy v cgroup dostat.

    • Hodnota 200000 znamená 2 jádra.


c) Přidávání VM procesů do cgroup

Jakmile uživatel spustí VM, zjisti PID procesu kvm:

ps aux | grep qemu | grep 100

Poté přidej PID do cgroup:

echo PID > /sys/fs/cgroup/cpu/vmuser_limit/tasks

Automatizace:
Proxmox podporuje hook skripty (/etc/pve/local/hookscripts/), které se spouští při startu/stopu VM.
Do hook skriptu můžeš přidat příkaz, který automaticky přesune proces do správné cgroup podle vlastníka.


3️⃣ Omezení přímo v Proxmoxu pro GUI uživatele

Pokud chceš, aby uživatel přes webové rozhraní vůbec nemohl nastavit víc než určitý počet jader, můžeš mu dát roli, která mu nedovolí měnit CPU konfiguraci.

Postup:

  • V Datacenter → Permissions → Roles vytvoř novou roli, např. VM-Limited.

  • Povolené práva:

    • VM.Audit

    • VM.Console

    • VM.PowerMgmt

    • (volitelně) VM.Backup, VM.Snapshot.

  • Nepovoluj VM.Config.CPU → tím nebude moct měnit počet jader.

Pak můžeš sám jako admin přednastavit max. 2 jádra pro všechny jeho VM.


4️⃣ Elegantní řešení přes Proxmox vzdáleného API

Pokud máš více uživatelů, doporučuji použít Proxmox API a napojit to na vlastní provisioning skript.
Ten při vytvoření VM automaticky:

  • nastaví max. CPU cores,

  • případně ověří, kolik jader už má uživatel obsazených,

  • odmítne vytvoření nové VM, pokud by překročil limit.

Tím se vyhneš složitému ručnímu hlídání přes cgroups.


Shrnutí

Metoda Výhoda Nevýhoda
Nastavení Cores pro každou VM Jednoduché, přímo v Proxmox GUI Uživatel může obejít vytvořením více VM
cgroups limit pro uživatele Omezuje součet všech jader napříč VM Nutná konfigurace a hook skripty
Odebrání práva VM.Config.CPU Uživatel nemůže měnit CPU nastavení Admin musí ručně nastavovat
API provisioning Automatizace a škálovatelnost Vyšší složitost

Chceš, abych ti připravil přímo hook skript, který při startu VM automaticky přidá její proces do cgroup s limitem jader? To by celý proces zautomatizovalo.