[sh] SetUid

Pagina: 1
Acties:

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Ik heb een pracht van een script:
code:
1
2
3
#!/bin/sh
touch /testfile
rm /testfile


Het bovenstaande script zal uiteraard alleen werken als ik root ben, omdat anderen geen rechten hebben in de rootdirectory.

Als ik chmod a+s test.sh doe, zou ik verwachten dat iedere gebruiker het bovenstaande script kan gebruiken...

code:
1
2
3
4
5
root@mijnbox:/tmp# chmod a+s test.sh
root@mijnbox:/tmp# su stommeuser
stommeuser@mijnbox:/tmp# ./test.sh
touch: creating `testfile': Permission denied
rm: no such file or directory


Waarom werkt het bovenstaande niet? De owner van dat bestand is root, dus ik zou dat uit moeten kunnen voeren... Of snap ik iets niet echt?

Localhost, sweet localhost


Verwijderd

Het is niet slim om scripts setuid te draaien. /bin/sh (of /bin/bash) zullen dat niet toestaan.
Als je het wel wilt zou een je binaire wrapper kunnen schrijven: een klein programmaatje in C dat als enige functie heeft het aanroepen van je script. Dat programma kan je dan setuid laten draaien.

In perl kan je wel setuid scripts laten uitvoeren. Hoe dat precies moet kan je in de handleiding van perl vinden.

[ Voor 0% gewijzigd door Verwijderd op 12-08-2002 17:44 . Reden: Typo ]


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 09:26

deadinspace

The what goes where now?

Op {shell,perl,...} scripts wordt het setuid bit genegeerd, om veiligheidsredenen meen ik.

Je kunt een echte executable maken in bijvoorbeeld C of iets als sudo gebruiken.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 09:26

deadinspace

The what goes where now?

Verwijderd schreef op 12 augustus 2002 @ 17:43:
Het is niet slim om scripts setuid te draaien. /bin/sh (of /bin/bash) zullen dat niet toestaan.
sh en bash hebben er niks over te zeggen, de kernel negeert die flag gewoon.
draaien.
In perl kan je wel setuid scripts laten uitvoeren. Hoe dat precies moet kan je in de handleiding van perl vinden.
Owja, moet je perlsuid oid voor hebben, die kan zulk soort dingen wel.

Verwijderd

Oh, ik wist niet helemaal goed welk systeem onderdeel dat bitje nu negeert. De kernel of de interpreters zelf... Wel vreemd, want hoe ziet de kernel een verschil tussen een perl script met magic #!/bin/perl of een perl script met magic #!/bin/perlsuid. Daarom dacht ik dat de interpreter het setuid bit negeert.

Maar goed. setuid is iets wat je zo min mogelijk wil gebruiken.