[linux] /dev/shm/bestand door iedereen te overschrijven
Daniel C. von Asmuth
asmuth op bakunin.xs4all.nl
Di Nov 10 10:16:33 CET 2020
Aldus schreef Geert Stappers op Mon, Nov 09, 2020 at 09:59:43PM +0100:
> On Mon, Nov 09, 2020 at 07:38:58PM +0100, Daniel C. von Asmuth wrote:
> > Aldus schreef Geert Stappers op Mon, Nov 09, 2020 at 06:29:15PM +0100:
> > >
> > > Wat ik gedacht had, is een bestand in /dev/shm te zetten
> > > en dat bestand voor iedereen overschrijfbaar te maken.
> > >
> > > Maar dat lukt niet en ik begrijp nog niet waarom niet.
> > >
> > > <history om="probleem te kunnen reproduceren">
> > > cd /dev/shm
> > > pwd
> > > id
> > > sudo id
> > > date | tee user.datum
> > > date | sudo tee root.datum
> > > ls -l *.datum
> > > sudo chmod a+rw *.datum
> > > ls -l *.datum
> > > date | sudo tee user.datum
> > > stat user.datum
> > > cat user.datum
> > > </history>
> > >
> > > In welke hoek zou ik de mogelijke oorzaak kunnen vinden?
> >
> > Interessant; reproduceerbaar.
> >
> > Mijn bevinding is dat als je de schrijfpermissie voor iedereen
> > open zet, dat 'asmuth' dan wel de file van 'root' kan overschrijven,
> > maar 'root' niet die van 'asmuth'.
> >
> > Probeer eens:
> > ls -la /dev/shm
>
> stappers op trancilo:~
> $ ls -la /dev/shm
> total 12
> drwxrwxrwt 2 root root 100 Nov 9 20:50 .
> drwxr-xr-x 22 root root 4000 Nov 1 19:11 ..
> -rw-rw-rw- 1 gs0604 gs0604 5 Nov 9 17:55 move-forward.timestamp
> -rw-rw-rw- 1 root root 29 Nov 9 18:06 root.datum
> -rw-rw-rw- 1 stappers stappers 29 Nov 9 18:05 stappers.datum
> stappers op trancilo:~
> $ ls -lad /dev/shm
> drwxrwxrwt 2 root root 100 Nov 9 20:51 /dev/shm
>
> > Dit gedrag is het gevolg van het feit dat /dev/shm is gemount met het
> > 't' permissie-bit gezet, net zoals de /tmp directory.
>
> OK, eigenschap van de directory. Klinkt goed. Dank
>
> <screenshot met="testjes"
> maar="het verwacht gedrag van t permissie NIET kunnen reproduceren">
> stappers op trancilo:/dev/shm
> $ cd
> stappers op trancilo:~
> $ touch bestand
> stappers op trancilo:~
> $ ls -la bestand
> -rw-r--r-- 1 stappers stappers 0 Nov 9 20:42 bestand
> stappers op trancilo:~
> $ chmod o+t bestand
> stappers op trancilo:~
> $ ls -la bestand
> -rw-r--r-T 1 stappers stappers 0 Nov 9 20:42 bestand
De Linux kernel negeert het sticky bit op gewone files; het gaat om de directory.
Het effect hangt af van welk OS je gebruikt.
https://en.wikipedia.org/wiki/Sticky_bit
> $ mkdir probeersel
> stappers op trancilo:~
> $ ls -ld probeersel/
> drwxr-xr-x 2 stappers stappers 4096 Nov 9 20:59 probeersel/
> stappers op trancilo:~
> $ chmod o+t probeersel/
> stappers op trancilo:~
> $ ls -ld probeersel/
> drwxr-xr-t 2 stappers stappers 4096 Nov 9 20:59 probeersel/
> stappers op trancilo:~
> $ echo iets | tee probeersel/bestand
> iets
> stappers op trancilo:~
> $ ls -l probeersel/bestand
> -rw-r--r-- 1 stappers stappers 5 Nov 9 21:01 probeersel/bestand
> stappers op trancilo:~
> $ chmod a+w probeersel/bestand
> stappers op trancilo:~
> $ ls -l probeersel/bestand
> -rw-rw-rw- 1 stappers stappers 5 Nov 9 21:01 probeersel/bestand
> stappers op trancilo:~
> $ echo ietsanders | sudo tee probeersel/bestand
> ietsanders
> stappers op trancilo:~
> $ cat probeersel/bestand
> ietsanders
> stappers op trancilo:~
> $ chmod a+w probeersel
> stappers op trancilo:~
> $ ls -ld probeersel/
> drwxrwxrwt 2 stappers stappers 4096 Nov 9 21:01 probeersel/
> stappers op trancilo:~
> $ echo nogietsanders | sudo tee probeersel/bestand
> nogietsanders
> stappers op trancilo:~
> $
> </screenshot>
>
> Op de plek waar ik het probleem ontdekte
> kan ik voorkomen dat twee gebruikers ( root en andere user )
> allebei de tijdelijke file gaan herschrijven.
Inderdaad apart en de man-page geeft ook het antwoord niet.
Nog eens getest in een normale directory:
ls -la
total 16
drwxrwxrwt 2 root root 4096 Nov 10 09:32 ./
drwxr-xr-x 15 root root 4096 Nov 10 09:31 ../
-rw-rw-rw- 1 asmuth asmuth 6 Nov 10 09:49 asmuth.datum
-rw-rw-rw- 1 root root 32 Nov 10 09:50 root.datum
[daniel op bakunin tmp]$ date >root.datum
[daniel op bakunin tmp]$ date >asmuth.datum
-bash: asmuth.datum: Permission denied
Het volgende gedrag was verwacht:
[daniel op bakunin tmp]$ rm -f root.datum
rm: cannot remove 'root.datum': Operation not permitted
[daniel op bakunin tmp]$ rm -f asmuth.datum
rm: cannot remove 'asmuth.datum': Operation not permitted
Nu blijkt dat zelfs root de file asmuth.datum niet mag overschrijven
ondanks de schrijfpermissies, maar dat files van root onbeschermd zijn.
Ook getest met een oudere Linux versie: daar treedt dit gedrag niet op.
> > Met afstandelijke groet,
> >
> > Daniel von Asmuth
> >
> > How long it takes to reach your goal
> > depends less on your speed than on your direction.
>
> Die kwoot is geweldig
(citaat? zelf verzonnen!)
Meer informatie over de Linux
maillijst