[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