Portál AbcLinuxu, 8. listopadu 2025 16:27
#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:
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.
Normally, only the superuser can mount filesystems. However, when fstab contains the user option on a line, anybody can mount the corresponding system.NN
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.