Portál AbcLinuxu, 8. května 2025 18:28
#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.