Linux: script that output lines

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Zaratrass
  • Registratie: Oktober 2007
  • Laatst online: 17-09 15:10
Ik heb een opdracht de luid als volgt:
  • Create a small script that outputs the lines in /etc/shadow for all users that are in sales (so both R* and S*) to a file called /home/salespersons_details (users R1,R2,R3,R4,R5,R6,S1,S2,S3,S4,S5,S6)
  • make that file executable
  • Configure such that that scripts is executable by any user
All die users bestaan en staan ook in etc/shadow (gechecked met vi /etc/shadow)

nu heb ik het volgende commando uitgevoerd:

grep R* /etc/shadow > /home/salespersons_details
grep S* /etc/shadow >> /home/salespersons_details
chmod +x /home/salespersons_details
chmod 1777 /home/salespersons_details


Ik denk alleen dat er iets verkeerd gaat bij grep omdat ik geen output krijg in salespersons_details.
Pakt hij die wild card niet?

als ik grep R1 /etc/shadow doe krijg ik wel info

Acties:
  • 0 Henk 'm!

  • Barreljan
  • Registratie: December 2001
  • Laatst online: 13:10

Barreljan

...Zoom-Zoom...

Oke, dus je eerste grep pakt niets op zeg je, gezien op "R1" wel output komt.

Probeer eens
grep R[0-9] /etc/shadow

Idem voor S natuurlijk

[ Voor 9% gewijzigd door Barreljan op 18-01-2018 10:20 ]

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

R* betekent dat je zoekt naar 0 of meer R'en dus dat zou alles moeten matchen.

Je wil inderdaad die van Barreljan, of anders R.*, dus begin met een R en daarna 0 of meerdere characters

Acties:
  • 0 Henk 'm!

  • Zaratrass
  • Registratie: Oktober 2007
  • Laatst online: 17-09 15:10
Barreljan schreef op donderdag 18 januari 2018 @ 10:20:
Oke, dus je eerste grep pakt niets op zeg je, gezien op "R1" wel output komt.

Probeer eens
grep R[0-9] /etc/shadow

Idem voor S natuurlijk
Ik heb nu het volgende gedaan

for i in S{1..6}; do grep $i /etc/shadow >> /home/salespersons_details: done

Ik krijg nu alle users erin.. maar bijvoorbeeld ook user L1, omdat in de gegevens daar achter S4 staat.
In de man pages van grep kan ik niet vinden dat hij alleen het eerste woord pakt :(

Acties:
  • 0 Henk 'm!

  • Barreljan
  • Registratie: December 2001
  • Laatst online: 13:10

Barreljan

...Zoom-Zoom...

manii schreef op donderdag 18 januari 2018 @ 10:22:
[...]

Ik heb nu het volgende gedaan

for i in S{1..6}; do grep $i /etc/shadow >> /home/salespersons_details: done

Ik krijg nu alle users erin.. maar bijvoorbeeld ook user L1, omdat in de gegevens daar achter S4 staat.
In de man pages van grep kan ik niet vinden dat hij alleen het eerste woord pakt :(
En deze?
grep [RS][0-9] /etc/shadow > /home/salespersons_details


Ik ken de shadow file qua inhoud niet en ik weet even niet precies nu wat de exacte output moet wezen voor elke gebruiker. Krijgt elke gebruiker een lijstje van R1/R2..S1/S2 etc ?

[ Voor 69% gewijzigd door Barreljan op 18-01-2018 10:30 ]

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

manii schreef op donderdag 18 januari 2018 @ 10:22:
[...]

Ik heb nu het volgende gedaan

for i in S{1..6}; do grep $i /etc/shadow >> /home/salespersons_details: done

Ik krijg nu alle users erin.. maar bijvoorbeeld ook user L1, omdat in de gegevens daar achter S4 staat.
In de man pages van grep kan ik niet vinden dat hij alleen het eerste woord pakt :(
Google eens op grep starts with....

Verder is het onzin om die grep in een loop te gaan doen, dan ga je het hele voordeel van regexp voorbij...

Google daarna dan eens op grep character classes en dan zie je wat ik bedoel.

Acties:
  • 0 Henk 'm!

  • Zaratrass
  • Registratie: Oktober 2007
  • Laatst online: 17-09 15:10
Barreljan schreef op donderdag 18 januari 2018 @ 10:23:
[...]


En deze?
grep [RS][0-9] /etc/shadow > /home/salespersons_details


Ik ken de shadow file qua inhoud niet en ik weet even niet precies nu wat de exacte output moet wezen voor elke gebruiker. Krijgt elke gebruiker een lijstje van R1/R2..S1/S2 etc ?
dit is de output met

for i in [RS][0-9]; do grep $i /etc/shadow >> /home/salespersons_details: done

Afbeeldingslocatie: http://i66.tinypic.com/2dlrvie.png

Acties:
  • 0 Henk 'm!

  • Barreljan
  • Registratie: December 2001
  • Laatst online: 13:10

Barreljan

...Zoom-Zoom...

manii schreef op donderdag 18 januari 2018 @ 10:29:
[...]


dit is de output met

for i in [RS][0-9]; do grep $i /etc/shadow >> /home/salespersons_details: done

[afbeelding]
De loop hoeft niet. Deze
for i in S{1..6}; do grep $i /etc/shadow >> /home/salespersons_details: done

of van hierboven zijn niet slim sowieso, een loop waarbij je dus elke keer een grep doet op je bestand en output toevoegd aan een bestand. Dus 6x een read, 6x write. Dus als je 150 gebruikers hebt ipv 6, dan word het een redelijk zwaar script. Eerder zou je kunnen doen

for i in `grep [RS][0-9] /etc/shadow`; echo $i >> /home/salespersons_details: done

Maar dat is onnodig want met 1 grep gepiped naar je outputfile is meer dan zat :)

Plat 1 command op je shell uitvoeren:

grep [RS][0-9] /etc/shadow

Geeft dat wat je wilt? Dan heb je geen L* gebruikers. Die output kan je weer verwerken zoals mijn loop hierboven (ook al hoeft dat niet met een loop).

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


Acties:
  • 0 Henk 'm!

  • Zaratrass
  • Registratie: Oktober 2007
  • Laatst online: 17-09 15:10
Barreljan schreef op donderdag 18 januari 2018 @ 10:31:
[...]


De loop hoeft niet. Deze
for i in S{1..6}; do grep $i /etc/shadow >> /home/salespersons_details: done

of van hierboven zijn niet slim sowieso, een loop waarbij je dus elke keer een grep doet op je bestand en output toevoegd aan een bestand. Dus 6x een read, 6x write. Dus als je 150 gebruikers hebt ipv 6, dan word het een redelijk zwaar script. Eerder zou je kunnen doen

for i in `grep [RS][0-9] /etc/shadow`; echo $i >> /home/salespersons_details: done

Maar dat is onnodig want met 1 grep gepiped naar je outputfile is meer dan zat :)

Plat 1 command op je shell uitvoeren:

grep [RS][0-9] /etc/shadow

Geeft dat wat je wilt? Dan heb je geen L* gebruikers. Die output kan je weer verwerken zoals mijn loop hierboven (ook al hoeft dat niet met een loop).
wat ik nu heb gedaan (omdat achter elke usernaam een : staat)


for i in [RS][0-9]:; do grep $i /etc/shadow >> /home/salespersons_details: done

dat werkt perfect :P

ik ga jouw oplossing ook nog even proberen

Acties:
  • 0 Henk 'm!

  • TommieW
  • Registratie: December 2010
  • Laatst online: 29-09 17:27

TommieW

Numa numa.

Om te beginnen vind ik deze opdracht nogal... apart. Waarom /etc/shadow en niet /etc/passwd?
/etc/shadow heeft standaard mode 000, dat is ook wel aan te raden. Echter als je een SUID bit op een bash script zet, doet dat niets. SETUID heeft alleen nut op binaries.

Nooit permissions op 777 zetten! Dat is eerder een blijk van onkunde. Uitvoeren en lezen zijn permissions 1+5=5. Dus 555.

Anyway, even ervanuitgaande dat permissions even niet het probleem zijn.

Een manier om dit op te lossen is met regular expressions. Ongetwijfeld zijn er 1000 manieren om het beter te doen.

Dit script lijkt het te doen:
code:
1
2
#!/usr/bin/bash
grep -P '^(R|S)\d' /etc/shadow


Uitleg:
code:
1
2
3
4
5
grep # Die ken je ondertussen
-P # Voor Perl regular expressions
^ # Zoeken bij het begin van een string
(R|S) # Een letterlijke "R" of "S"
\d # Één cijfer

1700X@3,9GHZ - Asus Crosshair VI Hero - 32GB Corsair LPX - GTX 1070Ti
iPhone 13 Pro Max - Macbook Pro 16" M1 Pro


Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

@TommieW en @Barreljan Hij moet volgens mij alleen users hebben van 1-6.

Maar laat hem zelf ook wat werk doen. Door hem zelf te laten zoeken (maar wel te laten zien waar hij naar kan zoeken) zal hij meer leren dan dat wij even zijn opdracht maken....

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

666 dan dus; number of the Beast. ;)

Acties:
  • 0 Henk 'm!

  • Zaratrass
  • Registratie: Oktober 2007
  • Laatst online: 17-09 15:10
TommieW schreef op donderdag 18 januari 2018 @ 10:35:
Om te beginnen vind ik deze opdracht nogal... apart. Waarom /etc/shadow en niet /etc/passwd?
/etc/shadow heeft standaard mode 000, dat is ook wel aan te raden. Echter als je een SUID bit op een bash script zet, doet dat niets. SETUID heeft alleen nut op binaries.

Nooit permissions op 777 zetten! Dat is eerder een blijk van onkunde. Uitvoeren en lezen zijn permissions 1+5=5. Dus 555.

Anyway, even ervanuitgaande dat permissions even niet het probleem zijn.

Een manier om dit op te lossen is met regular expressions. Ongetwijfeld zijn er 1000 manieren om het beter te doen.

Dit script lijkt het te doen:
code:
1
2
#!/usr/bin/bash
grep -P '^(R|S)\d' /etc/shadow


Uitleg:
code:
1
2
3
4
5
grep # Die ken je ondertussen
-P # Voor Perl regular expressions
^ # Zoeken bij het begin van een string
(R|S) # Een letterlijke "R" of "S"
\d # Één cijfer
Het is een proeftentamen opdracht, dont worry zal nooit op 777 zetten.

Ik liep alleen vast op deze opdracht en zocht wat hulp om me in de goede richting te wijzen.
Dankjewel
Pagina: 1