Portál AbcLinuxu, 8. května 2025 18:28

Dotaz: Suid C programu nefunguje na system('mount ...')

2.1.2012 10:22 polymorf | skóre: 14 | blog: tar_zxpf
Suid C programu nefunguje na system('mount ...')
Přečteno: 217×
Odpovědět | Admin
Příloha:
Mam takyto program v C:
#include <stdio.h>
#include <stdlib.h>

// skopilovat ako root: gcc -o test test.c && chmod +s test
// potom spustit ako obycajny user ./test

int main(int argc, char *argv[]) {

    // toto prejde aj pod beznym userom, zobrazi /etc/shadow
    system("cat /etc/shadow");
    
    // toto neprejde, hlasi "mount: only root can do that"
    system("mount /dev/sdb1 /mnt/test");
    
    return 0;
}
Po skompilovani ma binarka ./test ownera aj grupu root, nastavim suid priznak a spustim to ako normalny user. /etc/shadow to normalne vypisi, ale primontovat /dev/sdb1 na /mnt/test mi to nepovoli, prise ze len root to moze robit. Pridal som normalneho usera do skupiny disk (lebo /dev/sdb1 ma skupinu "disk") ale aj tak to nejde. Dokonca ani ked suidnem /bin/mount. Mozete mi niekto vysvetlit preco to nejde a ako to spravim aby to islo (nechcem pouzit sudo).

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

michich avatar 2.1.2012 10:46 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Odpovědět | | Sbalit | Link | Blokovat | Admin
/bin/mount sám očekává, že bude obvykle spouštěn se SUID root a porovnáná UID s EUID.
Řešení 1× (polymorf (tazatel))
2.1.2012 13:33 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Dá se to obejít buď tím, že se před spouštěním mount nastaví reálné UID také na nulu nebo se místo spouštění příkazu mount použije syscall mount(). Tomu druhému bych dal přednost, z používání system() v programu spouštěném se SUID bitem mám tak trochu husí kůži.
2.1.2012 14:13 polymorf | skóre: 14 | blog: tar_zxpf
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Ten mount() sa mi asi najviac pozdava (ak to bude fungovat), urobim to tak, ze "blacklistujem" particie ktore "my-mount" nepovoli primontovat (root particia, /home, v podstate particie vsetkych diskov), a vsetky ostatne (USB kluce pracovnikov) povoli primontovat.
Řešení 1× (polymorf (tazatel))
2.1.2012 14:25 Sten
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Na USB klíče a další výměnná zařízení doporučuji použít pmount ;-)
2.1.2012 14:55 polymorf | skóre: 14 | blog: tar_zxpf
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Presne to som hladal, dakujem.
2.1.2012 10:49 NN
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Odpovědět | | Sbalit | Link | Blokovat | Admin
V manualu mount se pise:
Normally, only the superuser can mount filesystems. However, when fstab contains the user option on a line, anybody can mount the corresponding system.
NN
2.1.2012 14:15 polymorf | skóre: 14 | blog: tar_zxpf
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Toto by slo pouzit, ale ked si user kupi novy usb kluc musel by som upravovat /etc/fstab takze pre moje ucely je to neprakticke.
2.1.2012 15:37 l4m4
Rozbalit Rozbalit vše Re: Suid C programu nefunguje na system('mount ...')
Za celý život jsem na toto potřeboval akorát dvě položky ve fstabu: jednu pro sdb1 a jednu pro sdb (když je fs přes celý disk), kde b samozřejmě nahraď příslušným písmenem.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.