Sudo commando maakt bestand met owner root/root

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 23-06 20:04

aawe mwan

Wat ook leuk is:

Topicstarter
Ik wil nmap een scan laten draaien en het resultaat in een XML bestand wegschrijven.
Voor het draaien van de scan heeft nmap sudo rechten nodig, bij-effect daarvan is dat zijn XML outputbestand dus root/root als owner zal krijgen. Dat bestand kan ik met met mijn normale user niet openen.

Een werkende oplossing hiervoor is om een vooraf geopende filedescriptor mee te geven (zie regel 9 t/m 11):

Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh

XML_bestandsnaam=nmap-output.xml
HTML_bestandsnaam=test.html
machinenaam=$1

# omweg via fd3 voor --oX anders maakt hij een bestand met owner/group root,
# zodat je er zelf niet bij mag
exec 3>${XML_bestandsnaam}
sudo -C 4 nmap -sV -O -6 ${machinenaam} --oX /dev/fd/3
exec 3>&-

xsltproc ${XML_bestandsnaam} -o ${HTML_bestandsnaam}

firefox ${HTML_bestandsnaam}


Dit functioneert (in Linux Mint 22/wilma), maar is hier niet een veel eenvoudigere oplossing voor (in Bash)?

„Ik kan ook ICT, want heel moeilijk is dit niet”

Beste antwoord (via aawe mwan op 18-01-2025 12:42)


  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 23-06 22:15

Hero of Time

Moderator LNX

There is only one Legend

Het is logisch dat het resultaat van root wordt, want effectief draait het als root en bestanden worden aangemaakt met de uitvoerende gebruiker als eigenaar.

Met dat als uitleg, je hebt ook sudo variabelen. Voer maar eens 'sudo env' uit, dan zie je onderaan de variabelen SUDO_COMMAND, SUDO_USER, SUDO_UID, SUDO_GID en SUDO_HOME. Dat kan je op het gewenste moment gebruiken als parameters voor iets als chown.

Je zou het hele script als root kunnen laten uitvoeren, op de laatste commando na. Een browser wil je immers niet met root rechten draaien.

Edit:
Alternatief, touch het bestand eerst zodat het al rechten heeft, wat je daarna met root toevoegt verandert de eigenaar/rechten niet.

[ Voor 11% gewijzigd door Hero of Time op 18-01-2025 11:50 ]

Commandline FTW | Tweakt met mate

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 23-06 22:15

Hero of Time

Moderator LNX

There is only one Legend

Het is logisch dat het resultaat van root wordt, want effectief draait het als root en bestanden worden aangemaakt met de uitvoerende gebruiker als eigenaar.

Met dat als uitleg, je hebt ook sudo variabelen. Voer maar eens 'sudo env' uit, dan zie je onderaan de variabelen SUDO_COMMAND, SUDO_USER, SUDO_UID, SUDO_GID en SUDO_HOME. Dat kan je op het gewenste moment gebruiken als parameters voor iets als chown.

Je zou het hele script als root kunnen laten uitvoeren, op de laatste commando na. Een browser wil je immers niet met root rechten draaien.

Edit:
Alternatief, touch het bestand eerst zodat het al rechten heeft, wat je daarna met root toevoegt verandert de eigenaar/rechten niet.

[ Voor 11% gewijzigd door Hero of Time op 18-01-2025 11:50 ]

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 23-06 20:04

aawe mwan

Wat ook leuk is:

Topicstarter
Hero of Time schreef op zaterdag 18 januari 2025 @ 11:45:
Alternatief, touch het bestand eerst zodat het al rechten heeft, wat je daarna met root toevoegt verandert de eigenaar/rechten niet.
Dat is de oplossing:
owner/rechten van een bestaand bestand veranderen niet, als je de inhoud overschrijft (met of zonder sudo).

[ Voor 12% gewijzigd door aawe mwan op 18-01-2025 13:06 ]

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • martyw
  • Registratie: Januari 2018
  • Laatst online: 11:19
Op mijn Ubuntu systeem maak root standaard bestanden aan met lees permissie voor others, dus als root in een directory schrijft waar jij ook toegang toe hebt kun je het lezen.
code:
1
2
3
4
5
6
7
8
martin@lappie:~$ sudo bash
root@lappie:/home/martin# echo  hello > /tmp/x.txt
root@lappie:/home/martin# ls -l /tmp/x.txt 
-rw-r--r-- 1 root root 6 Jan 18 17:31 /tmp/x.txt
root@lappie:/home/martin# 
exit
martin@lappie:~$ cat /tmp/x.txt 
hello

Het zou kunnen dat jouw root een andere default heeft, bv omdat er in een login script zoals .profile een umask gezet is. Bijvoorbeeld met dit mask kunnen others niet lezen.
code:
1
2
3
4
5
6
7
8
9
10
martin@lappie:~$ sudo bash
root@lappie:/home/martin# rm /tmp/x.txt 
root@lappie:/home/martin# umask 137
root@lappie:/home/martin# echo  hello > /tmp/x.txt
root@lappie:/home/martin# ls -l /tmp/x.txt 
-rw-r----- 1 root root 6 Jan 18 17:32 /tmp/x.txt
root@lappie:/home/martin# 
exit
martin@lappie:~$ cat /tmp/x.txt 
cat: /tmp/x.txt: Permission denied

Zet dan de regel
code:
1
umask 133

in je script, deze maakt bestanden aan met permissie rw-r--r-- (je trekt de permissie die je wilt van alles open af, dus 777 - 644 = 133), en schrijf het bestand in een directory waar jouw user lezen mag

[ Voor 3% gewijzigd door martyw op 18-01-2025 18:09 ]


Acties:
  • 0 Henk 'm!

  • hcQd
  • Registratie: September 2009
  • Laatst online: 10:07
Je kunt ook
code:
1
sudo -C 4 nmap -sV -O -6 ${machinenaam} --oX - > ${XML_bestandsnaam}

gebruiken, de redirectie gebeurd voor sudo, de normale uitvoer van nmap wordt onderdrukt in dit geval.

Acties:
  • 0 Henk 'm!

  • Thc_Nbl
  • Registratie: Juli 2001
  • Laatst online: 21-05 22:24
install -o username
(* man install)
;)

ehhh.. noppes


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 23-06 22:15

Hero of Time

Moderator LNX

There is only one Legend

Thc_Nbl schreef op maandag 3 februari 2025 @ 16:35:
install -o username
(* man install)
;)
Niet echt handige kick. Waarom? Staat in de manpage zelf al die je aanhaalt:
code:
1
2
       -o, --owner=OWNER
              set ownership (super-user only)

Super-user only. Het script wordt niet met root rechten gedraaid, alleen het nmap commando. Touch is dan toch echt nog wel de betere oplossing want het wordt van de gebruiker die het uitvoert, niet een arbitraire andere gebruiker die je nog apart moet opgeven.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Thc_Nbl
  • Registratie: Juli 2001
  • Laatst online: 21-05 22:24
Dus volgens jou is dit hetzelfde, want in het script wordt al sudo gebruikt dus waarom niet.

sudo touch
sudo install

Met install kan je owner, rechten mee geven, touch niet en daarom de post.

[ Voor 11% gewijzigd door Thc_Nbl op 06-02-2025 12:23 ]

ehhh.. noppes


Acties:
  • 0 Henk 'm!

  • Donaldinho
  • Registratie: November 2002
  • Laatst online: 10:55
Ja of je kan naar een map schrijven die owned is door de group waar jouw user in zit en waar je setgid op gezet hebt (chmod g+s)

You almost can’t blame him or the other diet gurus for leaning in on the techno-bullshit market; it’s hard to fill up a 300 page diet book on “eat a bit less and find a type of exercise that doesn’t make you hate life.”


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 23-06 22:15

Hero of Time

Moderator LNX

There is only one Legend

Thc_Nbl schreef op donderdag 6 februari 2025 @ 12:20:
Dus volgens jou is dit hetzelfde, want in het script wordt al sudo gebruikt dus waarom niet.

sudo touch
sudo install

Met install kan je owner, rechten mee geven, touch niet en daarom de post.
Nee, een 'sudo touch' maakt een bestand aan met root als eigenaar, niet de oorspronkelijke unprivileged gebruiker. Het oorspronkelijke script heeft alleen het nmap commando met sudo rechten. Het bestand dat hier mee gemaakt wordt, dient van de oorspronkelijke uitvoerder te zijn. Stel nou dat je heel specifieke sudo instellingen hebt waarmee je alleen nmap als root mag uitvoeren. Dan gaat jouw oplossing dus niet werken.

Als sudo niet nodig is om te krijgen wat je wil, gebruik het dan niet.

Commandline FTW | Tweakt met mate

Pagina: 1